NamedQuery not found with EclipseLink
wlovett May 30, 2013 5:45 PMAll,
I'm using EAP 6.1 and JDeveloper 11g. The project deploys successfully but when I open the first page (which queries for some users), I receive the following error:
17:11:31,564 ERROR [stderr] (http-127.0.0.1/127.0.0.1:8080-1) java.lang.IllegalArgumentException: NamedQuery of name: ReUniquePerson.findByOidUid not found. 17:11:31,566 ERROR [stderr] (http-127.0.0.1/127.0.0.1:8080-1) at org.eclipse.persistence.internal.jpa.QueryImpl.getDatabaseQueryInternal(QueryImpl.java:323) 17:11:31,566 ERROR [stderr] (http-127.0.0.1/127.0.0.1:8080-1) at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createNamedQuery(EntityManagerImpl.java:1061) 17:11:31,566 ERROR [stderr] (http-127.0.0.1/127.0.0.1:8080-1) at org.jboss.as.jpa.container.AbstractEntityManager.createNamedQuery(AbstractEntityManager.java:356) 17:11:31,567 ERROR [stderr] (http-127.0.0.1/127.0.0.1:8080-1) at myManagerBean.queryReUniquePersonFindByOidUid(P2mcManagerBean.java:126)
It seems that JBoss isn't seeing my persistence entities.
persistence.xml
<persistence-unit name="MYORG" transaction-type="JTA"> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <jta-data-source>java:/MyOrgDS</jta-data-source> <class>com.sample.ReUniquePerson</class> <properties> <property name="eclipselink.weaving" value="false"/> <property name="eclipselink.weaving.lazy" value="false"/> <property name="eclipselink.weaving.fetchgroups" value="false"/> <property name="eclipselink.weaving.changetracking" value="false"/> <property name="eclipselink.target-server" value="JBoss"/> <property name="eclipselink.target-database" value="ORACLE"/> <property name="eclipselink.cache.size.default" value="1000"/> <property name="eclipselink.cache.type.default" value="SoftWeak"/> <property name="eclipselink.cache.shared.default" value="false"/> <property name="eclipselink.jdbc.batch-writing" value="Oracle-JDBC"/> <property name="eclipselink.logging.level" value="CONFIG"/> </properties> </persistence-unit>
Here's the sequence:
I call the first page, which instantiages the backing bean. The backing bean, upon creation, grabs the entity manager successfully.
public class UserManager{
// backing bean constructor calls entity manager session bean
public UserManager{
try{
System.out.println("Querying " + userId);
ReUniquePerson userSearch = em.queryReUniquePersonFindByOidUid(userId);
...
}
}
The entity manager then fires off the queryReUniquePersonFindByOidUid method. However, there is an error creating the named query.
Session Bean
@Stateless(name = "MyManager")
MyManagerBean implements MyManager, MyManagerLocal {
@PersistenceContext(unitName = "Model")
private EntityManager em;
public ReUniquePerson queryReUniquePersonFindByOidUid(Object oidUid) {
try {
System.out.println("Creating named query");
Query query = em.createNamedQuery("ReUniquePerson.findByOidUid");
query = query.setParameter("oidUid",oidUid);
System.out.println("Querying for person");
Object obj = query.getSingleResult();
System.out.println("Found " + obj);
return (ReUniquePerson) obj;
} catch (Exception e) {
if (debug == true) {
e.printStackTrace();
}
return null;
}
}
Here's the Entity ReUniquePerson.java
@Entity
@NamedQueries({
@NamedQuery(name = "ReUniquePerson.findByOidUid", query = "select o from ReUniquePerson o where UPPER(o.oidUid) = UPPER(:oidUid)"),
@NamedQuery(name = "ReUniquePerson.findByLastname", query = "select o from ReUniquePerson o where UPPER(o.lname) LIKE UPPER(:lname)")})
@Table(name = "RE_UNIQUE_PERSON")
public class ReUniquePerson implements Serializable {
...
My WAR structure is as follows. I apologize in advance for my poor ascii art
WAR |---- .jspx's |---- WEB-INF |--- classes | |--- META-INF | | |--- persistence.xml | | |--- ejb-jar.xml | | |--- adf-settings.xml | |--- com.sample.ReUniquePerson |--- lib | |--- A whole lotta jars |--- faces-config.xml |--- web.xml |--- other xml files
I have tried https://community.jboss.org/wiki/HowToUseEclipseLinkWithAS7 but it does not appear that JBoss automatically picks up my use of EclipseLink. If I do not include my own jars in my lib directory, the program does not deploy. To get around this, I package all my persistence files in my lib directory. Those are
eclipselink-2.4.0.jar javax.persistence-2.0.4.jar org.eclipse.persistence.asm-3.3.1.jar org.eclipse.persistence.core-2.4.0.jar
Any ideas?