Hi Mike,

 

Yes this is what I have found. I need to list the classes in the
persistence.xml or they can't don't work and throw the error that the class
has not been enhanced. I started off with nothing in my persistence.xml and
got the error for any entity I tried to persist, now I just add all my
entities to the persistence.xml and all is good.

 

I'm using eclipse without an ant script so for now I have decided to use
runtime enhancement and work on build time enhancement later.

 

Chris

 

 

From: Michael Dick [mailto:[email protected]] 
Sent: Friday, 17 July 2009 10:12 PM
To: [email protected]; [email protected]
Subject: Re: Deployment

 

Hi Chris,

Technically I think there's verbage in the JPA 1.0 spec that indicates that
you do have to provide the list of classes for JSE. 

In OpenJPA you shouldn't have to do that though - but if you do provide a
list that list must be comprehensive. Does this match what you've seen? 

-mike

On Sat, Jul 4, 2009 at 10:55 AM, C N Davies <[email protected]> wrote:

Thanks Ravi,

I found that if I added my classes to the persistence.xml it all works fine
but I thought I didn't have to do that, or am I mistaken.

Regards

Chris


-----Original Message-----
From: Ravi Palacherla [mailto:[email protected]]
Sent: Sunday, 5 July 2009 1:32 AM
To: [email protected]; [email protected]
Subject: RE: Deployment

Hi Chris,

There are two ways to enhance classes.

1) Build time enhancement

       Here is a link for build time enhancement:

http://openjpa.apache.org/builds/latest/docs/manual/manual.html#ref_guide_pc
_enhance_build

       Ant task for that is

http://openjpa.apache.org/builds/latest/docs/manual/manual.html#ref_guide_in
tegration_enhance

2) Run time enhancement.

http://openjpa.apache.org/builds/latest/docs/manual/manual.html#ref_guide_pc
_enhance_runtime

If you did build time enhancement then
Decompile your class file and see if the class implements PersistenceCapable
?

If it implements PersistenceCapable that means the class is enhanced.

Regards,
Ravi.

-----Original Message-----
From: C N Davies [mailto:[email protected]]
Sent: Saturday, July 04, 2009 3:49 AM
To: [email protected]
Subject: Deployment

I'm having an issue when running my application in that OpenJPA is
complaining my class has not been enhanced but the class looks fine to me,
can anyone see if I am missing something stupid please.



Here is the top of the stack trace:



<openjpa-1.2.0-r422266:683325 nonfatal user error>
org.apache.openjpa.persistence.ArgumentException: Attempt to cast instance
"com.trm.core.curre...@cf3539" to PersistenceCapable failed.  Ensure that it
has been enhanced.

FailedObject: com.trm.core.curre...@cf3539

<openjpa-1.2.0-r422266:683325 nonfatal user error>
org.apache.openjpa.persistence.ArgumentException: Attempt to cast instance
"com.trm.core.curre...@cf3539" to PersistenceCapable failed.  Ensure that it
has been enhanced.
FailedObject: com.trm.core.curre...@cf3539





I am wondering if is because of how I am using the objects. Basically the
code is loading some data from a file, depending on some configuration the
code will try to create the appropriate objects and then persist them. In
order to make the code abstract, the code loads the data then creates a
generic object and calls it setters to populate the data. Hence when the
EntityManager is called to persist the object it I am passing it a generic
object since I can't cast the object to the it's actual class at run time.
>From the stack trace it seems that OpenJPA knows the correct class type so I
don't understand why it is complaining.



Here is my class:





@Entity

@Table(name="currency")



public class Currency implements Serializable

{



     /**

      *

      */

     private static final long serialVersionUID = 1L;

     @Id

//    @GeneratedValue(strategy=GenerationType.AUTO)

     private String isocode;

     private String name;

     private String country;



     public Currency(){



     }

     /**

      * @param isocode the isocode to set

      */

     public void setIsocode(String isocode) {

           this.isocode = isocode;

     }

     /**

      * @return the isocode

      */

     public String getIsocode() {

           return isocode;

     }

     /**

      * @param name the name to set

      */

     public void setName(String name) {

           this.name = name;

     }

     /**

      * @return the name

      */

     public String getName() {

           return name;

     }

     /**

      * @param country the country to set

      */

     public void setCountry(String country) {

           this.country = country;

     }

     /**

      * @return the country

      */

     public String getCountry() {

           return country;

     }





Thanks for any advice.



Chris

 

Reply via email to