Hi Ravi,

I don't get this issue the first time I persist the UserProfile, only
subsequent times I call merge. I added the logging as you suggested and the
result is puzzling. I have a value changed listener on my jsf page, and it
is this is the code that calls the find method. Here is what my output is
inside the valuechangelistener:

But I worked out what the issue is.  When I retrieve the Country object it
is of type org.apache.openjpa.enhance.com$trm$core$Country$pcsubclass. If I
create a new one it is the correct type com.trm.core.Country.  The former
would be the enhanced version nad is throwing the error. The correct version
of course would be enhanced since it is listed in my persistence.xml.

This doesn't make any sense to me, also it doesn't make any sense to me why
it's class type is showing as java.lang.Class but I can work around it.

Confused Chris


-----Original Message-----
From: Ravi Palacherla [mailto:ravi.palache...@oracle.com] 
Sent: Tuesday, 28 July 2009 7:17 AM
To: users@openjpa.apache.org
Subject: RE: Very weird enhancement error - is the class enhanced or not? -
OpenJPA seems confused

Hi Chris,

This exception can be seen if co.getClass() returns Class.class.
You can may be print clazz before e.find() to see if it is correct.

Once it is confirmed, then we can try to isolate the reason for why
co.getClass() returns Class only for a country and not for other entities.

Are you getting this exception everytime the following stack trace is
traversed ?

"
at com.trm.jpa.services.EntityService.find(EntityService.java:80)
at
com.trm.beans.backing.UserListBackingBean.countryValueChanged(UserListBackin
gBean.java:215)"


Regards,
Ravi.


-----Original Message-----
From: C N Davies [mailto:c...@cndavies.com] 
Sent: Monday, July 27, 2009 3:05 PM
To: Ravi Palacherla; users@openjpa.apache.org
Subject: RE: Very weird enhancement error - is the class enhanced or not? -
OpenJPA seems confused

Hi Ravi, 

Here is what gets executed:

        public Object find(Object co, String uid)
        {
                Class clazz = co.getClass();
                Object existing = em.find(clazz, uid);
                return existing;
        }

EM is an instance of the Entity Manager, but since tis code is used
everywhere in my code, and the fact that the currency and the locale in the
UserProfile use exactly the same code as the Country, it doesn't make sense
that the Country entity is the only one giving the issue.

Chris

-----Original Message-----
From: Ravi Palacherla [mailto:ravi.palache...@oracle.com] 
Sent: Tuesday, 28 July 2009 6:54 AM
To: users@openjpa.apache.org; c...@cndavies.com
Subject: RE: Very weird enhancement error - is the class enhanced or not? -
OpenJPA seems confused

Hi,

What are the values passed inside
"com.trm.jpa.services.EntityService.find(EntityService.java:80)"  while
calling entitymanager.find() ?

Thanks,
Ravi.


-----Original Message-----
From: C N Davies [mailto:c...@cndavies.com] 
Sent: Monday, July 27, 2009 2:40 PM
To: users@openjpa.apache.org
Subject: Very weird enhancement error - is the class enhanced or not? -
OpenJPA seems confused

I am getting a very strange error when calling persist/merge on my entity
under only one specific case.

 

Basically I have a User entity and a UserProfile Entity. The User entity has
a one to one mapping to the UserProfile entity. This is all working fine.

 

I have a Country entity, a Locale entity and Currency entity, all of which I
can create,persist,merge with no issues. 

 

 

The problem occurs when I add a many to one relationship to my UserProfile
entity for a Country entity.  When I persist/merge a User entity, it
cascades to it's related UserProfile which in turn cascades to its Country
entity. So here is the relationship:

 

User -à UserProfile à Country

 

When I call persist/merge on the User entity I get this error:

 

<openjpa-1.2.0-r422266:683325 nonfatal user error>
org.apache.openjpa.persistence.ArgumentException: No metadata was found for
type "class java.lang.Class". The class is not enhanced.

 

That doesn't make any sense because there is no generic class in the
entities being saved.

 

To confuse the issue, when I have an empty UserProfile table, I get the same
error but the UserProfile does get saved. Later when I try to make a change
to the UserProfile on the User and call merge, then I get the same error but
the UserProfile is not updated.

 

To confuse things even more, if I add the other two additional entities to
UserProfile (currency and locale) then they work just fine. The other two
entities are actually the same class as the Country class just renamed.

 

All these classes are defined in my persistence.xml and I can do anything to
them (persist/merge) if I use them by themselves, but only under the
scenario described above will I get this issue.

 

Does anyone have a clue what might be the issue? I put on trace logging but
can't see any insert/update query being executed due to this metadata issue.
Here is the full stacktrace:

 

<openjpa-1.2.0-r422266:683325 nonfatal user error>
org.apache.openjpa.persistence.ArgumentException: No metadata was found for
type "class java.lang.Class". The class is not enhanced.

      at
org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.ja
va:298)

      at
org.apache.openjpa.kernel.BrokerImpl.newObjectId(BrokerImpl.java:1114)

      at
org.apache.openjpa.kernel.DelegatingBroker.newObjectId(DelegatingBroker.java
:268)

      at
org.apache.openjpa.persistence.EntityManagerImpl.find(EntityManagerImpl.java
:451)

      at com.trm.jpa.services.EntityService.find(EntityService.java:80)

      at
com.trm.beans.backing.UserListBackingBean.countryValueChanged(UserListBackin
gBean.java:215)

      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

      at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39
)

      at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl
.java:25)

      at java.lang.reflect.Method.invoke(Method.java:597)

      at org.apache.el.parser.AstValue.invoke(AstValue.java:131)

      at
org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)

      at
org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68)

      at
javax.faces.event.MethodExpressionValueChangeListener.processValueChange(Met
hodExpressionValueChangeListener.java:80)

      ... 31 more

114986  trmPU  TRACE  [http-8080-1] openjpa.jdbc.JDBC - The batch limit is
set to 0.

114995  trmPU  TRACE  [http-8080-1] openjpa.jdbc.SQL - <t 7444146, conn
19525584> executing prepstmnt 31115924 UPDATE User SET active = ?,
createdate = ?, updatedate = ?, name = ?, PROFILE_ID = ? WHERE uniqueid = ?
[params=(int) 1, (Timestamp) 2009-07-27 02:13:53.0, (Timestamp) 2009-07-28
06:19:59.464, (String)  Christopher Davies, (String) 3051, (String)
cndavies]

114996  trmPU  TRACE  [http-8080-1] openjpa.jdbc.SQL - <t 7444146, conn
19525584> [1 ms] spent

114996  trmPU  TRACE  [http-8080-1] openjpa.jdbc.SQL - <t 7444146, conn
19525584> executing prepstmnt 4155459 UPDATE UserProfile SET email = ?, fax
= ?, mobile = ?, phone = ?, COUNTRY_UNIQUEID = ?, CURRENCY_UNIQUEID = ?,
LOCALE_UNIQUEID = ? WHERE id = ? [params=(String) c...@cndavies.com, (String)
02 9356 4557, (String) 0403655872, (String) 02 9356 4557, (String) AL,
(String) JPY, (String) en_NZ, (String) 3051]

114999  trmPU  TRACE  [http-8080-1] openjpa.jdbc.SQL - <t 7444146, conn
19525584> [3 ms] spent

115000  trmPU  TRACE  [http-8080-1] openjpa.jdbc.SQL - <t 7444146, conn
19525584> executing prepstmnt 27931988 UPDATE User SET active = ?,
createdate = ?, updatedate = ?, name = ?, PROFILE_ID = ? WHERE uniqueid = ?
[params=(int) 1, (Timestamp) 2009-07-27 02:13:53.0, (Timestamp) 2009-07-28
06:19:59.464, (String)  Wandy Rarung, (null) null, (String) wrrarung]

115000  trmPU  TRACE  [http-8080-1] openjpa.jdbc.SQL - <t 7444146, conn
19525584> [0 ms] spent

115000  trmPU  TRACE  [http-8080-1] openjpa.jdbc.SQL - <t 7444146, conn
19525584> executing prepstmnt 26426732 UPDATE Locale SET active = ?,
createdate = ?, updatedate = ?, description = ? WHERE uniqueid = ?
[params=(int) 1, (Timestamp) 2009-07-28 05:19:34.0, (Timestamp) 2009-07-28
06:19:59.463, (String) English (New Zealand), (String) en_NZ]

115002  trmPU  TRACE  [http-8080-1] openjpa.jdbc.SQL - <t 7444146, conn
19525584> [2 ms] spent

115002  trmPU  TRACE  [http-8080-1] openjpa.jdbc.SQL - <t 7444146, conn
19525584> executing prepstmnt 18417789 UPDATE Currency SET active = ?,
createdate = ?, updatedate = ?, country = ?, name = ? WHERE uniqueid = ?
[params=(int) 1, (Timestamp) 2009-07-21 19:09:13.0, (Timestamp) 2009-07-28
06:19:59.463, (null) null, (String) Australian Dollar, (String) JPY]

115003  trmPU  TRACE  [http-8080-1] openjpa.jdbc.SQL - <t 7444146, conn
19525584> [1 ms] spent

115003  trmPU  TRACE  [http-8080-1] openjpa.jdbc.SQL - <t 7444146, conn
19525584> executing prepstmnt 8159373 UPDATE Country SET active = ?,
createdate = ?, updatedate = ?, name = ? WHERE uniqueid = ? [params=(int) 1,
(Timestamp) 2009-07-28 05:15:09.0, (Timestamp) 2009-07-28 06:19:59.464,
(String) AUSTRALIA, (String) AL]

115004  trmPU  TRACE  [http-8080-1] openjpa.jdbc.SQL - <t 7444146, conn
19525584> [1 ms] spent

115029  trmPU  TRACE  [http-8080-1] openjpa.jdbc.JDBC - <t 7444146, conn
19525584> [25 ms] commit

115030  trmPU  TRACE  [http-8080-1] openjpa.jdbc.JDBC - <t 7444146, conn
19525584> [1 ms] close

 

Reply via email to