Hi David, I think the javaagent will be run way before the main method of weblogic server runs. In other words, even before initializing your webapplication the javaagent will run. So, my guess is there is no way weblogic knows about the "prefer-application-packages" at the time the javaagent is used. You should see the same exception with/without prefer-application-pacakages.
Also if you have to use javaagent then it is expecting a META-INF/persistence.xml in system classpath because at the time the javaagent is initialized the only possible classloader is the java system classpath. None of the applications will be initialized by that time. I do not know javaagent "PCEnhancerAgent" is intended to be used for application server environments. May be someone from openJPa community can comment on this. Regards, Ravi. -----Original Message----- From: KARR, DAVID (ATTCINW) [mailto:[email protected]] Sent: Thursday, December 10, 2009 10:18 AM To: [email protected] Subject: Seemed to fail to find persistence.xml, do I have it in the right place? I'm using Weblogic 10MP1, JDK 1.5, and OpenJPA 1.2.1. I've constructed an EAR file which wraps my WAR file, which contains my domain classes and my persistence.xml file. I've specified the "prefer-application-packages" element in my weblogic-application.xml file, to take "org.apache.openjpa.*" from my jars, not from WebLogic. I started up WebLogic with a "-javaagent" parameter pointing to the "openjpa-1.2.1.jar" file. I saw the following in the console: -------------- Caused by: <1.0.0 fatal user error> org.apache.openjpa.util.MetaDataException: MetaDataFactory could not be configured (conf.newMetaDataFactoryInstance() returned null). This might mean that no configuration properties were found. Ensure that you have a META-INF/persistence.xml file, that it is available in your classpath, or that the properties file you are using for configuration is available. If you are using Ant, please see the <properties> or <propertiesFile> attributes of the task's nested <config> element. This can also occur if your OpenJPA distribution jars are corrupt, or if your security policy is overly strict. at org.apache.openjpa.meta.MetaDataRepository.initializeMetaDataFactory(Met aDataRepository.java:1496) at org.apache.openjpa.meta.MetaDataRepository.endConfiguration(MetaDataRepo sitory.java:1489) at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurati ons.java:450) at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurati ons.java:375) at org.apache.openjpa.lib.conf.PluginValue.instantiate(PluginValue.java:102 ) at kodo.conf.CachingMetaDataRepositoryPlugin.instantiate(CachingMetaDataRep ositoryPlugin.java:29) at org.apache.openjpa.lib.conf.ObjectValue.instantiate(ObjectValue.java:79) at org.apache.openjpa.conf.OpenJPAConfigurationImpl.newMetaDataRepositoryIn stance(OpenJPAConfigurationImpl.java:833) at org.apache.openjpa.conf.OpenJPAConfigurationImpl.getMetaDataRepositoryIn stance(OpenJPAConfigurationImpl.java:828) at org.apache.openjpa.conf.OpenJPAConfigurationImpl.instantiateAll(OpenJPAC onfigurationImpl.java:1414) at org.apache.openjpa.enhance.PCEnhancerAgent.premain(PCEnhancerAgent.java: 65) -------------- I'll show the structure of my EAR/WAR and where the persistence.xml file is, but there's a clue in this stack trace that really bothers me. One of the entries refers to "kodo", which is WebLogic's older JPA implementation, which corresponds to OpenJPA 1.0.0. I've looked at some of the source files in OpenJPA 1.2.1 that are referenced in this stack trace, and it's clear those line numbers don't correspond to the 1.2.1 source. So, somehow WebLogic is ignoring my "prefer-application-packages" element. Despite that feeling, I also note that this error occurs as a result of the "javaagent" processing, which explicitly specifies the openjpa-1.2.1.jar, before it even loads my application. This is also odd, because it's implying that it couldn't find the "persistence.xml" file for my application, but it's clear it got this error before it even tried to load my application. So, concerning my EAR structure, at the root of the EAR is my WAR file, and my "persistence.xml" file is in "WEB-INF/classes/META-INF" in the WAR. The following is my simple persistence.xml file (with some things elided): <?xml version="1.0" encoding="UTF-8"?> <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> <persistence-unit name="myunitname" transaction-type="JTA"> <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provid er> <jta-data-source>myjtadatasource</jta-data-source> <mapping-file>pathtomappingfile</mapping-file> <properties> <property name="openjpa.Log" value="DefaultLevel=TRACE"/> </properties> </persistence-unit> </persistence>
