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