【问题标题】:Cannot get EJB from MBean in JBoss7无法从 JBoss7 中的 MBean 获取 EJB
【发布时间】:2013-08-19 14:17:09
【问题描述】:

问题如下。我正在尝试将项目从 JBoss 4.2 迁移到 JBoss 7.1。 以前的 ejb 查找是通过以下方式完成的:

    Properties props = new Properties();
    props.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.security.jndi.JndiLoginInitialContextFactory");
    props.put(Context.SECURITY_PRINCIPAL, new SimplePrincipal(login));
    props.put(Context.SECURITY_CREDENTIALS, password);
    InitialContext ctx = new InitialContext(props);
    SomeClass someClass = (SomeClass) ctx.lookup("appName/SomeClass/local");

一切正常。现在实现如下:

InitialContext ctx = new InitialContext();
SomeClass someClass = (SomeClass) ctx.lookup("java:app/jarModuleName/SomeClass!com.example.SomeClass");

ejb接口:

@Local
public interface SomeClass(){
...
}

ejb 类:

@Stateless(name = "SomeClass")
public class SomeClassImpl implements SomeClass() {
...
}

在引导期间 jboss 显示绑定是:

java:app/jarModuleName/SomeClass!com.example.SomeClass

但是 lookup() after 会导致 NameNotFoundException。

包结构如下:

appName.ear
|
+--jmx-services.sar (where lookup method is invoked)
|
+--jarModuleName.jar (where ejb is located.)

jarModuleName中ejb-jar.xml的内容:

<ejb-jar version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd">
    <session>
        <ejb-name>SomeClass</ejb-name>
        <ejb-class>com.example.SomeClassImpl</ejb-class>
    </session>
</enterprise-beans>

也可以指定,MBean 是用“旧式”创建的,使用 jboss-service.xml 和 start()/stop() 方法,而不是 @Startup 和 @Singleton 注释。

【问题讨论】:

  • 客户端和 EJB 是否在同一台机器上?如果不是,我认为您需要使用远程处理作为 url。

标签: java jboss ejb jmx


【解决方案1】:

@Local@Remote 与两个单独的接口一起使用,我强烈建议使用@EJB

还将您的 EJB 放在不同的 jar 文件中并进行部署。

这个文件夹结构对我有用:

yourApp.ear
{
-lib
-META-INF
{
   application.xml
  }
-yourEJB.jar
-yourWebContent.war
}

您的 META-INF 文件夹中应该有一个 application.xml,示例如下:

<?xml version="1.0" encoding="UTF-8"?>
<application version="5" xmlns="http://java.sun.com/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd">
  <module>
    <ejb>
      yourEJB.jar
    </ejb>
  </module>
  <module>
    <web>
      <web-uri>
        yourWar.war
      </web-uri>
      <context-root>
        yourAppRoot (use it as localhost://yourAppRoot)
      </context-root>
    </web>
  </module>
</application>


在 JBoss 中部署 yourApp.ear。


我没有在我的应用程序中使用 ejb-jar.xml。

【讨论】:

  • 在字段上使用@EJB时,之后会抛出NPE,所以不会在那里注入...
  • 您是否为 EJB 模块配置了 application.xml 文件?
  • 不,我有 ejb-jar.xml 用于 ejb 配置。我现在将更新问题的内容。
  • 我认为 ejb-jar.xml 仅用于 war 部署,而 applcation.xml 用于 ear 部署。
  • 不,我没有...我使用 maven-ear-plugin 2.8 版本来创建耳朵。
猜你喜欢
  • 2016-11-11
  • 1970-01-01
  • 1970-01-01
  • 2013-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多