如何在OSGI环境中使用Spring?

时间:2012-10-26 13:48:31

标签: spring java-ee transactions osgi

基本上,我希望能够使用Spring在OSGI包中执行此操作:

  • 使用applicationContext.xml定义bean和代理并装饰它们
  • 在方法上使用@Transactional为它提供一个事务(Spring需要代理它)

据我所知,Spring DM已退役进入Eclipse Gemini。我仍然可以使用spring DM 2.0,它可以让我指出一个带有弹簧蓝图的点?有没有办法使用'常规'Spring来做到这一点?

我如何做第2点?是否可以在OSGI包中使用Spring来提供事务?有人这么成功吗?

我应该在OSGI中远离Spring,还是有更多我不知道的?

1 个答案:

答案 0 :(得分:0)

嗯,你仍然可以使用Spring-DM甚至是“旧的”1.2.1,虽然我真的建议切换到Blueprint,它只是与OSGi一起运行顺畅,与Spring本身没什么不同。特别是因为你想在你的bean上做交易。 我最喜欢的设置是使用OpenJPA的Blueprint(Aries或Gemini),它在OSGi环境中效果最佳。

这里有一个关于如何使用Aries Blueprint

执行此操作的简单示例
<bean id="myDao" class="my.project.dao.jpa.MyJpaDao">
<jpa:context property="em" unitname="persistenc-unit" />
<tx:transaction method="*" value="Required" />
</bean>

您可以在该类上进行任何方法事务。 我通常将这些DAO对象保存在仅包含我的实体类和DAO的单独包中。要在我的应用程序中保留这些DAO,我注册为服务

<service id="myDAO" ref="myDao" interface="my.project.dao.MyDao" />

现在,对于你来说,仍然可以通过它进行“软”转移到蓝图。 如果你让你的实体像我一样分开一个额外的包,你只需要从你的Spring引用那些DAO-Services(与Spring-DM一起使用,在这种情况下,它建议坚持使用spring-dm 1.2.1,你'否则会得到非常糟糕的问题),并从那里继续你的标准。弹簧应用。这是OSGi真正的美丽,您可以根据需要混合所有这些服务框架。