9
votes

Obtenir "java.lang.unsupportedoperationException:"

J'ai créé le petit projet JPA pour persister un enregistrement d'étudiant. J'utilise la base de données Oracle. J'utilise l'openjpa comme fournisseur JPA.

J'ai créé correctement les séquences de la table et les séquences pertinentes. P>

Classe d'entité étudiante fore> P>

Exception in thread "Attachment 60230" java.lang.UnsupportedOperationException: cannot get the capability, performing dispose of the retransforming environment
    at com.ibm.tools.attach.javaSE.Attachment.loadAgentLibraryImpl(Native Method)
    at com.ibm.tools.attach.javaSE.Attachment.loadAgentLibrary(Attachment.java:253)
    at com.ibm.tools.attach.javaSE.Attachment.parseLoadAgent(Attachment.java:235)
    at com.ibm.tools.attach.javaSE.Attachment.doCommand(Attachment.java:154)
    at com.ibm.tools.attach.javaSE.Attachment.run(Attachment.java:116)
Exception in thread "main" java.lang.UnsupportedOperationException: cannot get the capability, performing dispose of the retransforming environment
    at sun.instrument.InstrumentationImpl.isRetransformClassesSupported0(Native Method)
    at sun.instrument.InstrumentationImpl.isRetransformClassesSupported(InstrumentationImpl.java:124)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
    at java.lang.reflect.Method.invoke(Method.java:600)
    at org.apache.openjpa.enhance.ClassRedefiner.canRedefineClasses(ClassRedefiner.java:123)
    at org.apache.openjpa.enhance.ManagedClassSubclasser.prepareUnenhancedClasses(ManagedClassSubclasser.java:122)
    at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:304)
    at org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:228)
    at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:202)
    at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
    at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:213)
    at com.ibm.ws.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:45)
    at com.ibm.ws.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:30)
    at com.jpa.demo.util.JPAUtil.getEntityManager(JPAUtil.java:32)
    at com.jpa.demo.client.JPAClient.main(JPAClient.java:13)
1045  JPAOracleDemo  INFO   [main] openjpa.Enhance - Creating subclass for "[class com.jpa.demo.model.Student]". This means that your application will be less efficient and will consume more memory than it would if you ran the OpenJPA enhancer. Additionally, lazy loading will not be available for one-to-one and many-to-one persistent attributes in types using field access; they will be loaded eagerly instead.
Done...


1 commentaires

On dirait que le problème est dans . Veuillez vérifier à OpenJPA.apache.org/Builds /1.2.3/APACHE-OPENJPA/DOCS/... et à openjpa.apache.org/builds/1.2.1/apache-openjpa-1.1/docs/...


3 Réponses :


2
votes

Pour commencer, éloignez-vous de cette propriété.


3 commentaires

J'ai essayé ce scénario aussi mais pas de chance. J'ai eu l'erreur de soufflage. Exception dans le fil "Main" org.apache.openjpa.persistence.argumentException: tentative de casser l'instance "com.jpa.demo.model.student@29e029e" à la persistanceCapable a échoué . Veiller à ce qu'il ait été amélioré. Échoué a échoué: com.jpa.demo.model.student@29e029e


Améliorez vos entités en utilisant une amélioration de la durée de construction ou via un -javaagent


Merci rick. Pouvez-vous s'il vous plaît me guider pour faire l'amélioration de l'heure de construction?



1
votes

Ceci est mon modèle d'améliorateur, cela fonctionne correctement pour OpenJPA: ` xxx

`


1 commentaires

Merci John. Comment puis-je utiliser avec mon projet? Où dois-je ajouter cela?



1
votes

La spécification JPA nécessite un type de surveillance des objets d'entité, mais la spécification ne définit pas comment implémenter cette surveillance. Certains fournisseurs de la JPA génèrent automatiquement de nouvelles sous-classes ou d'objets proxy devant les objets d'entité de l'utilisateur au moment de l'exécution, tandis que d'autres utilisent des technologies de tissage du code octet pour améliorer les objets de classe d'entités. OpenJPA soutient les deux mécanismes, mais suggère fortement uniquement l'amélioration de l'amélioration du tissage du code d'octet. Le support de sous-classement (tel que fourni par OpenJPA) n'est pas recommandé (et est désactivé par défaut dans OpenJPA 2.0 et au-delà). (Source: http://openjpa.apache.org/entity-enhancement.html )

La cause de ce problème est que j'ai utilisé le support de sous-classement pour l'amélioration de l'entité mais qui est désactivé par défaut dans OpenJPA2.0 et au-delà.

J'ai trouvé la solution pour ce problème. Nous devons améliorer la classe d'entité au moment de l'exécution en fournissant un Javaagent lors du lancement de la JVM que OpenJPA se déroule.

J'ai mis quelque chose comme ce qui suit comme argument JVM

- Javaagent: C: /OPENJPA/APACHACHE-OPENJPA-2.0.0.0.JAR

et j'ai supprimé la ligne ci-dessous de persistance.xml xxx

persistance de travail.xml xxx


0 commentaires