【问题标题】:SEAM: How to get EntityManager and Logger in a class that is loaded dynamically?SEAM:如何在动态加载的类中获取 EntityManager 和 Logger?
【发布时间】:2010-08-23 08:41:48
【问题描述】:

我有一个每 10 分钟运行一次的后台服务。

此服务查询数据库以查找要执行的作业,并将根据作业加载具有不同业务逻辑的类(使用 Class.forName())。当然,它们实现了相同的接口。

我将这些类声明为 SEAM 组件,但是当我尝试使用 entityManager 或 Logger 时,我得到了 NPE。

回答我自己的问题,我想这是因为 Class.forName() 处于 SEAM 的注入机制之下,它没有机会注入依赖项。

在我加载类之后,我可能可以通过自己注入这些来解决这个问题。有没有更好的方法来做到这一点?

谢谢!

【问题讨论】:

    标签: java dependency-injection seam entitymanager


    【解决方案1】:

    你查过EJB-Timer Service的使用方法了吗?

    另一个资源:

    Is it possible to use Seam in a JBoss timed service?

    我必须在几天内做类似的事情。

    请留下对你有用的评论;-)

    【讨论】:

    • 我正在使用 EJB 3 计时器。奇怪的是,我没有在另一个问题中提到“无上下文”问题。使用 Component.getInstance(String, boolean) 加载组件为我解决了这个问题,无需调用 lyfecicle.beginCall()... 无论如何,现在我可以使用 EntityManager 和 Logger。谢谢!
    • @Cleber Goncalves 感谢您的反馈
    【解决方案2】:

    您可以使用

    在非接缝类中注入所有 Seam 组件
    Component.getInstance("entityManager") //You can inject whatever you want.
    

    要让 Logger 正常工作,您可以执行以下操作

     private static final LogProvider log = Logging.getLogProvider(MyClass.class);
    

    【讨论】:

      猜你喜欢
      • 2011-05-17
      • 2012-06-03
      • 1970-01-01
      • 2021-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多