`
yangzb
  • 浏览: 3517557 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

weblogic-ejb-jar.xml的元素解析

阅读更多

        做EJB开发,那是几年前的事儿了。虽然EJB2.0一直为开发者所诟病,但它毕竟还是有其自身的优势,比如事务、安全管理,实例生命周期管理等,当然核心还是其提供的分布计算。在EJB规范之外,作为Application Server Vendor,BEA还在规范基础上提供了不少扩展属性,这些属性不是规范要求的,但它提供了额外的功能,对于开发者而言,还是大有用处的。 这些元素可以在weblogic-ejb-jar.xml中配置,下面我们就逐个看看这些元素的含义、作用, 参考文档位于: http://e-docs.bea.com/wls/docs81/ejb/DDreference-ejb-jar.html#1107234

allows-concurrent-calls :只能用于stateful session bean,表明业务方法是否支持并发访问。规范中要求ejb container,如果出现对stateful session bean并发访问,则抛出remote exception。weblogic对其作了增强,allows-concurrent-calls设为true的时候,并发访问进入时, ejb container可以block该请求,直到前面的方法调用结束。默认为false。

allow-remove-during-transaction:只能能用于stateful session bean,表明在一个事务环境中,stateful session bean的remove()是否可以被调用。allow-remove-during-transaction为false的话,如果在一个事务环境中调用remove(), 那么ejb container会抛出RemoveException。对于那些实现Synchronization接口的session bean,不能使用该元素。refer to StatefulEJBObject.java(L83)。

cache-between-transactions:用于entity bean,表明事务之间entiy bean的数据cache模式,为false的话,则entiy bean的数据需要load, 否则使用cache中的数据。refer to DBManager.loadBean()。

cache-type:用于entity bean,表明在cache溢满的情况下,cache中的数据移除顺序,可选项为:LRU(Least recently used ), NRU(Not recently used)。NRU的cache最小值为8,当max-beans-in-cache 小于3的时候,weblogic会将它调整成8。

client-authentication:用于表明EJB是否支持或许要客户端验证。

client-cert-authentication:用于表明EJB是否支持或许要客户端授权。

clients-on-same-server:适用于enterprise bean,表明该ejb的潜在客户端是否位于ejb所部署的同一台managed server上,默认为false。当ejb被部署到cluster上的时候,所以managed server都会通知其他managed server做jndi tree更新,以便让其他server了解该ejb的位置情况。即home的stub中会纪录所有部署该ejb的managed server。如果ejb和其客户端确定位于同一ear中,则可以将其设为true,这样可以降低很多mutli cast开销(weblogic cluster通过multicast实现heartbeat,以保持server状态、jndi tree的更新)。

concurrency-strategy:用于指定cached entity bean的并发访问策略,可选项包括:
Exclusive:当执行事务方法调用的时候,weblogic将会lock cache中的bean instance,直到tx结束,其他请求才能使用该instance。
Database:weblogic将并发访问控制委托给database,根据database的并发控制策略来决定bean instance的并发访问。
ReadOnly:对于read only,这样的bean不涉及数据修改,每个tx对应一个bean instance,可以并行访问。
Optimistic:该策略不会lock任何对象,有weblogic去检查事务期间数据对象是否发生过变化,没有的话,提交事务,否则会滚事务。


confidentiality:用于表明是否支持或需要加密ejb client&server端的数据传递。

connection-factory-jndi-name & destination-jndi-name:用于MDB,表明MDB在创建jms connection时需要使用的jms connection facory,及连接的destination。

create-as-principal-name:用于表明在ejbCreate()方法中连接其他资源的身份。决定ejbCreate中调用身份有三种:create-as-principal-name,ejb-jar.xml中的run-as 指定的角色,匿名,他们按先后顺序选择,如果前面没有配置的话,则使用后面的身份。这个元素仅在ejbCreate方法中的工作不能通过匿名身份完成的时候需要。注意:这个元素只影响stateless和MDB的ejbCreate,为什么没有stateful?  类似元素:remove-as-principal-name , passivate-as-principal-name , and principal-name .

delay-updates-until-end-of-tx:用于entity bean,表明是否延迟update事务中的entity数据直到事务结束。默认为true,这样可以一定程度上因为避免不必要得update而提高性能,但它无法保证事务中update数据的顺序。如果datasource的事务隔离级别为TransactionReadCommittedUncommitted ,即允许未提交的数据被其他客户端读取,那么可以将delay-updates-until-end-of-tx设为false,此时调用的方法需要更新数据的时候,数据会被发送给database,如ejbStore(). 注意:delay-updates-until-end-of-tx为false的时候,事务期间update到db的数据都是uncommitted的,commit/rollback由事务决定。

dispatch-policy:用于指定EJB在哪个线程池上运行,默认线程池为:weblogic.queue.default。对于MDB,使用其他JMS Provider的destination驱动的时候,weblogic可能会忽略diapatch-policy,因为MDB可能会跑在provider的线程上。比如IBM MQSeries的non-tx-queue。对于MQ的tx-queue, nontx-topic & tx-topic,dispatch-policy都是起作用的。对于MDB部署期间,容器负责创建的实例数按照如下算法计算:
default thread pool: maxConcurrentMDBs = Min(max-beans-free-pool, default-thread-pool-size/2+1) .如果使用默认thread pool,创建的实例数为max-beans-free-pool和default-thread-pool-size/2+1之间的小者。
customer thread pool: maxConcurrentMDBs = Min(max-beans-free-pool, thread-pool-size).使用定制thread pool的时候,创建的实例数为max-beans-free-pool和thread-pool-size之间的小者。

ejb-local-reference-description & ejb-reference-description:用于指定该bean引用的local/remote ejb的信息,包括ejb-ref-name及jndi-name。name需要和ejb-ref-name or ejb-local-ref中的匹配。

enable-bean-class-redeploy:默认情况下,ejb的实现类和ejb module中的其他类被同一个class loader加载,他们之间是相互可见的。当enable-bean-class-redeploy 为true的时候,ejb实现类及其父类被ejb module的子类所加载,即ejb实现类和ejb module中的其他类位于不同的class loader中,这样可以使ejb实现类单独redeploy,而无需redeploy module中的其他类。这样用会有个潜在问题,因为ejb实现类和其他类位于不同的class loader中,实现类对于其他类不再可见,其他类不能再引用该实现类。对于该实现类,如果要使用其他类的package protected方法的话,也是不可的,比如EJBHelper,必须将那些方法申明为public。否则会出现IllegalAccessErrors 。注意:enable这个属性,必须使用two-phase-deploy,关于two-phase-deploy,请参考:http://e-docs.bea.com/wls/docs81/deployment/concepts.html#TwoPhaseDeployment

enable-call-by-reference:用于决定处理ejb方法参数的时候,是传值,还是传引用,而不关心客户端是local or remote。注意:即使enable-call-by-reference为false,下面的情况下还是pass by reference的,
1:local interface的参数传递
2:非序列化的参数
3:When all the business methods in the Remote interface are detected and the Home interface has parameters whose types are immutable.
当enable-call-by-reference为true的时候,因为不需要做参数拷贝,这样可以提高方法性能。

enable-dynamic-queries:该值为true的时候,说明CMP是动态查询的。

entity-cache:用于指定entity bean的cache情况,包括如下子元素:max-beans-in-cacheidle-timeout-secondsread-timeout-secondsconcurrency-strategy。

entity-cache-ref:用于定义引用weblogic-application.xml 中定义的entity cache信息。

entity-cache-name:为该ejb指定一个app level的cache,app level的cache是为同一app中entity的共享的。这个cache name必须和weblogic-application.xml 定义的name匹配。关于app level entity cache,请参考:http://e-docs.bea.com/wls/docs81/programming/app_xml.html

entity-clustering:指定entity bean在cluster中的复制信息,包括:home-is-clusterable, home-load-algorithm, home call-router-class-name, use-serverside-stubs。

estimated-bean-size:

finders-load-bean:

global-role:


home-is-clusterable:默认为true。如果设定为false,通过initial context lookup到的home stub中只有local server的信息,而不包含cluster中其他server的信息。如果拿到的stub中对应的server为A,如果调用home.create()时,serverA已经crash,那么调用无法被failover到cluster中的其他server,客户端看到的ConnectionException。

home-load-algorithm:指定home的负载算法,默认为weblogic.cluster.defaultLoadAlgorithm对应的算法,如果没有defaultLoadAlgorithm的话,则为round-robin。可选项包括:
round-robin:说明initial context在lookup home对象的时候,使round-robin的,如果后台有3个server,3个客户端执行lookup,那么返回的home对象分别连接到后端的3个server上。而且home对象上执行的业务方法也是round-robin的,比如serverA上的home在客户端被执行了3次business method,那么这3次business method也是round-robin的,即后端3个server上分别执行了一次。
RoundRobinAffinity:和round-robin基本一样,区别是home business method不是load banlance,而是affinity的,上面例子的结果是:3次business methods都会在serverA上执行。
random | weight-based | RandomAffinity | WeightBasedAffinity


home call-router-class-name :用于指定客户定制的bean method router class名,这个类要求实现weblogic.rmi.cluster.CallRouter,如果指定了这个元素,那么每次方法调用前都会调用该类的一个实例,以根据方法参数决定方法将被route到哪个server上去执行。

idempotent-methods:

identity-assertion:

idle-timeout-seconds:指定stateful session bean在cache中的驻留时间,如果idle-timeout-seconds已过,同时cache中的实例数也达到max-beans-in-cache,该bean将会从cache中remove,被remove的bean,容器会调用ejbPassivate(),并将从memory中移出。默认为600,最小值为1。

initial-beans-in-free-pool:用于指定deploy的时weblogic在实例池中创建的实例数,默认为0。指定一个具体数值的话,有利于提高首次调用速度(调用时无需再去创建实例),用于stateless session bean, message driven bean, entity bean。

initial-context-factory:用于指定MDB在创建jms connection时使用的jms connection factory的jndi name。

invalidation-target:

is-modified-method-name:

isolation-level:指定ejb的事务隔离级别,可选项为:
TransactionSerializable:
TransactionReadCommitted:只读取其他tx已提交的数据
TransactionReadUncommitted :允许读取其他tx未提交的数据
TransactionRepeatableRead:如果某数据子集已经被该tx读取过,重复读取相同数据时,将返回同样的结果,尽管期间其他tx可能对该数据作过更新。
下面两个只适用于oracle,同时必须是cmp:
TransactionReadCommittedForUpdate:该值会将isolation-level设为TransactionReadCommitted,同时会在select语句后面加上for update,这将导致select对应的rows被db lock,等待update,然后将其他tx提交后的数据交给该tx。如果在for update的时候,db无法获取到rows的lock,那么select会阻塞,直到获取lock,并得到数据。它可以避免TRANSACTION_SERIALIZABLE 中可能出现的ORA-08177。
TransactionReadCommittedForUpdateNoWait:同上,区别是select后面加上的是for update no wait,如果db无法获取rows的lock,那么select立即返回,同是ejb container会抛出异常。个人理解: for update是锁定对象,不让其他请求进入,否则lock可能被其他对象拿走。

jms-client-id:指定MDB连接到destination时所使用的client id。如果connection-factory-jndi-name 配置了connection factory,而且config.xml中配置了client id,可以使用该id。如果config.xml中没有定义client id,或者没有配置connection-factory-jndi-name (此时使用默认的connection factory),那么jms-client-id开始起作用。

jms-polling-interval-seconds:指定在jms server出现故障的时候,MDB重新连接jms server的间隔。MDB为对应destination的consumer,如果destination驻留于其他server或foreign jms provider上,可能因为种种原因,导致remote jms server unreachable,这时MDB就需要主动重现连接。

max-beans-in-free-pool:用于指定实例池中最多能保留实例的个数。pool中实例数大于该值时,ejb container会主动shrink该pool,以减小不必要的内存开销。比如:最大实例数为20,某一时刻并发客户端为50,当这些请求都处理完成时,实例全部还池,那么池中的实例数不做shrink的话,将保持为50,甚至更多。这个最大实例数,需要根据实际应用客户量的情况来做决定。多了浪费内存,少了又影响性能,所以根据实际情况去做权衡。

method-intf:指定哪些接口需要设定isolation level。

max-beans-in-cache:表示cache中的最大实例数,这个数跟entity bean的concurrency-strategy 有关,对于exclusive和readonly,max-beans-in-cache =active beans(ready bean enlisted in a transaction) + ready beans(bean has an identity—an associated primary key, but has not been enlisted in transaction
),对于concurrency-strategy为 Database的,cache中可以包含max-beans-in-cache个ready和activate bean实例。

passivate-as-principal-name:类似于create-as-principal name。

persistence-use:用于指定CMP存储相关的信息。

persistent-store-dir:指定stateful sesion bean在做passivate\activate时,session信息的存取目录。

principal-name:在配置role时所指定的真实身份名称,定义security-role-assignment 的时候,至少需要一个principal name。

provider-url:指定MDB在new initial context(调用者实际是ejb container)时所用的provider url,MDB在创建consumer的时候,需要知道从哪个jndi tree上去找connection factory, 去找destination。

read-timeout-seconds :ejb container调用ejbLoad()更新readonly bean数据的时间间隔,默认为600,设为0,表示readonly bean只有被载入cache的时候才会调用ejbLoad()。如果运行期间,bean一直没有从cache中被remove,则该bean不做任何更新。

remote-client-timeout:指定rmi客户端在等待请求返回的timeout时间,即如果指定时间内,ejb没有执行完成,客户端将不再继续等待。使用这个参数需要很小心,当客户端线程不再等待的时候,server的请求并没有随之取消,它将会继续执行下去,直到完成或失败。但对于客户端而言,他并不知道后台的结果。事务一致性无法保证,需要客户端自己在使用该参数时处理事务一致性的问题。

remove-as-principal-name:类似于create-as-principal name。

replication-type:InMomory | None,指定stateful session bean的session是否要在cluster范围内复制,以提供fail over。

res-env-ref-name & res-env-ref-name:指定该ejb对其他resource的引用信息,这些resource需要在ejb-jar.xml中已经定义。

role-name:

run-as-principal-name:

run-as-role-assignment:

security-permission:

security-permission-spec:

security-role-assignment:

session-timeout-seconds:指定ejb container何时会将passivated的数据从disk上删除。比如session-timeout-seconds为600,那么在该session bean passivated到disk后,600秒内没有被activate,它将被ejb container从disk上删除。如果session-timeout-seconds没有指定,那么ejb container会依据idle-timeout-seconds执行删除工作。

stateless-bean-is-clusterable:这个和home-is-clusterable类似,说明bean object的方法调用是否能在server出现故障的时候fail over。

stateless-bean-load-algorithm:这个和home-load-algorithm类似。以round-robin-affinity为例,home在创建bean object的时候,bean object是round-robin在不同server上的,而某个特定bean上的business object invocation是affinity在对应server上的。

stateless-bean-methods-are-idempotent:

trans-timeout-seconds:

transport-requirements:

use-serverside-stubs

太晚了,有几个没有完成的,周一补上。不过常用的除了trans-timeout-seconds应该全了。呼呼去喽!

分享到:
评论
1 楼 wanglf1207 2017-09-03  
EJB的确是个不错的产品,只是因为用起来有点门槛,招来太多人吐槽,EJB很多思想还是很不错的。

相关推荐

    agent-ejb-2.1.6.jar.zip

    《深入解析"agent-ejb-2.1.6.jar.zip"——Java企业级应用的关键组件》 在Java世界中,EJB(Enterprise JavaBeans)是用于构建可复用的、安全的、分布式的服务器端应用程序的重要组件。"agent-ejb-2.1.6.jar.zip"是...

    activemq-ra-3.1-M3.jar.zip

    2. **配置**:在应用服务器的资源适配器配置文件(如WebLogic的`weblogic-ejb-jar.xml`或JBoss的`jboss-service.xml`)中,添加ActiveMQ RA的配置,包括连接工厂、目的地等。 3. **编程接口**:通过JCA,Java EE...

    基于Java的实例源码-EJB编程实例代码.zip

    - **部署描述符(.xml)**:如`ejb-jar.xml`或`META-INF/ejb-jar.xml`,定义了EJB组件的元数据,包括Bean的类型、接口、生命周期方法等。 - **服务器配置文件**:可能包含特定应用服务器(如WebLogic、GlassFish或...

    WebLogic11g-EJB部署

    2. `APP-INF`目录:这个目录在WebLogic中通常用于放置自定义的配置文件或库,例如WebLogic特定的部署配置文件weblogic-ejb-jar.xml或weblogic-application.xml。这些文件可以覆盖ejb-jar.xml中的一些配置,或者添加...

    ejb数据源配置文件

    开发者需要在容器的配置文件(如`weblogic-ejb-jar.xml`或`glassfish-resources.xml`)中声明数据源,并设置其属性。 7. **JNDI名称**:数据源通常会注册到Java Naming and Directory Interface (JNDI) 名称空间中...

    activemq-ra-5.4.2.jar.zip

    《ActiveMQ RA 5.4.2:连接企业级消息传递与JAR包解析》 在IT领域,尤其是在Java应用程序的开发中,ActiveMQ扮演着重要的角色。它是一款开源的消息代理,遵循Apache软件基金会的许可证,是Apache ActiveMQ项目的一...

    activemq-ra-3.2.1.jar.zip

    在实际使用中,ActiveMQ RA 3.2.1.jar的集成过程可能涉及配置应用服务器的资源适配器部分,比如在web.xml或ejb-jar.xml中添加适配器的配置信息。此外,开发者还需要理解JMS(Java Message Service)的概念,以正确地...

    java面试知识点总结--EJB.pdf

    - `weblogic-ejb-jar.xml`:指定EJB的JNDI名称。 - `weblogic-rdbms-ejb.xml`:定义O/R映射规则。 #### 六、EJB开发工具 1. **JBuider**:提供集成开发环境。 2. **Eclipse**:支持源代码注释驱动的开发方式。 3....

    JMS MDB 与 XA 事务-002

    在ejb-jar.xml和weblogic-ejb-jar.xml这两个配置文件中,我们可以找到与MDB和XA事务相关的设置。ejb-jar.xml是标准的EJB配置文件,用于定义EJB组件的元数据,包括MDB的配置。例如,可以在这里声明MDB的接口、实现类...

    Weblogic下ejb配置

    同时,也要在weblogic-ejb-jar.xml中进行WebLogic特定的配置,如资源引用、持久化配置等。 5. 打包EJB:将EJB项目打包成一个ejb-jar文件,通常放在一个EAR(Enterprise Archive)文件中,以便于部署到WebLogic ...

    基于Java的Message-Driven Bean EJB实例源代码.zip

    - 部署描述符(ejb-jar.xml或META-INF/ejb-jar.xml)中定义了MDB的相关配置,包括JMS目的地、资源适配器等。 4. **源代码结构**: - `codefans.net`可能是指包含源代码的目录或网站。在这个压缩包中,可能包含...

    WebLogic6.0中Ejb的使用-j2ee

    jar cvf myString.jar myStri*.* -C META-INF weblogic-ejb-jar.xml ejb-jar.xml ``` 这里需要注意的是命令前后的空格和命令的顺序。 #### 四、生成代理类 使用WebLogic提供的`ejbc`工具生成EJB的代理类。在...

    Weblogic Ejb 学习笔记

    - EJB部署涉及编写EJB类、接口、部署描述符(ejb-jar.xml和weblogic-ejb-jar.xml),并将它们打包成ejb-jar文件。 - 使用WebLogic的WLST(WebLogic Scripting Tool)或Admin Console进行部署,配置服务器、集群、...

    Weblogic11g+EJB3的小例子

    - `ejb-jar.xml` 和 `weblogic-ejb-jar.xml` 文件定义Bean的元数据,包括安全、事务和部署信息。 5. **EJBDemo.jar 和 EJBDemoClient**: - `EJBDemo.jar` 可能包含了EJB3的实现,包括Bean类和接口,以及必要的...

    day2013-0110-webLogic配置和集群(赵强).zip

    WebLogic Server是Oracle公司的一款企业级Java应用服务器,它提供了全面的Java EE(Enterprise Edition)支持,包括Servlet、JSP、EJB等,以及对Web服务的支持。本资料包“day2013-0110-webLogic配置和集群(赵强)....

    Mastering EJB 2.0

    7. ** ejb-jar.xml 和 weblogic-ejb-jar.xml** - `ejb-jar.xml`是EJB的标准部署描述符,定义了Bean的配置信息。 - `weblogic-ejb-jar.xml`是WebLogic Server特定的扩展,用于配置特定服务器的特性。 8. **持久性*...

    apache-tomcat-7.0.52(x86).zip

    1. 调整线程池大小:通过修改`server.xml`中的`Connector`元素来调整最大线程数。 2. JVM内存设置:通过`setenv.sh`或`setenv.bat`设置JVM启动参数,优化内存分配。 3. 日志级别:根据需求调整日志级别以减少资源...

    EJB封装

    "ejb-jar.xml"和"weblogic-ejb-jar.xml"是部署描述符文件,用于配置和定制EJB的行为。 了解并熟练掌握EJB封装对于开发企业级Java应用至关重要,它可以帮助我们构建稳定、高效且易于维护的系统。

    ejb3.0

    对于WebLogic Server,`weblogic-ejb-jar.xml`提供了特定于该服务器的配置选项。虽然在很多情况下不再需要这个文件,但如果需要使用WebLogic特有的设置,则仍然需要它。此外,`mappedName`注解属性可以用来代替`...

Global site tag (gtag.js) - Google Analytics