ユーティリティクラスのローカルStatelesセッションBeanインスタンスを検索する際に問題があります。 $ ProxyXYZ(XYZは任意の数である)
我々はすべてがEARアーカイブにパッケージ化されて
JSF2
、Glassfishの3.1.1、JPA 2、EJB 3を使用している:我々は常にClassCastExceptionが得られます。また、私たちのプロジェクトではBean検証を使用しています。そのため、検証者クラスの1つでは、StatelessセッションBeanのインスタンスを取得しようとしています。バリデータは、このように定義されています
public class ValidadorParametroGlobal implements ConstraintValidator<ValidacionParametroGlobal, ParametroGlobal> {
@Override
public void initialize(final ValidacionParametroGlobal constraintAnnotation) {
try {
//Lookup works, jndi name is correct, but cast fails
ParametroGlobalBOImpl pgbo =
(ParametroGlobalBOImpl) new InitialContext().lookup(
"java:global/esipren-ear/esipren-ejb/ParametroGlobalBOImpl!" +
"ec.gob.mf.esipren2.bo.entidad.ParametroGlobalBOLocal");
LOG.info(pgbo);
} catch (NamingException ex) {
LOG.error("No se pudo recuperar el bo de parametro global en el validador");
throw new IllegalStateException("No se puede ejecutar la validación", ex);
}
LOG.debug("Inicializando validador");
}
... MORE CODE
}
セッションビーン:
@Stateless
@Local(ParametroGlobalBOLocal.class)
@Remote(ParametroGlobalBORemote.class)
public class ParametroGlobalBOImpl extends ParametroGlobalGenericBridgeImpl implements ParametroGlobalBOLocal,
ParametroGlobalBORemote {
MORE code...
}
我々はProxyクラスのInstancceを取得するためのルックアップ・プロセスはうまく動作しますが、それをキャストするかのうではありませんセッションBeanと、このバリデータが実行されたとき、私たちは、この例外を取得:
java.lang.ClassCastException: $Proxy1519
at ec.gob.mf.esipren2.validacion.ValidadorParametroGlobal.initialize(ValidadorParametroGlobal.java:64)
at ec.gob.mf.esipren2.validacion.ValidadorParametroGlobal.initialize(ValidadorParametroGlobal.java:41)
at org.hibernate.validator.engine.ConstraintTree.initializeConstraint(ConstraintTree.java:302)
at org.hibernate.validator.engine.ConstraintTree.createAndInitializeValidator(ConstraintTree.java:212)
at org.hibernate.validator.engine.ConstraintTree.getInitializedValidator(ConstraintTree.java:189)
at org.hibernate.validator.engine.ConstraintTree.validateConstraints(ConstraintTree|#]
[#|2011-10-28T11:46:10.814-0500|INFO|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=19;_ThreadName=Thread-4;|.java:135)
at org.hibernate.validator.metadata.MetaConstraint.validateConstraint(MetaConstraint.java:121)
at org.hibernate.validator.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:327)
at org.hibernate.validator.engine.ValidatorImpl.validateConstraintsForRedefinedDefaultGroup(ValidatorImpl.java:273)
at org.hibernate.validator.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:256)
at org.hibernate.validator.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:210)
at org.hibernate.validator.engine.ValidatorImpl.validate(ValidatorImpl.java:119)
at ec.gob.mf.esipren2.validacion.BeanValidationEventListener.validate(BeanValidationEventListener.java:56)
at ec.gob.mf.esipren2.persistencia.dao.jpa.JpaGenericDAOImpl.crear(JpaGenericDAOImpl.java:113)
... 95 more
|#]
我々はまた、バリデータクラスをこのように定義しています
public class ValidadorParametroGlobal implements ConstraintValidator<ValidacionParametroGlobal, ParametroGlobal> {
@Override
public void initialize(final ValidacionParametroGlobal constraintAnnotation) {
try {
ParametroGlobalBOLocal pgbo =
(ParametroGlobalBOLocal) new InitialContext().lookup(
"java:global/esipren-ear/esipren-ejb/ParametroGlobalBOImpl!" +
"ec.gob.mf.esipren2.bo.entidad.ParametroGlobalBOLocal");
LOG.info(pgbo);
} catch (NamingException ex) {
LOG.error("No se pudo recuperar el bo de parametro global en el validador");
throw new IllegalStateException("No se puede ejecutar la validación", ex);
}
LOG.debug("Inicializando validador");
}
... MORE CODE
}
しかし、同じエラーが発生します。
すべてのアイデア? GlassFishの3.1.1でローカルまたはリモートEJB参照を取得するための