At least you have verified that the problem is related to the populating of
the metadata repository.  Thanks for the information.

Kevin

On Tue, May 26, 2009 at 12:14 PM, Michael Simons <[email protected]
> wrote:

> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Hello Kevin,
>
> We are using the current stable version of Geronimo AS.
> Yes, we are pre-enhancing your Entities.
>
> We now solved (or worked-around) the problem by inserting the following in
> our persistence.xml:
> <property name="openjpa.MetaDataFactory"
>
> value="jpa(Types=net.uniopt.domain.actual.ActualAction;...;net.uniopt.domain.usrmngmt.LoginUser)"/>
>
> Hope this helps catching the bug.
>
> Michael
>
> Kevin Sutter schrieb:
> > Hi Michael,
> > I see that you are running with 1.2.x of OpenJPA, so that's good.  I
> thought
> > that the problem you are describing was resolved eons ago.  It's one that
> I
> > hit very early on in my tenure with OpenJPA.  So, either the problem
> still
> > has a window associated with it, or it was accidentally re-introduced.
> >
> > The problem is that the metadata associated with the Entities in the
> query
> > is not populated yet.  You are forcing this metadata to get populated by
> > doing one of your tricks (doing a find before the query, for example).
> >
> > As I think about it more, maybe the "window" still exists in an
> application
> > server, but the original problem was resolved in standalone JSE mode.
>  Not
> > sure.  What application server are you using?  Does it provide the
> necessary
> > hooks for a JPA provider so that OpenJPA can properly enhance the classes
> at
> > startup?
> >
> > I did a quick search in our JIRAs and found this one [1].  But, this
> seems
> > to be related to MappedSuperClasses and it seems to also fail in JSE.
> >
> > There are also several postings to our forums with similar results [2],
> but
> > I'm not sure if these are the exact same scenario as yours.  Are you
> > pre-enhancing your Entities?  Or, are you relying on the container hook
> to
> > do the dynamic enhancing?  Or, are you relying on the runtime enhancement
> > (also known as sub-classing)?
> >
> > More questions than answers, but I really thought this issue was resolved
> a
> > long time ago...
> > Kevin
> >
> >
> > [1]  https://issues.apache.org/jira/browse/OPENJPA-1043
> > [2]
> >
> http://n2.nabble.com/Starting-OpenJPA-during-container-startup-td210725.html#a210725
> >
> >
> http://n2.nabble.com/RE%3A-Problem-with-openjpa-enhancer---using-runtime-enhancement-td1608390.html#a1608390
> >
> > On Mon, May 25, 2009 at 7:29 AM, Michael Simons
> > <[email protected]>wrote:
> >
> >> Hi,
> >>
> >> I've encountered a strange little problem here... When I do the
> >> following locally (in a simple application, not connected to an
> >> Application Server)...
> >>
> >> Query query =  em.createQuery("select u from LoginUser u where u.login =
> >> :loginname and u.passwd = :pass"); //$NON-NLS-1$
> >> //... setting Parameters...
> >> LoginUser user = null;
> >> try {
> >>        user = (LoginUser)query.getSingleResult ();
> >> } catch (NoResultException noResult) {
> >>        System.err.println("NoResult");
> >> }
> >>
> >> ... it works fine, it'll get me the correct "LoginUser" object. But when
> >> I try the same thing in a stateful EJB, the problems start. I'll get the
> >> following error:
> >>
> >> <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 LoginUser u where u.login
> >> = :loginname and u.passwd = :pass". Error message: The name "LoginUser"
> >> is not a recognized entity or identifier. Known entity names: []
> >>
> >> Funny thing, if I call something like...
> >>
> >> LoginUser user = (LoginUser)em.find(LoginUser.class, 1);
> >>
> >> ...before trying to create the query above, the whole thing will
> >> suddenly work, LoginUser seems to become a recognized Entity (which also
> >> shows, that my classes are correctly enhanced, that the EntityManager
> >> knows them correctly, etc.). It seems, that even though the
> >> EntityManager "knows" the LoginUser Entity (because I can "em.find(...)"
> >> it), it doesn't recognize it in a query.
> >>
> >> If I cast the Query to OpenJPAQuery and there set the ResultClass...
> >>
> >> if (query instanceof OpenJPAQuery) {
> >>        OpenJPAQuery opq = (OpenJPAQuery)query;
> >>        opq.setResultClass( LoginUser.class );
> >> }
> >>
> >> ...it suddenly seems to work. The big question is: Why is this needed?
> >> Is there a setting I can put into the (OpenJPA)EntityManager, that it
> >> will automatically recognize all of its entities in queries? Or do I
> >> really have to cast to OpenJPAQuery everytime I do a query?
> >>
> >> Regards,
> >>
> >> Michael (The original author Florian did not get a response from the
> list,
> >> after
> >> subscription-verification)
> >>
> >>
> >
>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.7 (MingW32)
> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
>
> iD8DBQFKHCNx5aNR/9BakrgRAoRaAJ9j0zMzQ27KXLy/9XnwexR0Oz9AtwCdFVLK
> B7tHzJkC1V/zYjJTyWJUGCU=
> =bRbu
> -----END PGP SIGNATURE-----
>

Reply via email to