我如何配置 JNDI 查找的模块和应用程序名称

发布于 2024-09-13 07:24:38 字数 705 浏览 5 评论 0原文

在 EJB 3.1 中,可以使用不同的查找名称进行 JNDI 查找:

java:global[/<app-name>]/<module-name>/<bean-name>!<fully-qualifiedbean interface-name>           
java:global[/<app-name>]/<module-name>/<bean-name> 
java:app/<module-name>/<bean-name>!<fully-qualified-bean-interface-name> 
java:app/<module-name>/<bean-name> 
java:module/<bean-name>!<fully-qualified-bean-interface-name> 
java:module/<bean-name>

在我的 JavaEE 6 项目(使用 Maven 2、Netbeans 6 和 Glassfish v3)中,应用程序名称是 X-Snapshot.ear,EJB 模块是 Y-Snapshot.jar 。我如何配置这个 Maven 项目以使用另一个应用程序和模块名称?当此名称更改时,我不想更改所有 JNDI 查找!那么是否可以为 JNDI LookUps 配置应用程序和模块名称?

In EJB 3.1 JNDI Lookups can be made with different Lookup-Names:

java:global[/<app-name>]/<module-name>/<bean-name>!<fully-qualifiedbean interface-name>           
java:global[/<app-name>]/<module-name>/<bean-name> 
java:app/<module-name>/<bean-name>!<fully-qualified-bean-interface-name> 
java:app/<module-name>/<bean-name> 
java:module/<bean-name>!<fully-qualified-bean-interface-name> 
java:module/<bean-name>

In my JavaEE 6 Project (with Maven 2, Netbeans 6 and Glassfish v3) the Application name is X-Snapshot.ear and the EJB-Module is Y-Snapshot.jar. How can i config this maven project to use another application and module name? I don't wnat to change all JNDI Lookups when this names change!! So is it possible to config application and module names for JNDI LookUps?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

走过海棠暮 2024-09-20 07:24:38

简单的方法

Maven EAR 插件允许 自定义模块文件名,您可以使用project.build.finalName 设置最终名称或 EAR。

更好的方法

覆盖 application.xml中的 分别是 ejb-jar.xml。引用 EJB 3.1 中的可移植全局 JNDI 名称

除上述名称外,如果
EJB 仅公开一个客户端视图
(也就是说它只实现了一个
有接口或无接口视图),
容器还被要求映射
豆子到

java:global/[<应用程序名称>]/<模块名称>/

哪里

  1. 默认为包名称(.ear 文件名),不带
    捆绑扩展。这可以是
    application.xml 中被覆盖。还,
    适用
    仅当 Bean 封装在
    .ear 文件。
  2. 默认为包名称(.war.jar),不带
    捆绑扩展。再说一次,这可以是
    ejb-jar.xml 中被覆盖。
  3. 默认为 bean 的非限定类名。
    但是,如果 @Stateful
    @Stateless@Singleton 使用
    名称属性,然后是值
    指定那里将被用作
    豆名称。

Naive approach

The Maven EAR Plugin allows to Customize A Module Filename and you can set the final name or the EAR using project.build.finalName.

Much better approach

Override the <application-name> and the <module-name> in the application.xml and the ejb-jar.xml respectively. Quoting Portable Global JNDI name in EJB 3.1:

In addition to the above name, if the
EJB exposes just a single client view
(that is it implements just one
interface or the no interface view),
the container is also mandated to map
the bean to

java:global/[<application-name>]/<module-name>/<bean-name>

Where

  1. <aplication-name> defaults to the bundle name (.ear file name) without
    the bundle extension. This can be
    overridden in application.xml. Also,
    <application-name> is applicable
    only if the bean is packaged inside a
    .ear file.
  2. <module-name> defaults to bundle name (.war or .jar) without the
    bundle extension. Again, this can be
    overridden in ejb-jar.xml.
  3. <bean-name> defaults to the unqualified class name of the bean.
    However, if @Stateful or
    @Stateless or @Singleton uses the
    name attribute, then the value
    specified there will be used as the
    bean name.
高跟鞋的旋律 2024-09-20 07:24:38

可以在运行时通过 JNDI 查找应用程序名称和模块名称:

@Resource(lookup = "java:app/AppName")
private String appName;

@Resource(lookup = "java:module/ModuleName")
private String moduleName;

尽管您可以在应用程序部署描述符中配置应用程序名称和模块名称 如上所述,这些名称仍然可以在部署时被覆盖(根据 Java EE 规范,如下所示),因此最好不要在您的应用程序中硬编码这些值应用程序代码。

EE.8.5.2 部署 Java EE 应用程序EE.8.5.1 部署独立 Java EE 模块

部署工具必须确保应用程序名称在应用程序服务器实例中是唯一的。如果名称不唯一,部署工具可能会自动选择一个唯一的名称或允许部署者选择一个唯一的名称

EE.8.1.1 组件创建

当且仅当名称不唯一时(例如,因为删除不同的文件扩展名后两个名称相同),部署工具可以为任何冲突的模块选择新的唯一名称;不冲突的模块名称不得更改。在这种情况下选择唯一名称的算法是特定于产品的。

The application name and module names can be looked up at runtime via JNDI:

@Resource(lookup = "java:app/AppName")
private String appName;

@Resource(lookup = "java:module/ModuleName")
private String moduleName;

Although you can configure the application-name and module-name in your application deployment descriptor as described, these names can still be overridden at deployment-time (per the Java EE specification, as indicated below), so it's best not to hard-code these values in your application code.

EE.8.5.2 Deploying a Java EE Application and EE.8.5.1 Deploying a Stand-Alone Java EE Module

The deployment tool must ensure that the application name is unique in the application server instance. If the name is not unique, the deployment tool may automatically choose a unique name or allow the Deployer to choose a unique name

EE.8.1.1 Component Creation

If and only if the name is not unique (e.g., because two names are identical after removing different filename extensions) the deployment tool may choose new unique names for any of the conflicting modules; module names that do not conflict must not be changed. The algorithm for choosing unique names in such a case is product specific.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文