查找远程Bean,在JBoss 7.1中获取EjbNamingContext

时间:2013-02-08 16:18:04

标签: ejb jboss7.x lookup ear

我有一个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)?

2 个答案:

答案 0 :(得分:0)

现在很难说究竟是什么解决了问题,但我会尝试提及解决问题的所有改变。

  1. 在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>
    
  2. 更改了JNDI查找,如下所示(在更改EAR和EJB项目的部署名称之后)

    IBMPFacadeRemote bmpFacade = ( IBMPFacadeRemote ) ctx.lookup( "ejb:DeDomain-ear/DeDomain-ejb//BMPFacadeBean!de.domain.service.IBMPFacadeRemote");
    
  3. 从EJB Project&amp; amp;中删除了EJB maven插件。其他一些资源,例如jndi.properties

  4. 可能值得一提的是,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

可能你应该仔细检查一下。