我有一个Maven项目,我想在其中尝试集成测试EAR子模块。 在集成测试子模块中,我执行以下操作:
Properties env;
Context ctx;
env = new Properties();
env.setProperty( "java.naming.factory.initial", "org.jboss.naming.remote.client.InitialContextFactory");
env.setProperty(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
env.setProperty( "java.naming.provider.url", "remote://localhost:4447");
env.put(Context.SECURITY_PRINCIPAL, "jboss-user");
env.put(Context.SECURITY_CREDENTIALS, "*******");
ctx = new InitialContext( env );
IBMPFacadeRemote bmpFacade = ( IBMPFacadeRemote ) ctx.lookup( "ejb:DeDomain-ejb-1.0-SNAPSHOT/BMPFacade!de.domain.service.IBMPFacadeRemote");
bmpFacade.executeBMPProcess( model1, model2);//model1 & model2 are some entities
问题:当调用mvn integration-test时,它最终会出现以下异常
java.lang.ClassCastException: org.jboss.ejb.client.naming.ejb.EjbNamingContext cannot be cast to de.domain.service.IBMPFacadeRemote
有人可以帮我解决这个问题吗?是否有可能使用Local Bean进行集成测试(maven项目使用failsafe-plugin)?
答案 0 :(得分:0)
现在很难说究竟是什么解决了问题,但我会尝试提及解决问题的所有改变。
在pom.xml中添加了依赖项
<dependency>
<groupId>org.jboss.as</groupId>
<artifactId>jboss-as-ejb-client-bom</artifactId>
<version>7.1.1.Final</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.jboss.as</groupId>
<artifactId>jboss-as-jms-client-bom</artifactId>
<version>7.1.1.Final</version>
<type>pom</type>
</dependency>
更改了JNDI查找,如下所示(在更改EAR和EJB项目的部署名称之后)
IBMPFacadeRemote bmpFacade = ( IBMPFacadeRemote ) ctx.lookup( "ejb:DeDomain-ear/DeDomain-ejb//BMPFacadeBean!de.domain.service.IBMPFacadeRemote");
从EJB Project&amp; amp;中删除了EJB maven插件。其他一些资源,例如jndi.properties
可能值得一提的是,Properties
实例与问题中所述的实例保持一致。
答案 1 :(得分:-1)
JNDI属性对我来说很奇怪。我总是成功使用以下JBoss属性:
java.naming.provider.url=jnp://localhost:1099
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
jnp.socket.Factory=org.jnp.interfaces.TimedSocketFactory
可能你应该仔细检查一下。