gpt4 book ai didi

jndi - 如何删除 JNDI 名称中的版本号、Jboss EAP 6、EJB 3.1

转载 作者:行者123 更新时间:2023-12-02 04:41:54 26 4
gpt4 key购买 nike

我有 EJB 3.1 中的 EJB,我试图将其部署在 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

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

最佳答案

根据EJB JNDI Naming Reference , session bean 的 JNDI 查找名称具有以下语法:

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

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

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

为了从 WAR 中删除该版本,您只需在 WAR 的 POM 中执行以下操作:

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

关于您的 EAR,为了从中删除该版本,您可以将以下内容放入您的 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.xmlapplication.xml文件
  • 创建一个包含以下内容的ejb-jar.xml,并将其放置在 WAR 的 src/main/webapp/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>

    然后,在 EAR 的 src/main/resources/META-INF 文件夹下放置一个 application.xml 文件,其中包含以下内容:

    <?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 插件具有可以设置为属性 fileNameMapping 的选项 no-version,以便从工件中省略版本:

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

    <fileNameMapping>no-version</fileNameMapping>

    (...)

    </configuration>
    </plugin>

    关于jndi - 如何删除 JNDI 名称中的版本号、Jboss EAP 6、EJB 3.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36175778/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com