0

env:JBoss 7.1.1,jdk 1.7,WELD 模块升级到 1.1.10(以防万一)

我有一个要添加到 WEB-INF\lib 目录的 JPA 项目。它包含我的实体和 DAO 对象,其中有实体管理器注入。我正在使用自定义注释来限定在资源类中生成的 PersistenceContext。我已经在这个项目中运行了 Arquillian 测试以确保它正常工作。

我在 JPA jar 的 \META-INF\ 目录和 war 文件的 \WEB-INF\ 目录中有一个 beans.xml 文件。我什至把它打印出来放在我的桌子上,仍然没有帮助。

在我的战争文件中,我有一个从 JPA jar 注入 DAO 对象的类。它不起作用,它为空。

我从带有 CDI 的 jboss(没有 jpa jar)中找到了示例,它可以工作。

我已经寻找示例,但找不到任何带有 jpa jar 的示例。谁能指出我在哪里有一个带有 JPA 实用程序 jar 的 jee6 Web 应用程序示例,它使用注释将 JPA jar 中的某些内容注入到战争类中?

非常感谢您阅读此请求。

- - - - - - - - - - 附加信息 - - - - - - - - -

战争文件的结构

META-INF
->maven
-->com.xyz
--->web
---->pom.properties
---->pom.xml
->MANIFEST.MF
WEB-INF
->classes
->lib
-->entities.jar
->beans.xml
->faces-config.xml
->web.xml

堆栈跟踪:22:23:12,011 INFO [org.quartz.core.JobRunShell] (DefaultQuartzScheduler_Worker-2) Job DEFAULT.extractDir 抛出 JobExecutionException: : org.quartz.JobExecutionException: java.lang.NullPointerException [参见嵌套异常:java. lang.NullPointerException] at com.xyz.asp.commsrv.scheduler.jobs.DirScanJob.execute(DirScanJob.java:149) [classes:] at org.quartz.core.JobRunShell.run(JobRunShell.java:213) [quartz -2.1.7.jar:] at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557) [quartz-2.1.7.jar:] 原因:com.xyz 处的 java.lang.NullPointerException。 asp.commsrv.scheduler.jobs.DirScanJob.execute(DirScanJob.java:140) [类:] ... 还有 2 个

这是注入了 DAO 对象的类。这是一个石英调度程序作业,它在 jboss 启动期间由 ServletContextListener 启动:

@DisallowConcurrentExecution
@PersistJobDataAfterExecution
public class DirScanJob implements Job{
    ...
    @Inject
    FiletracksentHome ftsHome;


    @Override
    public void execute(JobExecutionContext context) throw JobExecutionException{
        ...
        BigDecimal bd = ftsHome.nextId()
    }
}

此类位于entities.jar 中:

@Stateless
public class FiletracksentHome{

    @Inject
    @DatabaseEntities
    private EntityManager entityManager;

    public BigDecimal nextId(){
    ...
    }
}
4

1 回答 1

0

CDI 在 ServletContextListener 中可用,但在 Quartz 调度器的上下文中没有。我不想打扰另一个库,因为 CDI 不是必需的。我在 ServletContextListener 实现中使用 @Resource 注释注入了一些我需要的属性......

@Resource(lookup = "java:app/env/quartzjobdirectory")
private String quartzJobDirectory;

并在 web.xml ...

<env-entry>
   <description>Quartz Jobs Directory</description>
   <env-entry-name>java:app/env/quartzjobdirectory</env-entry-name>
   <env-entry-type>java.lang.String</env-entry-type>
   <env-entry-value>/appl/jboss-as-7.1.1.Final/standalone/configuration/quartz_jobs/</env-entry-value>
</env-entry>

对于 Quartz Jobs 中的 EJB 调用,因为 DI 不可用,我做了一些 JNDI 调用,例如 ...

InitialContext ic = new InitialContext();
readyDocs = (ReadyDocumentsLocal) ic.lookup("java:global/commsrv-ear-1.0.0/commsrv-ejb-1.0.0/ReadyDocumentsBean!com.ista.asp.commsrv.ReadyDocumentsLocal");

和 EJB ...

@Stateless
public class ReadyDocumentsBean implements ReadyDocumentsLocal {
   ...
}

仅供参考 ... jboss as 7.1 将向 server.log 输出会话 bean 的 JNDI 绑定。

于 2013-05-01T03:42:57.713 回答