OpenJPA
  1. OpenJPA
  2. OPENJPA-2244

Nested classpath ignored in mapping tool ant task

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 2.0.1, 2.1.1, 2.2.0
    • Fix Version/s: 2.0.3, 2.1.2, 2.2.2, 2.2.1.1, 2.3.0
    • Component/s: None
    • Labels:
      None
    • Patch Info:
      Patch Available

      Description

      The nested classpath element inside the mappingtool ant task are ignored when loading the persistent configuration file. User got the following error:

      <openjpa-2.0.2-SNAPSHOT-r422266:1361284M 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.

      1. OPENJPA-2244.patch
        11 kB
        Helen Xu
      2. OPENJPA-2244.patch
        4 kB
        Helen Xu

        Activity

        Hide
        Helen Xu added a comment -

        The fix is to add the ant classloader before loading the configuration file.

        patch attached.

        Show
        Helen Xu added a comment - The fix is to add the ant classloader before loading the configuration file. patch attached.
        Hide
        Helen Xu added a comment -

        new patch attached to load context classloader only when it is needed.

        Show
        Helen Xu added a comment - new patch attached to load context classloader only when it is needed.
        Hide
        Helen Xu added a comment -

        When user specifies the properties attribute inside the config element to point to a specific persistence config file and persistent unit, the persistence config file or unit cannot be loaded from the nested classpath as well. here is an example:
        <mappingtool schemaAction="build" sqlFile="create.sql">
        <classpath>
        <pathelement location="mapping-tool-pi.jar" />
        <pathelement location="mapping-tool-persistenceunit-pi.jar" />
        <pathelement location="./" />
        </classpath>
        <config propertiesFile=""persistence.xml#mappingtool-pu" connectionDriverName="com.ibm.db2.jcc.DB2Driver"/>
        </mappingtool>

        user will get the following exception
        Caused by: java.util.MissingResourceException: persistence.xml#mappingtool-pu
        at org.apache.openjpa.lib.conf.ProductDerivations.load(ProductDerivations.java:286)
        at org.apache.openjpa.lib.conf.ConfigurationImpl.setProperties(ConfigurationImpl.java:858)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
        at java.lang.reflect.Method.invoke(Method.java:611)
        at org.apache.tools.ant.IntrospectionHelper$AttributeSetter.setObject(IntrospectionHelper.java:1498)
        at org.apache.tools.ant.IntrospectionHelper.setAttribute(IntrospectionHelper.java:405)

        The reason it failed to load the config is:
        1. It doesn't have the properties value parsing to separate the file name and persistent unit name
        2. ConfigurationImpl.setProperties() didn't take the ant class loader when it try to load the config file, or it loaded the config file too early. Ideally it should wait until all the classpath setting loaded.
        This problem will happen for all types of OPENJPA ant task.

        I have created a fix for this problem. please refer to the patch file for details.

        Show
        Helen Xu added a comment - When user specifies the properties attribute inside the config element to point to a specific persistence config file and persistent unit, the persistence config file or unit cannot be loaded from the nested classpath as well. here is an example: <mappingtool schemaAction="build" sqlFile="create.sql"> <classpath> <pathelement location="mapping-tool-pi.jar" /> <pathelement location="mapping-tool-persistenceunit-pi.jar" /> <pathelement location="./" /> </classpath> <config propertiesFile=""persistence.xml#mappingtool-pu" connectionDriverName="com.ibm.db2.jcc.DB2Driver"/> </mappingtool> user will get the following exception Caused by: java.util.MissingResourceException: persistence.xml#mappingtool-pu at org.apache.openjpa.lib.conf.ProductDerivations.load(ProductDerivations.java:286) at org.apache.openjpa.lib.conf.ConfigurationImpl.setProperties(ConfigurationImpl.java:858) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37) at java.lang.reflect.Method.invoke(Method.java:611) at org.apache.tools.ant.IntrospectionHelper$AttributeSetter.setObject(IntrospectionHelper.java:1498) at org.apache.tools.ant.IntrospectionHelper.setAttribute(IntrospectionHelper.java:405) The reason it failed to load the config is: 1. It doesn't have the properties value parsing to separate the file name and persistent unit name 2. ConfigurationImpl.setProperties() didn't take the ant class loader when it try to load the config file, or it loaded the config file too early. Ideally it should wait until all the classpath setting loaded. This problem will happen for all types of OPENJPA ant task. I have created a fix for this problem. please refer to the patch file for details.

          People

          • Assignee:
            Helen Xu
            Reporter:
            Helen Xu
          • Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development