You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@karaf.apache.org by Mansour Al Akeel <ma...@gmail.com> on 2014/01/26 06:18:56 UTC

OpenJPA and class path

Hello all,

I am trying to customize the naming for the generated tables and columns.
For example instead of creating a table "useraccossiation", which come
from the camel case in

UserAssociation, I like to have a table "user_association".

I understand this can be done with annotations on classes and fields
or properties, but this is not what I want.  Following this post
http://stackoverflow.com/questions/5997051/openjpa-extending-persistencemappingdefaults-to-convert-camel-case-to-undersco

I tried to do this in my persistence.xml

        <properties>
            <property name="openjpa.jdbc.SynchronizeMappings"
value="buildSchema(ForeignKeys=true)" />
            <property name="openjpa.Log" value="DefaultLevel=TRACE,
Tool=TRACE, Runtime=TRACE,  SQL=TRACE" />
            <property name="openjpa.jdbc.MappingDefaults"
value="org.example.CamelCase2UnderscoreMapper" />
        </properties>

The error I am getting:
Caused by: org.apache.openjpa.lib.util.ParseException: Instantiation
of plugin "jdbc.MappingDefaults" with value
"org.example.CamelCase2UnderscoreMapper" caused an error
"java.lang.IllegalArgumentException: java.lang.ClassNotFoundException:
org.example.CamelCase2UnderscoreMapper". The alias or class name may
have been misspelled, or the class may not have be available in the
class path. Valid aliases for this plugin are: [default, ejb, jpa]
        at org.apache.openjpa.lib.conf.Configurations.getCreateException(Configurations.java:422)
        at org.apache.openjpa.lib.conf.Configurations.newInstance(Configurations.java:222)
        at org.apache.openjpa.lib.conf.ObjectValue.newInstance(ObjectValue.java:124)
        at org.apache.openjpa.lib.conf.PluginValue.instantiate(PluginValue.java:105)
        at org.apache.openjpa.lib.conf.ObjectValue.instantiate(ObjectValue.java:83)
        at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getMappingDefaultsInstance(JDBCConfigurationImpl.java:706)
        at org.apache.openjpa.jdbc.meta.MappingRepository.endConfiguration(MappingRepository.java:1520)
        at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:531)
        at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:456)
        at org.apache.openjpa.lib.conf.PluginValue.instantiate(PluginValue.java:120)
        at org.apache.openjpa.conf.MetaDataRepositoryValue.instantiate(MetaDataRepositoryValue.java:68)
        at org.apache.openjpa.lib.conf.ObjectValue.instantiate(ObjectValue.java:83)
        at org.apache.openjpa.conf.OpenJPAConfigurationImpl.newMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:967)
        at org.apache.openjpa.conf.OpenJPAConfigurationImpl.getMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:958)
        at org.apache.openjpa.kernel.AbstractBrokerFactory.makeReadOnly(AbstractBrokerFactory.java:644)
        at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:203)
        ... 43 more
Caused by: java.lang.IllegalArgumentException:
java.lang.ClassNotFoundException:
org.example.CamelCase2UnderscoreMapper
        at serp.util.Strings.toClass(Strings.java:164)
        at serp.util.Strings.toClass(Strings.java:108)
        at org.apache.openjpa.lib.conf.Configurations.newInstance(Configurations.java:214)


The class is located in the same bundle of persistence.xml and I tried
to move it to another bundle, which is what I want, but nothing is
working.

I am not sure where to dig further. Could it be that when in the same
bundle, it is not available on the classpath for the
org.apache.openjpa.lib.conf.Configurations when it's being created ?
What do I need to do to make this custom mapping class available on
the classpath for the EMF ?

Thank you for your time.