我正在使用@L_403_0@ MVC和Virgo Webserver在OSGi应用程序上开发一个模块.
在我的模块上,我有一个Controller,它可以访问Manager,它有一个负责处理报告生成的处理程序列表.
一切都很好,直到我不得不从外部服务调用事务方法.由于我的所有类都不是事务性的,因此我必须添加对转换管理器和注释驱动的引用.然后,我的经理停止接到通知.
我知道当使用注释驱动时,我的所有bean必须实现一个公共接口才能使代理机制起作用.据我所知,所有课程都是(其中一个不是,但后来我改了).
我的配置文件是:
束-context.xml中:
我的bundle-osgi.xml如下:
因此,在发布所有服务之后,调用oSGIChangeReportHandler.register(我能够对其进行调整):
@Service(value="oSGIChangeReportHandler")
public class OSGIChangeReportHandlerImpl implements OSGIChangeReportHandler {
private ReportManager reportManager;
/**
* @param reportManager the reportManager to set
*/
@Autowired
public void setReportManager(ReportManager reportManager) {
this.reportManager = reportManager;
}
@SuppressWarnings("rawtypes")
public void register(ReportHandler reportHandler,Map properties) {
reportManager.addReportHandler(reportHandler);
}
@SuppressWarnings("rawtypes")
public void unregister(ReportHandler reportHandler,Map properties) {
reportManager.removeReportHandler(reportHandler);
}
}
虽然调试器在register方法上显示了reportManager和reportHandler的Proxies,但调试器不会在ReportManagerImpl.addReportHandler方法上停止:
@Service(value="reportManager")
@Transactional(propagation = Propagation.MANDATORY,rollbackFor = Exception.class)
public class ReportManagerImpl implements ReportManager {
private ReportConfigurationDAO reportConfigurationDAO;
private ArrayList
我必须强调,当我从bundle-context.xml文件中删除tx:annotation-driven标记时,一切正常(处理程序在启动期间正确添加到列表中).
那么,我在这里错过了什么?
最佳答案
原文链接:https://www.f2er.com/spring/432504.html