请banq等高手帮忙解答一下:tried to enter Stateful bean with different tx context?

lunxian
03-09-15 8 319

在一个页面上要请求某个sfsb的方法,但是这个页面可能同时产生多个,并且使用相同的sfsb实例,导致下面的异常。
一个解决办法是将sfsb改为slsb,但是除此外还没有其他的解决办法?
同样的,对sfsb的使用是否应该受到很大的限制?就像bruce说到的EJB中只有slsb和mdb有用?

09:53:19,437 ERROR [Engine] StandardWrapperValve[jsp]: Servlet.service() for servlet jsp threw exception

org.apache.jasper.JasperException: EJBException:; nested exception is:
javax.ejb.EJBException: Application Error: tried to enter Stateful bean with different tx context, contextTx: TransactionImpl:XidImpl [FormatId=257, GlobalId=yj//321, BranchQual=], methodTx: TransactionImpl:XidImpl [FormatId=257, GlobalId=yj//325, BranchQual=]
一串的at就不用写了

robbin
2003-09-15 15:09

SFSB确实这个问题不太好解决,而且SFSB的性能也容易产生问题,关注一下

我个人也同意只有SLSB和MDB有用的看法。

lunxian
2003-09-15 21:25

如果没有很好的办法解决,就只有改用slsb代替sfsb了。

还有一个东西有疑问:在《J2EE实施的问题 》中banq看到如下的解释:

如果能Sbean,应该能用JMS,如下图:



socketclient接受到数据后,如图左边是加入Queue,而另外一段是取数据,这是个典型的消息处理模型,左边使用sbean实施,而右边取出使用MDB(Message-Driven Beans),中间队列Queue可以交给JMS的。
其实JMS也可以使用在非EJB环境,如果不能使用JMS,正如你说的,右边必须是一个线程啊,sbean不是线程。

我不明白为什么sbean可以作为接收外部消息,感觉也需要线程来处理呀。
我做一个server端程序,要监听多个UDP端口,为了处理峰值并发,从socket中得到的数据首先放入到一个队列中,然后通过起多个线程来处理。这样场景下如何应用ejb呀?我现在的方案是用普通的application的方式,但通过一个load-on-startup的servlet来启动到Jboss环境中的。

lunxian
2003-09-18 18:48

为什么没有人关注一下这个问题?

Horser
2003-09-18 19:31

我感觉你面对的问题我以前碰到过,我冒昧的建议你是否可以把Application实现的功能放到Web上,用Servlet来完成功能,这样比你自己写很多线程管理等代码要好很多.

不知道你的具体应用,随便说说

2Go 1 2 下一页