有谁有jBuilder4.0下开发一个的EJB示例,请给我,本人将不胜感激!(50分)

  • 主题发起人 主题发起人 zhfhq
  • 开始时间 开始时间
大侠,我指定了的事务属性后,连编译都通不过了,出现了以下的错误:
### Error: Stateful Session Bean: "Enterprise1Bean"
Session beans may not apply transaction attributes to the method:
test3.Enterprise1 create() throws java.rmi.RemoteException, javax.ejb.CreateException
1 errors, 0 warnings
是不是我填加事务属性不对,请明示:谢谢!

 
错了!
不能指定Home接口的方法的事务属性。
必须指定Remote接口方法的属性。
•
For a session bean, the transaction attributes must be specified for the
methods defined in the bean’s remote interface and all the direct and
indirect superinterfaces of the remote interface,excluding the methods of
the javax.ejb.EJBObject interface. Transaction attributes must not be
specified for the methods of a session bean’s home interface.
 
我赛,你动作这么快。
现在再试试。
 
大哥:
远程接口中没有Create()方法,就不能够填加事务属性。现在我该怎办?我真的很急?
 
???
你只要给remote接口的所有方法(*)定义一个NotSupported就行了
其实这可以算是IAS的一个bug。它在创建remote对象的时候顺便检查了一下是不是
remote接口中的每个方法都有对应的事务属性(其实是在构造一个方法列表),但是
它没有料想到你的remote接口竟然连一个方法都没有。所以出现了这个问题。
等你在remote接口中加上方法后,就可以分别指定那些方法的事务属性了。
呵呵,我们的应用服务器没有这问题。我们是在客户调用时才开始检查事务属性。如果
没有方法,自然没有调用,所以没问题。
 
To JJams_King:
大侠,小弟在这里谢谢你了,按照你所说的我一试就成功了,我现在对大侠你是佩服的
五体投地,通过大侠你对EJB的描述,你是对EJB的运行机理是相当的明了,我作为一个后来者
能得到大侠你的帮忙,实在是小弟我的福分,但小弟我一直对的事务处理这一块不是很懂,看帮助
也看的迷迷糊糊的,我很希望大侠能够给小弟我讲解以下这方面的问题,到底该何时用那种事务处理的
属性?
 
我不是大侠,不要pmp了。只不过是近来我一直做应用服务器的EJB Container部分,EJB
spec. 比你多肯了点罢了。如果你想多了解这些东西,还是自己肯肯EJB spec.吧。我只
能简单说说。
=============================================================================
EJB 事务模型:
EJB中,事务处理分为两大类——组件管理事务边界(Bean managed TX. demarcation)
和容器管理事务边界(Container managed TX. demarcation)。
1。组件管理事务边界
组件管理事务边界是由组件(Bean)本身管理事务的开始(begin
)和提交
(commit)。EJB spec. 1.1规定,容器必须实现JTA中的javax.transaction.UserTransaction
接口以便组件能够自己管理事务的边界。组件通过SessionContext或JNDI环境入口
得到UserTransaction。这种事务模型只适合会话组件,会话组件的每个实例将与
一个事务上下文(TX. context)相关联。组件实例只能通过调用将这个上下文往外
传播而无法接受调用者传播过来的事务上下文。组件可以在适当的时候用
UserTransaction.begin
开始一个事务,在适当的时候用UserTransaction.commit结束
一个事务。对无状态会话组件,组件必须在方法结束前结束已经开始的事务。这种事
务模型用来满足遗留程序的需要。
 
2。容器管理的事务边界
包括:
六种类型——NotSupported,Supports,Required,RequiresNew,Mandatory,Never
EJBContext中的getRollbackOnly和setRollbackOnly
同步接口javax.ejb.SessionSynchronization

(待续)
 
JJams_King:你可以主持一个评书节目了,不知下回书什么时候开讲?:)
顺便问一句:你们做的EJB Container是商业用途,还是研究用?
你在大学里,还是在公司里?
 
eguy,项目的作用好像不止这些吧。它对我是兴趣,对有的人是……
(哎,还是不说得好)
我在哪?我都不知道。我身在学校,名在公司,魂在蓝天,心女朋友拿着,哈哈。
 
哎,不知道哪天可以身心合一!
==============================================================================
NotSupported:
标示为NotSupported的方法将在一个空白的事务上下文中执行。如果调用者正处在
一个事务中,那么调用者的事务上下文将被挂起(实际上不管三七二十一,挂起再说)。
方法的执行不影响调用者的事务状态。
 
Supports:
定义一种事务上下文能通过的,但是本身不使用事务的事务属性。容器对这种
事务属性一般不进行特殊处理。如果调用者在一个事务中,则会把事务上下文传进
去。如果调用者没有活动事务,则没有事务上下文传送。这种属性一般用在事务透
明的方法中,它可能在调用者的指导下去调用若干其他方法,而调用者准确地知道
这些其他的方法是不是应该参与到事务中。总之,事务属性为Supports的方法应该
是不会意识到事务的存在的,更不能去影响事务的状态。EJB spec. 1.1中规定,事
务属性为Supports的方法不能调用getRollbackOnly和setRollbackOnly。
 
Required:
必须参与到一个事务中。如果调用者没有在事务中则创建一个新的事务并在方法退出
时提交新创建的事务。
RequiresNew:
需要一个新的事务。如果调用者已经启动一个事务则调用者的事务将被挂起。方法结
束后容器自动提交新的事务和恢复调用者的事务上下文。
Mandatory:
强制要求调用者提供事务上下文。
Never:
不允许调用者有事务上下文。
 
如果方法的事务属性为:Required,RequiresNew,Mandatory那么方法执行时线程将与一个
事务上下文相关联。如果事务属性为:NotSupported,Never那么方法执行时线程不关联事
务上下文。当事务属性为:Supports时,线程又可能关联一个事务上下文,也可能没有。
当事务属性为Required,RequiresNew或Mandatory时,可以在方法中调用EJBContext的
setRollbackOlny()和getRollbackOnly影响和得到事务的状态。
对于会话组件,组件实现可以实现javax.ejb.SessionSynchronization接口从而把自己
变成同步对象。同步对象将得到事务开始后(afterbegin
)、事务提交前
(beforeCompletion)以及事务提交后(afterCompletion)的通知消息。实体组件由于
本身是资源对象,所以不能成为同步对象。
 
To JJams_King:
太谢谢你了,不过你讲的很高深,我还是不太明白,能不能结合你给我解答的问题具体
分析以下。
谢谢!
 
To JJams_King:
我现在做的一个一个例子,需要用到环境属性(Environment Property),如我用
Properties props=sessionContext.getEnvironment();
String ComponentString=(String)props.get("COMPONENT_LIST");
想的到属性名是COMPONENT_LIST的属性值,可是这样在inprise Server下是如何设置的,
难道是用JBuilder生成的ejb-inprise.xml文件来填加,请大侠给我个指点。

 
1。肯一肯EJB spec.
2。具体问题可以拿出来大家讨论
 
zhfhq,环境入口在部署描述中配。最后是保存在ejb-jar.xml中的。
 
:JJams_King
环境入口在部署描述中配=====具体如何配置?
 
:JJams_King
环境入口在部署描述中配=====具体如何配置?
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部