2016-03-23 52 views
1

我在EJB 3.1中有EJB,我试图在JBoss EAP 6中部署EJB,但启动服务器时。它在JNDI名称中附加版本号,如下所示。如何摆脱JNDI名称中的版本号,Jboss EAP 6,EJB 3.1

18:27:57,068 INFO [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-6) JNDI bindings for session bean named TestService in deployment unit subdeployment "TestGroup-war-3_0_0-SNAPSHOT.war" of deployment "TestGroup-ear-3_0_0-SNAPSHOT.ear" are as follows: 

java:global/TestGroup-ear-3_0_0-SNAPSHOT/TestGroup-war-3_0_0-SNAPSHOT/TestService!org.pkg.ejb.local.CRMDataServiceLocal 
java:app/TestGroup-war-3_0_0-SNAPSHOT/TestService!org.pkg.ejb.local.CRMDataServiceLocal 
java:module/TestService!org.pkg.ejb.local.CRMDataServiceLocal 
java:global/TestGroup-ear-3_0_0-SNAPSHOT/TestGroup-war-3_0_0-SNAPSHOT/TestService 
java:app/TestGroup-war-3_0_0-SNAPSHOT/TestService 
java:module/TestService 

如何从我的JNDI名称中删除版本号“-3_0_0-SNAPSHOT”? 当我部署耳朵时,我有ejb-jar.xml放置在ejb jar文件中。

+0

我也放在ejb-jar.xml中在META-INF我ejb项目,但这并不会改变jndi的名称。 –

回答

3

按照EJB JNDI Naming Reference,对于一个会话bean的JNDI查找名称的语法如下:

ejb:<appName>/<moduleName>/<distinctName>/<beanName>!<viewClassName>?stateful 

因此,你要可以通过两种方式来实现的:

  1. 修改您可交付文件的名称(WAR和EAR)

为了除去从你的战争版本,你可能只是做你的战争的POM如下:

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-war-plugin</artifactId> 
      <configuration> 
       <warName>${project.artifactId}</warName> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

关于你的耳朵,为了消除从它的版本,你可以放置在你的EAR的POM如下:

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-ear-plugin</artifactId> 
      <configuration> 
       (...) 

       <finalName>${project.artifactId}</finalName> 

       (...) 

      </configuration> 
     </plugin> 
    </plugins> 
</build> 

通过上面的配置,你会碰到这样的:

.../TestGroup-ear/TestGroup-war/... 
  • 利用ejb-jar.xml中的application.xml文件
  • 创建ejb-jar.xml中,与下面的内容,并将其放在你的战争的的src /主/ web应用/ WEB下-INF文件夹

    <ejb-jar xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
              http://xmlns.jcp.org/xml/ns/javaee/ejb-jar_3_2.xsd" 
        version="3.2"> 
        <module-name>someModuleName</module-name> 
    </ejb-jar> 
    

    之后,放置一个的application.xml文件,你的EAR的的src /主/资源/ META-INF文件夹下,W第i个以下内容:

    <?xml version="1.0" encoding="UTF-8"?> 
    <application xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
          xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
               http://xmlns.jcp.org/xml/ns/javaee/application_7.xsd" 
        version="7"> 
    
        <application-name>someApplicationName</application-name> 
    
        </<module> 
         <web> 
          <web-uri>TestGroup-war-${project.version}.war</web-uri> 
          <context-root>testGroup</context-root> 
         </web> 
        </module> 
    </application> 
    

    然后,在你的JNDI,你必须是这样的:

    java:global/someApplicationName/someModuleName/TestService!org.pkg.ejb.local.CRMDataServiceLocal 
    java:app/someModuleName/TestService!org.pkg.ejb.local.CRMDataServiceLocal 
    java:module/TestService!org.pkg.ejb.local.CRMDataServiceLocal 
    java:global/someApplicationName/someModuleName/TestService 
    java:app/someModuleName/TestService 
    java:module/TestService 
    
    +0

    我只是想让版本不会出现在jndi的名字中。您提出的这些更改将从EAR和WAR文件中删除版本。 –

    +0

    @JigarNaik,检查我的更新答案。 – aribeiro

    0

    的答案上面并没有为我工作。在我来说,我升级了Maven的耳插件2.10版本,并提供了“fileNameMapping”属性为“无版”:

    <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-ear-plugin</artifactId> 
        <version>2.10</version> 
        <configuration> 
         <!-- Tell Maven we are using Java EE 7 --> 
         <version>7</version> 
         <fileNameMapping>no-version</fileNameMapping>  
         <generateApplicationXml>true</generateApplicationXml> 
         <defaultLibBundleDir>/lib</defaultLibBundleDir> 
         <modules> 
          <ejbModule> 
           <groupId>${project.groupId}</groupId> 
           <artifactId>dpc-ejb</artifactId> 
           <bundleDir>/</bundleDir> 
          </ejbModule> 
          <webModule> 
           <groupId>${project.groupId}</groupId> 
           <artifactId>dpc-war</artifactId> 
           <bundleDir>/</bundleDir> 
           <contextRoot>dpc</contextRoot> 
          </webModule> 
         </modules> 
        </configuration> 
    </plugin>