【问题标题】:Call Bundle Activator Before Injecting Entity Manager在注入实体管理器之前调用捆绑激活器
【发布时间】:2023-03-28 07:45:02
【问题描述】:

我有一个持久性捆绑包(有一个Meta-Persistence),它还有一个Activator

当部署到karaf时,容器开始处理persistence unitmapping files等,然后调用Activatorstart方法

我的问题是:有没有办法改变这种行为?让容器先调用方法?

编辑

我需要先调用激活器的原因:

我有一些 mapped entities 依赖于 jackson,而 spring 本身依赖于 spring,当hibernate 正在加载 entities 时,它到达了一个自制的类,该类在没有时阻塞spring context 被注入其中。所以捆绑永远处于starting 状态

所以我认为一个可能的解决方案是利用Activator 注入spring context

谢谢

【问题讨论】:

  • 您希望激活器首先运行是否有特殊原因?
  • 我在原帖中添加了原因
  • 杰克逊通常不需要弹簧。或者您是否尝试直接从实体公开 REST 服务.. 我不想这样做。

标签: java jpa osgi apache-karaf


【解决方案1】:

容器(或更准确地说是 Aries JPA)必须在启动包之前开始处理持久性单元。

原因是 Aries JPA 在某些情况下需要进行加载时编织。这种编织必须在任何包第一次加载要编织的类之前完成。因此,唯一安全的时间是在 bundle 解决之后。

【讨论】:

  • 所以这似乎是鸡和蛋的事情,有什么建议吗?
  • 一般在实体类中使用依赖注入是个大问题。我会尝试在仅使用实体的服务类中提取该功能。
  • 我最终创建了另一个包来创建上下文并导出它,从而解决了问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-21
相关资源
最近更新 更多