Maven archetype (javaee6-jboss-ear) で生成された ear プロジェクトを使用して Jboss7.1.3 で seam3 セキュリティを試していますが、カスタム クラスをロードできないというエラーを回避できません。
Caused by: java.lang.ClassNotFoundException: com.czetsuya.javaee6.security.Authenticator from [Module "deployment.javaee6-demo.ear.javaee6-demo-ejb-0.0.1-SNAPSHOT.jar:main" from Service Module Loader]
私のプロジェクトは次のように構成されています: myProject -ear -jar (beans.xml とオーセンティケーターが定義されている場所) -war
私のオーセンティケータ クラス: パッケージ com.czetsuya.javaee6.security;
import javax.enterprise.inject.Model; import javax.inject.Inject;
org.jboss.seam.security.BaseAuthenticator をインポートします。org.jboss.seam.security.Credentials をインポートします。org.picketlink.idm.impl.api.PasswordCredential をインポートします。import org.picketlink.idm.impl.api.model.SimpleUser;
@Model
public class Authenticator extends BaseAuthenticator {
@Inject
Credentials credentials;
public Authenticator() { }
@Override
public void authenticate() {
if ("demo".equals(credentials.getUsername())
&& credentials.getCredential() instanceof PasswordCredential
&& "demo".equals(((PasswordCredential) credentials.getCredential()).getValue())) {
setStatus(AuthenticationStatus.SUCCESS);
setUser(new SimpleUser("demo"));
}
}
}
私のbeans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:s="urn:java:ee" xmlns:security="urn:java:org.jboss.seam.security"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://jboss.org/schema/cdi/beans_1_0.xsd">
<interceptors>
<class>org.jboss.seam.security.SecurityInterceptor</class>
</interceptors>
<security:IdentityImpl>
<s:modifies />
<security:authenticatorClass>com.czetsuya.javaee6.security.Authenticator
</security:authenticatorClass>
</security:IdentityImpl>
</beans>
myProject で、seam-bom を定義しました。
<dependency>
<groupId>org.jboss.seam</groupId>
<artifactId>seam-bom</artifactId>
<version>3.1.0.Final</version>
<scope>import</scope>
<type>pom</type>
</dependency>
ejb/pom.xml で、seam-security を定義しました。
<dependency>
<groupId>org.jboss.seam.security</groupId>
<artifactId>seam-security</artifactId>
<scope>provided</scope>
</dependency>
スコープが提供されていない場合、コンパイルの問題が発生します: クラスがありません。
奇妙なことに、戦争プロジェクトを展開するときに同じセットアップが機能します。何か考えはありますか? 私は戦争を耳の中に入れただけです:-)
私は最小限の変更で Maven アーキタイプから生成された ear でも同じことを行っています。Authenticator と seam-security の依存関係を追加するだけです。エラーが発生しているプロジェクトとの大きな違いは、ほとんどの jboss jar を javaee-api に置き換えたことです。これが標準であるためです。そして、JBoss は標準だと思いました :-)、独自の jar で魔法が再び起こっているようです。
*作業中の純粋な jboss プロジェクトはここにアップロードされています: https://code.google.com/p/czetsuya/source/browse/#svn%2Ftrunk%2Fjboss7-seam3-security