Mic*_* W. 16 maven-2 jndi glassfish java-ee java-ee-6
在EJB 3.1中,JNDI Lookup可以使用不同的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>
Run Code Online (Sandbox Code Playgroud)
在我的JavaEE 6项目中(使用Maven 2,Netbeans 6和Glassfish v3),应用程序名称为X-Snapshot.ear,EJB-Module为Y-Snapshot.jar.如何配置此maven项目以使用其他应用程序和模块名称?当这个名字改变时,我不想改变所有的JNDI Lookup!那么可以为JNDI LookUps配置应用程序和模块名称吗?
Pas*_*ent 17
Maven EAR插件允许自定义模块文件名,您可以使用设置最终名称或EAR project.build.finalName.
分别覆盖<application-name>和<module-name>中application.xml和ejb-jar.xml.在EJB 3.1中引用可移植全局JNDI名称:
除了上面的名称,如果EJB只公开一个客户端视图(即它只实现一个接口或没有接口视图),那么容器也被强制将bean映射到
Run Code Online (Sandbox Code Playgroud)java:global/[<application-name>]/<module-name>/<bean-name>哪里
<aplication-name>默认为.ear没有包扩展名的包名称(文件名).这可以被覆盖application.xml.此外,<application-name>仅当bean打包在.ear文件中时才适用 .<module-name>默认为捆绑名称(.war或.jar)没有捆绑扩展名.同样,这可以被覆盖ejb-jar.xml.<bean-name>默认为bean的非限定类名.然而,如果@Stateful还是@Stateless或@Singleton使用name属性,则该值规定有将用作bean的名称.
可以通过JNDI在运行时查找应用程序名称和模块名称:
@Resource(lookup = "java:app/AppName")
private String appName;
@Resource(lookup = "java:module/ModuleName")
private String moduleName;
Run Code Online (Sandbox Code Playgroud)
虽然您可以按照描述在应用程序部署描述符中配置application-name和module-name ,但仍可在部署时覆盖这些名称(根据Java EE规范,如下所示),因此最好不要硬编码应用程序代码中的这些值.
EE.8.5.2部署Java EE应用程序和EE.8.5.1部署独立的Java EE模块
部署工具必须确保应用程序名称在应用程序服务器实例中是唯一的.如果名称不唯一,则部署工具可以自动选择唯一名称或允许Deployer选择唯一名称
EE.8.1.1组件创建
当且仅当名称不唯一时(例如,因为在删除不同的文件扩展名后两个名称相同),部署工具可以为任何冲突模块选择新的唯一名称; 不得更改不冲突的模块名称.在这种情况下选择唯一名称的算法是产品特定的.