2016-03-23 51 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>