Java 无法从JBoss7中的MBean获取EJB

Java 无法从JBoss7中的MBean获取EJB,java,jboss,ejb,jmx,Java,Jboss,Ejb,Jmx,问题如下。我正在尝试将项目从JBoss4.2迁移到JBoss7.1。 以前的ejb查找是通过以下方式完成的: Properties props = new Properties(); props.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.security.jndi.JndiLoginInitialContextFactory"); props.put(Context.SECURITY_PRINCIPAL, new Si

问题如下。我正在尝试将项目从JBoss4.2迁移到JBoss7.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");
appName.ear
|
+--jmx-services.sar (where lookup method is invoked)
|
+--jarModuleName.jar (where ejb is located.)
ejb接口:

@Local
public interface SomeClass(){
...
}
ejb类:

@Stateless(name = "SomeClass")
public class SomeClassImpl implements SomeClass() {
...
}
在引导期间,jboss显示绑定是:

java:app/jarModuleName/SomeClass!com.example.SomeClass
但后面的lookup()会导致NameNotFoundException

包结构如下所示:

InitialContext ctx = new InitialContext();
SomeClass someClass = (SomeClass) ctx.lookup("java:app/jarModuleName/SomeClass!com.example.SomeClass");
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>

某类
com.example.SomeClassImpl

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

使用
@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>

yourEJB.jar
你的战争
你同意(把它当作localhost://yourAppRoot)

在JBoss中部署yourApp.ear



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

@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>

yourEJB.jar
你的战争
你同意(把它当作localhost://yourAppRoot)

在JBoss中部署yourApp.ear



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

客户端和ejb在同一台机器上吗?如果不是,我认为您需要使用远程处理作为url。客户端和EJB在同一台机器上吗?如果不是,我认为您需要使用远程处理作为url。当在字段上使用@EJB时,它会在之后抛出NPE,因此它不会被注入到那里……您是否为EJB模块配置了application.xml文件?不,我为EJB配置了EJB-jar.xml。我现在将更新问题的内容。我认为ejb-jar.xml仅用于war部署,application.xml用于ear部署。不,我没有任何。。。我使用maven ear plugin 2.8版本创建ear。当在字段上使用@EJB时,它会在之后抛出NPE,因此它不会被注入到那里……您是否为EJB模块配置了application.xml文件?不,我有EJB-jar.xml用于EJB配置。我现在将更新问题的内容。我认为ejb-jar.xml仅用于war部署,application.xml用于ear部署。不,我没有任何。。。我使用maven ear插件2.8版本创建ear。