Как избавиться от номера версии в именах JNDI, Jboss EAP 6, EJB 3.1

У меня есть EJB в EJB 3.1, которые я пытаюсь развернуть в JBoss EAP 6, но когда я запускаю сервер. Он добавляет номер версии в имена JNDI, как показано ниже.

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

Как удалить номер версии "-3_0_0-SNAPSHOT" из имен JNDI? У меня есть ejb-jar.xml, который помещается в файл ejb jar, когда я развертываю ухо.


person Jigar Naik    schedule 23.03.2016    source источник
comment
Я также поместил ejb-jar.xml в META-INF моего проекта ejb, но это не меняет имя jndi.   -  person Jigar Naik    schedule 24.03.2016


Ответы (2)


Согласно EJB Справочник по именованию JNDI, имя поиска JNDI для сессионного компонента имеет следующий синтаксис:

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

Поэтому желаемого можно добиться двумя способами:

  1. Измените имя ваших файлов поставки (WAR и EAR)

Чтобы удалить версию из WAR, вы можете просто сделать следующее в POM WAR:

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

Что касается вашего EAR, чтобы удалить из него версию, вы можете поместить следующее в POM вашего EAR:

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

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

                (...)

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

С приведенной выше конфигурацией у вас будет что-то вроде:

.../TestGroup-ear/TestGroup-war/...
  1. Используйте файлы ejb-jar.xml и application.xml.

Создайте файл ejb-jar.xml с приведенным ниже содержимым и поместите его в папку src/main/webapp/WEB-INF файла WAR:

<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 в папку src/main/resources/META-INF EAR со следующим содержимым:

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

ОБНОВИТЬ

Начиная с версии 2.5, подключаемый модуль Maven EAR имеет параметр no-version, для которого можно установить значение свойства fileNameMapping, чтобы исключить версию из вашего артефакта:

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

        <fileNameMapping>no-version</fileNameMapping>

        (...)

    </configuration>
</plugin>
person aribeiro    schedule 23.03.2016
comment
Я просто хочу, чтобы версия не отображалась в имени jndi. Эти изменения, которые вы предложили, удаляют управление версиями из файлов EAR и WAR. - person Jigar Naik; 24.03.2016

Ответы выше не работали для меня. В моем случае я обновил плагин maven-ear-plugin до версии 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>
person Meindert    schedule 23.11.2016