尽管存在其他一些标准(例如Web服务)可以让您松散耦合应用程序的组件,但是远程EJB仍然是完成此任务的理想方法,因为它们的简单性,标准化,许多IDE的良好开发支持以及良好的支持。他们提供的性能。
在此博客文章中,我们将概述领先的Java EE应用程序服务器之一Oracle WebLogic提供的机制,以支持对应用程序范围之外的EJB的引用。
Oracle WebLogic中的appededName
符合Java EE的应用服务器提供了其他不可移植的API,工具和机制,用于增强它们实现的标准Java EE功能。 我们在本系列的第一部分中提到的功能之一是mappingName @EJB元素。
尽管EJB 3.0规范对此元素一无所知(已被EJB 3.1规范引入的lookup元素所取代),但许多应用服务器供应商已经以其自己的名字建议的直观行为实现了它: 将EJB映射到全局JNDI名称 。
如果要为了简化而牺牲可移植性,那么许多应用程序服务器(例如Oracle WebLogic或GlassFish)将允许您使用mapedName元素(或其对应的部署描述符元素)的值定义bean的全局JNDI名称。甲骨文WebLogic将分配全局JNDI名称仅 远程业务接口。 这并不是真正的限制,因为始终可以使用本系列前面部分中描述的API来引用本地业务接口。
EJB远程业务接口的Oracle WebLogic命名约定
有了这样的机制,将引用链接到应用程序外部的Bean就很简单了。 实际上,JDeveloper的EJB向导将使用直观的命名方案为您提供默认的namedName,该命名方案类似于EJB 3.1规范引入的新的可移植全局JNDI名称,如以下屏幕快照所示:
JDeveloper建议的命名方案如下:
mappingName = [应用程序名称]-[模块名称]-[bean名称]
如果采用的话,这种命名方案提供了一种在整个应用程序中为每个bean分配唯一名称的简便方法。 我知道这样的名称有点尴尬,但由于不可移植,因此是一种与其他名称一样好的命名方案。
Oracle WebLogic中远程EJB接口的全局JNDI名称
在Oracle WebLogic Application Server中具有mapedName的EJB的远程业务接口的全局JNDI名称将是:
mappingName#[interface-FQN]
使用这种命名方案将使您可以构建松散耦合的Java EE应用程序,这些应用程序可以重用其他EJB。 如果要检查服务器JNDI树并检查已部署的EJB的实际名称,则可以使用WebLogic的JNDI树检查器,可以通过打开WebLogic控制台启动它,并导航到Environment / Servers / [your-server]页面,然后使用“ 查看JNDI树”链接。 在下面的屏幕快照中,您可以检查全局JNDI条目以获取定义如下的Bean:
package es.reacts;
import ...;
@Stateless(name = "EJBByMappedName", mappedName = "Application1-EjbTest0-EJBByMappedName")
@Remote
public class EJBByMappedNameBean implements RemoteByMappedName {
[...]
}
在屏幕截图中,您可以欣赏与e s.reacts.RemoteByMappedName业务界面相对应的条目。
定制EJB远程接口的JNDI名称
Oracle WebLogic为您提供了必要的工具,以定制和覆盖其针对EJB远程接口的默认命名约定。 要分配或覆盖EJB远程接口的全局JNDI名称,可以使用WebLogic特定的部署描述符。 例如,对于EJB模块,可以使用JDeveloper快速添加默认的weblogic-ejb-jar.xml,或者,如果使用其他IDE(例如NetBeans),则可以创建一个名为weblogic-ejb-jar的新XML文件。模块的META-INF目录中的.xml 。 空的weblogic-ejb-jar.xml文件如下所示(从Oracle WebLogic 10.3开始):
<?xml version = '1.0' encoding = 'UTF-8'?>
<weblogic-ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-ejb-jar http://www.bea.com/ns/weblogic/weblogic-ejb-jar/1.0/weblogic-ejb-jar.xsd"
xmlns="http://www.bea.com/ns/weblogic/weblogic-ejb-jar">
</weblogic-ejb-jar>
要为给定的EJB远程接口分配或覆盖全局JNDI名称,可以使用以下元素:
<?xml version = '1.0' encoding = 'UTF-8'?>
<weblogic-ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-ejb-jar http://www.bea.com/ns/weblogic/weblogic-ejb-jar/1.0/weblogic-ejb-jar.xsd"
xmlns="http://www.bea.com/ns/weblogic/weblogic-ejb-jar">
<weblogic-enterprise-bean>
<ejb-name>SessionTest0</ejb-name>
<stateless-session-descriptor>
<business-interface-jndi-name-map>
<business-remote>es.reacts.SessionTest0</business-remote>
<jndi-name>global-jndi-name</jndi-name>
</business-interface-jndi-name-map>
</stateless-session-descriptor>
</weblogic-enterprise-bean>
</weblogic-ejb-jar>
如果您使用的是JDeveloper,它为您提供了一个简单的GUI来编辑weblogic-ejb-jar.xml文件:
通过JDeveloper GUI,您可以轻松地自定义WebLogic部署描述符并配置WebLogic Application Server的其他不可移植功能,例如EJB集群。
将EJB引用链接到全局JNDI名称
在上一节中,我们概述了Oracle WebLogic Application Server提供的用于定制执行环境并为EJB的远程接口建立全局JNDI名称的工具。 以同样的方式,Oracle WebLogic为您提供了其他工具,以使用全局JNDI名称将EJB引用链接到特定的目标EJB。
在到目前为止的示例中,我们始终使用EJB 3.0规范提供的可移植机制将EJB引用链接到目标。 如果需要在应用程序范围之外为远程EJB建立目标,则可以使用充当EJB客户端的模块的特定于WebLogic的部署描述符。 对于到目前为止我们已经使用的Java EE模块,您可以使用JDeveloper添加特定于WebLogic的部署描述符,称为weblogic.xml。 如果您正在使用其他IDE,则此文件的框架如下(从Oracle WebLogic 10.3开始):
<?xml version = '1.0' encoding = 'UTF-8'?>
<weblogic-web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-web-app http://www.bea.com/ns/weblogic/weblogic-web-app/1.0/weblogic-web-app.xsd"
xmlns="http://www.bea.com/ns/weblogic/weblogic-web-app">
<ejb-reference-description>
<ejb-ref-name>ejb/myGlobalRef</ejb-ref-name>
<jndi-name>global-jndi-name</jndi-name>
</ejb-reference-description>
</weblogic-web-app>
该weblogic.xml部署描述符将EJB参考ejb / myGlobalRef与以全局JNDI名称global-jndi-name存储的对象相链接,该名称是我们在前面的weblogic-ejb-jar.xml文件中指定的名称。部分。 该引用将使用@EJB注释或在标准部署描述符(在本例中为web.xml文件)中像平常一样声明。
如果您使用的是JDeveloper,则GUI将帮助您构建特定于WebLogic的部署描述符。 GUI做得很好,还可以扫描您模块的EJB引用,并在自定义它们时从列表中进行选择。
参考: The Gray Blog上的JCG合作伙伴 Gray 引用了Oracle WebLogic在您的应用程序外的EJB 。
翻译自: https://www.javacodegeeks.com/2011/08/references-to-ejbs-outside-your.html