【EJB】Developing EJB Applications -- Chapter 9(参考文章)
2017-05-07 10:33
330 查看
参考文章
A.1。 EJB JNDI命名参考
会话bean的JNDI查找名称使用以下语法:ejb:<appName>/<moduleName>/<distinctName>/<beanName>!<viewClassName>?stateful
*<appName>:如果会话bean的JAR文件已部署在企业归档(EAR)中,则appName是相应EAR的名称。默认情况下,EAR的名称是没有.ear后缀的文件名。应用程序名称可以在其application.xml文件中被覆盖。如果会话bean未部署在EAR中,则将appName留空。
*<moduleName>:moduleName是部署会话bean的JAR文件的名称。 JAR文件的默认名称是其没有.jar后缀的文件名。可以在JAR的ejb-jar.xml文件中覆盖模块名称。
*<distinctName>:JBoss EAP允许每个部署指定一个可选的不同名称。如果部署没有不同的名称,那么将distinctName留空。
*<beanName>:beanName是要调用的会话bean的简单类名。
*<viewClassName>:viewClassName是远程接口的完全限定类名。这包括接口的包名称。
*?stateful:当JNDI名称引用有状态会话bean时,需要使用?stateful后缀。它不包括在其他bean类型中。
例如,如果我们部署了一个有状态beanorg.jboss.example.HelloBean的hello.jar,它暴露了远程接口org.jboss.example.Hello,则JNDI查找名称将是:
ejb:/hello/HelloBean!org.jboss.example.Hello?stateful"
A2 EJB参考解决方案
本节将介绍JBoss如何实现@EJB和@Resource。请注意,XML始终覆盖注释,但适用相同的规则。@EJB注释规
*@EJB注释也有一个mappedName()属性。该规范将此作为供应商特定的元数据,但JBoss将mappedName()识别为正在引用的EJB的全局JNDI名称。如果指定了mappedName(),则所有其他属性都将被忽略,并且此全局JNDI名称用于绑定。
*如果指定@EJB,不定义属性:
@EJB
ProcessPayment myEjbref;
那么以下规则适用:
*引用bean的EJB jar使用@EJB注入中使用的接口来搜索EJB。如果有多个EJB发布相同的业务接口,则抛出异常。如果该接口只有一个bean,那么使用该bean。
*搜索发布该界面的EJB的EAR。如果有重复,则抛出异常。否则返回匹配的bean。
在JBoss运行时全局搜索该接口的EJB。再次,如果发现重复,则抛出异常。
@ EJB.beanName()对应于<ejb-link>。如果beanName()被定义,则使用与@EJB相同的算法,除了使用beanName()作为搜索中的关键字之外,没有定义属性。此规则的一个例外是如果您使用ejb-link#语法:它允许您在引用的EJB所在的EAR中放置一个相对路径。有关更多详细信息,请参阅EJB 3.2规范。
A.3 远程EJB客户的项目依赖
包括从远程客户端调用会话bean的Maven项目需要JBoss EAP Maven存储库中的以下依赖关系。注意
artifactId版本可能会更改。有关最新版本,请参阅JBoss EAP Maven存储库。
表A.1 远程EJB客户端的Maven依赖关系
GroupID | ArtifactID |
org.jboss.bom | jboss-eap-javaee7 |
org.jboss.spec.javax.transaction | jboss-transaction-api_1.2_spec |
org.jboss.spec.javax.ejb | jboss-ejb-api_3.2_spec |
org.jboss.eap | wildfly-ejb-client-bom |
示例POM文件<dependencyManagement>部分
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.jboss.bom</groupId>
<artifactId>jboss-eap-javaee7</artifactId>
<version>${version.jboss.bom.eap}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
其余依赖项在具有运行时间的pom.xml文件的<dependencies>部分中指定。
示例POM文件<依赖关系>部分
<dependencies>
<!-- Include the EJB client JARs -->
<dependency>
<groupId>org.jboss.eap</groupId>
<artifactId>wildfly-ejb-client-bom</artifactId>
<type>pom</type>
<scope>compile</scope>
</dependency>
<!-- Include any additional dependencies required by the application
...
-->
</dependencies>
JBoss EAP附带的ejb远程快速启动提供了远程EJB客户端应用程序的完整工作示例。有关远程会话bean调用的依赖关系配置的完整示例,请参阅位于该快速启动的根目录中的client /pom.xml文件。
A.4 JBOSS-EJB3.XML部署描述符参考
jboss-ejb3.xml是可以在EJB JAR或WAR归档中使用的自定义部署描述符。在EJB JAR存档中,它必须位于META-INF /目录中。在WAR档案中,它必须位于WEB-INF /目录中。该格式与ejb-jar.xml类似,使用一些相同的命名空间并提供一些其他命名空间。 jboss-ejb3.xml的内容与ejb-jar.xml的内容合并,jboss-ejb3.xml项目优先。
本文档仅涵盖了jboss-ejb3.xml使用的其他非标准命名空间。有关标准命名空间的文档,请参阅http://java.sun.com/xml/ns/javaee/。
根命名空间是http://www.jboss.com/xml/ns/javaee。
装配描述符命名空间
以下命名空间都可以在<assembly-descriptor>元素中使用。它们可以用于将其配置应用于单个bean,或者通过使用*作为ejb名称将其部署到部署中的所有bean。
聚类命名空间:urn:clustering:1.0
xmlns:c="urn:clustering:1.0"
这允许您将EJB标记为聚簇。它是相当于@ org.jboss.ejb3.annotation.Clustered的部署描述符。
<c:clustering>
<ejb-name>DDBasedClusteredSFSB</ejb-name>
<c:clustered>true</c:clustered>
</c:clustering>
安全命名空间(urn:security)
xmlns:s="urn:security"
这允许您为EJB设置安全域和运行为主体。
<s:security>
<ejb-name>*</ejb-name>
<s:security-domain>myDomain</s:security-domain>
<s:run-as-principal>myPrincipal</s:run-as-principal>
</s:security>
资源适配器命名空间:urn:resource-adapter-binding
xmlns:r="urn:resource-adapter-binding"
这允许您设置消息驱动Bean的资源适配器。
<r:resource-adapter-binding>
<ejb-name>*</ejb-name>
<r:resource-adapter-name>myResourceAdapter</r:resource-adapter-name>
</r:resource-adapter-binding>
IIOP命名空间:urn:iiop
xmlns:u="urn:iiop"
IIOP命名空间是配置IIOP设置的地方。
池命名空间:urn:ejb-pool:1.0
xmlns:p="urn:ejb-pool:1.0"
这允许您选择包含的无状态会话bean或消息驱动Bean使用的池。池在服务器配置中定义。
<p:pool>
<ejb-name>*</ejb-name>
<p:bean-instance-pool-ref>my-pool</p:bean-instance-pool-ref>
</p:pool>
缓存命名空间:urn:ejb-cache:1.0
xmlns:c="urn:ejb-cache:1.0"
这允许您选择包含的有状态会话bean使用的缓存。缓存在服务器配置中定义。
<c:cache>
<ejb-name>*</ejb-name>
<c:cache-ref>my-cache</c:cache-ref>
</c:cache>
<?xml version="1.1" encoding="UTF-8"?>
<jboss:ejb-jar xmlns:jboss="http://www.jboss.com/xml/ns/javaee"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:c="urn:clustering:1.0"
xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd" version="3.1"
impl-version="2.0">
<enterprise-beans>
<message-driven>
<ejb-name>ReplyingMDB</ejb-name>
<ejb-class>org.jboss.as.test.integration.ejb.mdb.messagedestination.ReplyingMDB</ejb-class>
<activation-config>
<activation-config-property>
<activation-config-property-name>destination</activation-config-property-name>
<activation-config-property-value>java:jboss/mdbtest/messageDestinationQueue
</activation-config-property-value>
</activation-config-property>
</activation-config>
</message-driven>
</enterprise-beans>
<assembly-descriptor>
<c:clustering>
<ejb-name>DDBasedClusteredSFSB</ejb-name>
<c:clustered>true</c:clustered>
</c:clustering>
</assembly-descriptor>
</jboss:ejb-jar>
A.5配置EJB线程池
您可以使用管理控制台或管理CLI创建EJB线程池。使用管理控制台配置EJB线程池
1.登录到管理控制台。
2.单击配置选项卡。展开Subsystems菜单。
3.选择EJB 3,然后单击查看。
4.选择容器选项卡,然后单击线程池。
5.单击添加。出现创建THREAD-POOL对话框。
6.指定所需的详细信息,名称和最大线程值。
7.单击保存。
使用管理CLI配置EJB线程池
使用以下语法的add操作:
/subsystem=ejb3/thread-pool=THREADPOOLNAME:add(max-threads=MAXSIZE)
*将THREADPOOLNAME替换为线程池所需的名称。
*以最大大小的线程池替换MAXSIZE。
使用read-resource操作来确认bean池的创建:
/subsystem=ejb3/thread-pool=THREADPOOLNAME:read-resource
要重新配置ejb3子系统中的所有服务以使用新的线程池,请使用以下命令:
/subsystem=ejb3/thread-pool=bigger:add(max-threads=100)
/subsystem=ejb3/service=async:write-attribute(name=thread-pool-name, value="bigger")
/subsystem=ejb3/service=remote:write-attribute(name=thread-pool-name, value="bigger")
/subsystem=ejb3/service=timer-service:write-attribute(name=thread-pool-name, value="bigger")
reload
XML配置示例:
<subsystem xmlns="urn:jboss:domain:ejb3:4.0">
...
<async thread-pool-name="bigger"/>
...
<timer-service thread-pool-name="bigger" default-data-store="default-file-store">
...
<remote connector-ref="http-remoting-connector" thread-pool-name="bigger"/>
...
<thread-pools>
<thread-pool name="default">
<max-threads count="10"/>
<keepalive-time time="100" unit="milliseconds"/>
</thread-pool>
<thread-pool name="bigger">
<max-threads count="100"/>
</thread-pool>
</thread-pools>
...
注意
不应该使用keepalive时间,因为它没有效果。
原文地址:
https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.0/html/developing_ejb_applications/reference_material
相关文章推荐
- 【EJB】Developing EJB Applications -- Chapter 4(消息驱动Bean)
- 【EJB】Developing EJB Applications -- Chapter 8(EJB集群)
- 【EJB】Developing EJB Applications -- Chapter 1(简介)
- 【EJB】Developing EJB Applications -- Chapter 2(创建企业级Bean项目)
- 【EJB】Developing EJB Applications -- Chapter 3(会话Bean)
- 【EJB】Developing EJB Applications -- Chapter5(调用会话Bean)
- 【EJB】Developing EJB Applications -- Chapter6(EJB应用安全)
- 【EJB】Developing EJB Applications -- Chapter7(容器和客户端拦截器)
- go参考文章
- IntelliJ IDEA 15 创建maven项目 说明 创建Maven项目的方式:手工创建 好处:参考IntelliJ IDEA 14 创建maven项目二(此文章描述了用此方式创建Maven项目
- 【翻】【官方文章】完整的Flash Object参考
- 存储性能瓶颈的背后,这篇文章带来的参考价值
- 新浪微博页面源代码分析---参考文章
- FireFox、Chrome油猴脚本:查杀浮动广告。可参考置顶文章!
- Android UI设计参考文章
- 条件变量的文章(供自己参考)
- 杭电oj1108 最小公倍数 参考之前的文章1019
- metro app get json data 文章参考
- Developing Practical Wireless Applications
- VS2008如何连接TFS2010-参考文章