首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自JPA实用程序jar的带有@Inject in WAR的NPE

来自JPA实用程序jar的带有@Inject in WAR的NPE
EN

Stack Overflow用户
提问于 2013-04-28 12:44:24
回答 1查看 337关注 0票数 0

环境: JBoss 7.1.1,JDK1.7,WELD模块升级到1.1.10(以防万一)

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

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

在我的war文件中,我有一个从JPA jar注入DAO对象的类。它不工作,它是空的。

我已经找到了带有CDI的jboss (没有jpa jar)的示例,并且它可以工作。

我已经寻找过示例,但找不到任何使用jpa jar的示例。谁能告诉我哪里有一个JPA应用的例子,有一个jee6实用程序jar,它使用注释将JPA中的东西注入到war类中?

非常感谢你阅读这份请愿书。

war文件的结构

代码语言:javascript
复制
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信息quartz作业类抛出JobExecutionException::org.quartz.JobExecutionException: java.lang.NullPointerException请参阅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处的嵌套异常: java.lang.NullPointerExceptioncom.xyz.asp.commsrv.scheduler.jobs.DirScanJob.execute(DirScanJob.java:140)类的.1.7.jar:由: java.lang.NullPointerException引起:...另外2个

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

代码语言:javascript
复制
@DisallowConcurrentExecution
@PersistJobDataAfterExecution
public class DirScanJob implements Job{
    ...
    @Inject
    FiletracksentHome ftsHome;


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

此类驻留在entities.jar中:

代码语言:javascript
复制
@Stateless
public class FiletracksentHome{

    @Inject
    @DatabaseEntities
    private EntityManager entityManager;

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-01 11:42:58

CDI在ServletContextListener中可用,但在Quartz Scheduler的上下文中不可用。我不想为另一个库而烦恼,因为CDI不是必需的。我在ServletContextListener实现中使用@Resource注解注入了一些我需要的属性...

代码语言:javascript
复制
@Resource(lookup = "java:app/env/quartzjobdirectory")
private String quartzJobDirectory;

在web.xml中...

代码语言:javascript
复制
<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 Job中的EJB调用,因为DI不可用,所以我执行了一些JNDI调用,例如...

代码语言:javascript
复制
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 ..。

代码语言:javascript
复制
@Stateless
public class ReadyDocumentsBean implements ReadyDocumentsLocal {
   ...
}

仅供参考。jboss AS7.1将会话bean的JNDI绑定输出到server.log。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16259693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档