openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Abe White (JIRA)" <>
Subject [jira] Commented: (OPENJPA-14) PCEnhancer ant task requires openjpa jars to be on the system classpath or passed into ant with '-lib'
Date Thu, 17 Aug 2006 22:35:16 GMT
    [ ] 
Abe White commented on OPENJPA-14:

Note that we already have an available way to set the config file or resource location:

    <config propertiesFile="..."/>
    -- or --
    <config properties="..."/>

The <config> element also lets you specify any property directly, like:
<config connectionURL="..."/>

This works b/c our AbstractTask has a createConfig() method that returns the Configuration
instance (in this case, an OpenJPAConfiguration or JDBCConfiguration subclass instance depending
on the task), so all bean methods are settable. 

The <config> element isn't required, but I agree with Patrick that it shouldn't be,
given that we'll detect persistence.xml if it's available in the classpath.  IMO, it would
be better to fix the NPE to have a good error message than to require an explicit config file

> PCEnhancer ant task requires openjpa jars to be on the system classpath or passed into
ant with '-lib'
> ------------------------------------------------------------------------------------------------------
>                 Key: OPENJPA-14
>                 URL:
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: lib
>         Environment: Windows XP
>            Reporter: Bryan Noll
>         Assigned To: Bryan Noll
>         Attachments: OPENJPA-14.patch1, OPENJPA-14.patch2
> Ideally, one should be able to run 'ant openjpac'  (openjpac would be a target defined
in the build script that would use the PCEnhancer task) without having to put the openjpa
jars on the system classpath or having to pass them into ant vie the '-lib' argument.  Currently
this is not possible.  The root of the issue can be seen from by looking at the public static
String[] getImplementors(String serviceName, ClassLoader loader) method of the Services class.
Basically, the call to 
> loader = Thread.currentThread().getContextClassLoader();
> returns a ClassLoader with the $ANT_HOME\lib\*.jar and $JAVA_HOME\lib\tools.jar in it...
which obviously doesn't contain 'META-INF/services/org.apache.openjpa.conf.ProductDerivation'
> The exception seen when encountering this issue:
> java.lang.ExceptionInInitializerError
>         at org.apache.openjpa.conf.OpenJPAConfigurationImpl.<init>(
>         at org.apache.openjpa.conf.OpenJPAConfigurationImpl.<init>(
>         at org.apache.openjpa.conf.OpenJPAConfigurationImpl.<init>(
>         at org.apache.openjpa.ant.PCEnhancerTask.newConfiguration(
>         at org.apache.openjpa.lib.ant.AbstractTask.execute(
>         at
>         at
>         at
>         at
>         at
>         at
>         at
>         at
>         at
>         at
>         at
>         at
> Caused by: java.util.MissingResourceException: Your system is missing product derivations.
 Product derivations provide configuration options for supported data stores and specifications.
 You must have a META-INF/services/org.apache.openjpa.conf.ProductDerivation file in your
classpath listing the available derivation classes, and some listed class must be instantiable.
 Typically this file is bundled as part of the distribution.  Have you unbundled it, or unbundled
its listed classes?
>         at org.apache.openjpa.conf.ProductDerivations.<clinit>(
>         ... 17 more

This message is automatically generated by JIRA.
If you think it was sent incorrectly contact one of the administrators:
For more information on JIRA, see:


View raw message