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?