我正在使用jboss5.1.x EJB3.0
我第一次尝试使用JPA,运行服务器时出现此异常:
java.lang.IllegalArgumentException: Can't find a persistence unit named 'java:/mracDS'
...
这是我的“DAO”实体,负责所有JPA实体:
@Stateless
public class ECMSEntityManagerDao implements ECMSEntityManagerDaoLocal, ECMSEntityManagerDaoRemote
{
@PersistenceContext(unitName = "java:/mracDS")
EntityManager em;
public ArrayList<T01CounterCalls> getClocksDetailsFromVantive() throws SQLException
{
return (ArrayList<T01CounterCalls>) em.createQuery ("from T01CounterCalls as data").getResultList ();
}
}
我在网上看了一下: 我从未声明过persistence.xml 如果我这样做,应该在里面宣布什么?
感谢, 射线。
答案 0 :(得分:2)
从我看来,我的猜测是你将persistence unit
与data source
混为一谈。
这两个可能感觉相似,但它们不是。非常简单地说,持久性单元是一组类加上相关的数据源。在最基本的形式中,持久性单元仅与数据源耦合:
<强>的persistence.xml 强>:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
>
<persistence-unit name="mracPU">
<jta-data-source>java:/mracDS</jta-data-source>
</<persistence-unit>
</persistence>
然后将持久性单元名称与注入注释一起使用:
@Stateless
public class ECMSEntityManagerDao implements ECMSEntityManagerDaoLocal, ECMSEntityManagerDaoRemote {
@PersistenceContext(unitName = "mracPU")
EntityManager em;
}