Hi List

My setup:-
OpenJPA 1.2.1 on Tomcat 6.0.20 using Java 6.0.12 on a quad core Linux box.


I've 2 servlets which are initialized at start up. Both spawn a thread which calls the same query. The 1st one succeeds the second fails with an odd exception [1]

The query I am calling is

"SELECT u FROM User u WHERE u.login = :login AND u.deletedOn IS NULL"

not rocket science.

The exception says User is not a recognized entity, but it then goes onto list it.

What am I doing wrong?


Both worker threads have the same class loader.



I am using the PersistenceManager using a ContextListener suggested here [2]


*UPDATE*

It seems like a threading issue. If both threads try and call the query concurrently I get the error. Placing a Thread.sleep(5000) in one of them seems to solve the issue.

I was under the impression EntityManagerFactory.getEntityManager() was thread safe?









[1] Exception + Stack trace

Exception in thread "Thread-10" <openjpa-1.2.1-r752877:753278 nonfatal user error> org.apache.openjpa.persistence.ArgumentException: An error occurred while parsing the query filter "SELECT u FROM User u WHERE u.login = :login AND u.deletedOn IS NULL". Error message: The name "User" is not a recognized entity or identifier. Perhaps you meant Meter, which is a close match. Known entity names: [MeterReading, User, Correspondence, Meter, SupplierPart, Equipment, CategoryName, ProjectMapping, TaxCode, QuoteValidity, TaskMapping, SummaryLayout, SupplierPartPriceBreak, NominalCode, QuoteDeliveryOption, Project, PurchaseorderLineItem, DocumentType, QuoteLineItem, Part, PaymentTerm] at org.apache.openjpa.kernel.exps.AbstractExpressionBuilder.parseException(AbstractExpressionBuilder.java:118) at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getClassMetaData(JPQLExpressionBuilder.java:177) at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.resolveClassMetaData(JPQLExpressionBuilder.java:150) at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getCandidateMetaData(JPQLExpressionBuilder.java:225) at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getCandidateMetaData(JPQLExpressionBuilder.java:195) at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getCandidateType(JPQLExpressionBuilder.java:188) at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.access$600(JPQLExpressionBuilder.java:69) at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder$ParsedJPQL.populate(JPQLExpressionBuilder.java:1756) at org.apache.openjpa.kernel.jpql.JPQLParser.populate(JPQLParser.java:56) at org.apache.openjpa.kernel.ExpressionStoreQuery.populateFromCompilation(ExpressionStoreQuery.java:153) at org.apache.openjpa.kernel.QueryImpl.newCompilation(QueryImpl.java:658) at org.apache.openjpa.kernel.QueryImpl.compilationFromCache(QueryImpl.java:639) at org.apache.openjpa.kernel.QueryImpl.compileForCompilation(QueryImpl.java:605) at org.apache.openjpa.kernel.QueryImpl.compileForExecutor(QueryImpl.java:667) at org.apache.openjpa.kernel.QueryImpl.compile(QueryImpl.java:574) at org.apache.openjpa.persistence.EntityManagerImpl.createNamedQuery(EntityManagerImpl.java:892) at org.apache.openjpa.persistence.EntityManagerImpl.createNamedQuery(EntityManagerImpl.java:77)




[2] Persistence Manager using Context Listener
http://javanotepad.blogspot.com/2007/05/jpa-entitymanagerfactory-in-web.html



--
Peter Henderson
Director Starjar Limited.

Mobile: +44 (0) 778 233 8645
Email: [email protected]
Web: www.starjar.com

Reply via email to