Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring有状态Bean等效-同步回调方法_Java_Spring_Scope_Stateful Session Bean - Fatal编程技术网

Java Spring有状态Bean等效-同步回调方法

Java Spring有状态Bean等效-同步回调方法,java,spring,scope,stateful-session-bean,Java,Spring,Scope,Stateful Session Bean,我想将有状态会话Bean(EJB2.1)迁移到Springbean。有状态Bean和springbean都应该使用webspheretransactionmanager在websphereapplicationserver中运行(接口允许Spring访问它) 旧的有状态会话Bean实现了使用回调方法(特别是回调)的接口 我尝试为我的bean使用prototype作用域,因为据我所知,这模拟了有状态bean,并实现了Spring提供的接口 正如我后来理解的,这些回调不能被调用,因为“与其他作用域不

我想将有状态会话Bean(EJB2.1)迁移到Springbean。有状态Bean和springbean都应该使用webspheretransactionmanager在websphereapplicationserver中运行(接口允许Spring访问它)

旧的有状态会话Bean实现了使用回调方法(特别是回调)的接口

我尝试为我的bean使用prototype作用域,因为据我所知,这模拟了有状态bean,并实现了Spring提供的接口

正如我后来理解的,这些回调不能被调用,因为“与其他作用域不同,Spring不管理原型bean的完整生命周期:容器实例化、配置和以其他方式组装原型对象,并将其交给客户机,而不再记录该原型实例”

会话范围可以是一个解决方案,但会话bean是从使用JMS队列中的消息的消息驱动Pojo调用的

编辑: 旧的会话bean只是一个纯Java类的“包装器”,它实现了对队列等的各种写入。因此,它获取现有类并从中生成一个bean,实现会话同步

public class XXXMessageSenderBean extends MessageSenderBean implements javax.ejb.SessionBean, SessionSynchronization { }
我的想法是采用相同的Java类并创建一个Springbean(接口和实现类):


为什么?为什么需要这种显式回调?它的特殊之处在于您需要它,而单例(或原型)和使用声明性事务管理无法完成什么。您可以(而且应该是这样)始终使用
TransactionSynchronizationManager.registerSynchronization
方法手动注册实现
TransactionSynchronization
的bean。当消息到达并开始处理时(或从上下文检索bean之后),可以轻松地执行一些清理操作,如调用
javax.jms.MessageProducer.close()
。您能否在实现类似于
TransactionSynchronization
的东西的想法中详细阐述一下?您为什么需要它?这已经由springs事务管理处理,并且假设您使用spring将MDP驱动到spring。所以基本上你是在尝试spring和声明式tx管理?如果您需要发送,请使用
JmsTemplate
,它可以为您处理所有这些问题,无需通过回调进行修改。您可以用一些代码和配置来扩展您的答案吗?我想你不应该需要回调,这让事情变得复杂了。这是一个旧的应用程序,我目前的工作是仅展示是否可以用Spring实现类似的行为。如果发送到队列仅仅是通过一个MDP进行的,那么就不需要这样做,但是它是通过这个有状态Bean进行的,我现在无法重写整个代码库(不过稍后会这样做)。在检索bean之后,如何在春季进行清理?
public interface XXXMessageSenderPojo extends TransactionSynchronization

public class XXXMessageSenderPojoImpl extends MessageSenderBean implements XXXMessageSenderPojo