2014-03-04 23 views
0

我有一个EJB-Project和一个JBoss 7.1服务器和一个PostgreSQL数据库。我想通过PersistenceContext这样获得的EntityManager:JBoss 7.1数据源JDBC 4.1 Java持久性竞争

@PersistenceContext(name="PlayerService",unitName="PlayerService") 
private EntityManager em; 

的persistence.xml:

<persistence-unit name="PlayerService" transaction-type="JTA"> 
<provider>org.hibernate.ejb.HibernatePersistence</provider> 
<properties> 
    <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> 
... 

我启动JBoss服务器,进入管理控制台,并配置一个JDBC数据源。我将postgresql-9.3-1101.jdbc41.jar复制到服务器的部署文件夹中,以便在创建数据源时选择该驱动程序。数据源名称是PlayerService,JNDI路径是java:jboss/PlayerService。我还将该数据源作为JPA子系统中的默认数据源。

em.getTransaction().begin(); 

仍然抛出一个空指针,我猜是因为我尝试(使用一个单独的主功能测试从一个Java类)访问PersistenceContext服务器之外。我需要做些什么才能做到这一点。它会从服务器上的已部署项目中运行吗?我感觉我错过了最后一步。

+0

与JDBC或postgresql不相关,但与JPA相关,因此标记为这样。 – eis

回答

0

我尝试从服务器

外部访问PersistenceContext在单元测试中,你需要初始化EntityManager的自己。

EntityManagerFactory factory = Persistence.createEntityManagerFactory("PlayerService"); 
EntityManager em = factory.createEntityManager();