【问题标题】:How to use Spring in OSGI environment?如何在 OSGI 环境中使用 Spring?
【发布时间】:2012-10-16 19:02:52
【问题描述】:

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

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

我了解到 Spring DM 已被 Eclipse Gemini 淘汰。我仍然可以使用 spring DM 2.0,这将允许我使用 spring 蓝图点 1?有没有办法使用“常规”春天来做到这一点?

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

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

【问题讨论】:

标签: spring jakarta-ee transactions osgi


【解决方案1】:

好吧,即使是“旧”1.2.1,您仍然可以使用 Spring-DM,虽然我真的建议切换到 Blueprint,它在 OSGi 上运行顺畅,与 Spring 本身并没有太大区别。特别是因为你想对你的 bean 进行交易。 我最喜欢的设置是带有 OpenJPA 的 Blueprint(Aries 或 Gemini),它在 OSGi 环境中效果最好。

这里有一个关于如何使用 Aries 蓝图执行此操作的简单示例

<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 的真正美妙之处,您可以随意混合所有这些服务框架。

【讨论】:

  • 那么你如何实际设置交易?你只是在 blueprint.xml 中使用 Aries 事务吗,我想知道最好的 Spring 方式是什么。
  • 希望我更详细的解释能让您更好地了解它
猜你喜欢
  • 1970-01-01
  • 2017-04-20
  • 2015-03-15
  • 1970-01-01
  • 2015-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-20
相关资源
最近更新 更多