0

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

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

我知道有 Spring DM 已经退役到 Eclipse Gemini 中。我仍然可以使用 spring DM 2.0,这将允许我使用 spring 蓝图点 1?有没有办法使用“常规”春天来做到这一点?

我该怎么做第 2 点?是否可以在 OSGI 包中使用 Spring 来提供事务?有没有人成功做到这一点?

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

4

1 回答 1

0

好吧,即使是“旧”1.2.1,您仍然可以使用 Spring-DM,尽管我真的建议切换到 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 服务(与 Spring-DM 一起,在这种情况下,建议坚持使用 spring-dm 1.2.1,你'否则会遇到非常糟糕的问题),然后从那里开始使用你的标准。春季应用。这就是 OSGi 的真正美妙之处,您可以随意混合所有这些服务框架。

于 2012-10-26T20:31:22.180 回答