Enhancement in GAE/DataNucleus v4

65 views
Skip to first unread message

N.F. via StackOverflow

unread,
Sep 19, 2014, 12:34:44 AM9/19/14
to google-appengin...@googlegroups.com

I am developping application with GAE/DataNucleus/cloudSQL. DataNucleus version is 4.0.2 because I followed this advise.

After this question, I have registered my classes in src/META-INF/persistence.xml as follows.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">

    <persistence-unit name="unit" transaction-type="RESOURCE_LOCAL">
        <provider>org.datanucleus.api.jpa.PersistenceProviderImpl</provider>
        <class>(class to persist)</class>
        <class>(class to persist)</class>
                        :
        <exclude-unlisted-classes>true</exclude-unlisted-classes>
        <properties>
            <property name="javax.persistence.jdbc.url" value="jdbc:google:rdbms://(snipped.)"/>
            <property name="javax.persistence.jdbc.driver" value="com.google.cloud.sql.jdbc.internal.googleapi.GoogleApiDriver"/>
            <property name="datanucleus.autoCreateSchema" value="true"/>
        </properties>
    </persistence-unit>
</persistence>

When I run the application, I got error.

java.lang.ExceptionInInitializerError
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:190)
    at com.google.appengine.tools.development.agent.runtime.RuntimeHelper.checkRestricted(RuntimeHelper.java:70)
    at com.google.appengine.tools.development.agent.runtime.Runtime.checkRestricted(Runtime.java:64)
    at (My app)
    at (My app)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:115)
    at com.google.api.server.spi.SystemService.invokeServiceMethod(SystemService.java:359)
    at com.google.api.server.spi.SystemServiceServlet.execute(SystemServiceServlet.java:160)
    at com.google.api.server.spi.SystemServiceServlet.doPost(SystemServiceServlet.java:118)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
    at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:127)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366)
    at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:349)
    at com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
    at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:98)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:491)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at org.mortbay.jetty.Server.handle(Server.java:326)
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
    at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:938)
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755)
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Caused by: org.datanucleus.exceptions.NucleusUserException: Errors were encountered when initialising the specified MetaData. See the nested exceptions for details
    at org.datanucleus.metadata.MetaDataManagerImpl.initialiseFileMetaDataForUse(MetaDataManagerImpl.java:1343)
    at org.datanucleus.metadata.MetaDataManagerImpl.loadPersistenceUnit(MetaDataManagerImpl.java:1101)
    at org.datanucleus.api.jpa.JPAEntityManagerFactory.initialiseNucleusContext(JPAEntityManagerFactory.java:823)
    at org.datanucleus.api.jpa.JPAEntityManagerFactory.initialise(JPAEntityManagerFactory.java:445)
    at org.datanucleus.api.jpa.JPAEntityManagerFactory.<init>(JPAEntityManagerFactory.java:404)
    at org.datanucleus.api.jpa.PersistenceProviderImpl.createEntityManagerFactory(PersistenceProviderImpl.java:112)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
    at jp.co.nabel.sirius.util.EMF.<clinit>(EMF.java:25)
    ... 51 more
Caused by: org.datanucleus.exceptions.NucleusUserException: Found Meta-Data for class (class added in persistence.xml) but this class is either not enhanced or you have multiple copies of jdo-api.jar in your CLASSPATH!! Make sure all persistable classes are enhanced before running DataNucleus and/or the CLASSPATH is correct.
    at org.datanucleus.metadata.MetaDataManagerImpl.initialiseClassMetaData(MetaDataManagerImpl.java:2707)
    at org.datanucleus.metadata.MetaDataManagerImpl.initialiseFileMetaData(MetaDataManagerImpl.java:2658)
    at org.datanucleus.metadata.MetaDataManagerImpl.initialiseFileMetaDataForUse(MetaDataManagerImpl.java:1332)
    ... 58 more

I installed DataNucleus Eclipse plugin, changed persistence API to JPA in plugin settings, DataNucleus -> Add DataNucleus Support, DataNucleus -> Run Enhancer Tool.

But same error happens.

Please tell me how to solve this error.



Please DO NOT REPLY directly to this email but go to StackOverflow:
http://stackoverflow.com/questions/25926417/enhancement-in-gae-datanucleus-v4

N.F. via StackOverflow

unread,
Sep 19, 2014, 12:39:45 AM9/19/14
to google-appengin...@googlegroups.com

N.F. via StackOverflow

unread,
Sep 19, 2014, 2:14:50 AM9/19/14
to google-appengin...@googlegroups.com

[Update] CLASSPATH is as below(from "java.class.path"). This is when I run my app on local machine. In case google environment, CLASSPATH is null. But same error happens. I have class files in (ProjectTop)\war\WEB-INF\classes\foo\bar\(ClassName).class

 (ProjectTop)\war\WEB-INF\classes
 (ProjectTop)\war\WEB-INF\lib\slim3-1.0.16.jar
 (ProjectTop)\war\WEB-INF\lib\commons-beanutils-1.9.2.jar
 C:\Program Files (x86)\eclipse\plugins\com.google.appengine.eclipse.sdkbundle_1.9.11\appengine-java-sdk-1.9.11\lib\shared\appengine-local-runtime-shared.jar
 C:\Program Files (x86)\eclipse\plugins\com.google.appengine.eclipse.sdkbundle_1.9.11\appengine-java-sdk-1.9.11\lib\shared\el-api.jar
 C:\Program Files (x86)\eclipse\plugins\com.google.appengine.eclipse.sdkbundle_1.9.11\appengine-java-sdk-1.9.11\lib\shared\jsp\repackaged-appengine-ant-1.7.1.jar
 C:\Program Files (x86)\eclipse\plugins\com.google.appengine.eclipse.sdkbundle_1.9.11\appengine-java-sdk-1.9.11\lib\shared\jsp\repackaged-appengine-ant-launcher-1.7.1.jar
 C:\Program Files (x86)\eclipse\plugins\com.google.appengine.eclipse.sdkbundle_1.9.11\appengine-java-sdk-1.9.11\lib\shared\jsp\repackaged-appengine-jasper-6.0.29.jar
 C:\Program Files (x86)\eclipse\plugins\com.google.appengine.eclipse.sdkbundle_1.9.11\appengine-java-sdk-1.9.11\lib\shared\jsp\repackaged-appengine-jasper-el-6.0.29.jar
 C:\Program Files (x86)\eclipse\plugins\com.google.appengine.eclipse.sdkbundle_1.9.11\appengine-java-sdk-1.9.11\lib\shared\jsp\repackaged-appengine-tomcat-juli-6.0.29.jar
 C:\Program Files (x86)\eclipse\plugins\com.google.appengine.eclipse.sdkbundle_1.9.11\appengine-java-sdk-1.9.11\lib\shared\jsp-api.jar
 C:\Program Files (x86)\eclipse\plugins\com.google.appengine.eclipse.sdkbundle_1.9.11\appengine-java-sdk-1.9.11\lib\shared\servlet-api.jar
 C:\Program Files (x86)\eclipse\plugins\com.google.appengine.eclipse.sdkbundle_1.9.11\appengine-java-sdk-1.9.11\lib\appengine-tools-api.jar
 C:\Program Files (x86)\eclipse\plugins\com.google.appengine.eclipse.sdkbundle_1.9.11\appengine-java-sdk-1.9.11\lib\opt\user\appengine-api-labs\v1\appengine-api-labs.jar
 C:\Program Files (x86)\eclipse\plugins\com.google.appengine.eclipse.sdkbundle_1.9.11\appengine-java-sdk-1.9.11\lib\opt\user\appengine-endpoints\v1\appengine-endpoints-deps.jar
 C:\Program Files (x86)\eclipse\plugins\com.google.appengine.eclipse.sdkbundle_1.9.11\appengine-java-sdk-1.9.11\lib\opt\user\appengine-endpoints\v1\appengine-endpoints.jar
 C:\Program Files (x86)\eclipse\plugins\com.google.appengine.eclipse.sdkbundle_1.9.11\appengine-java-sdk-1.9.11\lib\opt\user\jsr107\v1\appengine-jsr107cache-1.9.11.jar
 C:\Program Files (x86)\eclipse\plugins\com.google.appengine.eclipse.sdkbundle_1.9.11\appengine-java-sdk-1.9.11\lib\opt\user\jsr107\v1\jsr107cache-1.1.jar
 C:\Program Files (x86)\eclipse\plugins\com.google.appengine.eclipse.sdkbundle_1.9.11\appengine-java-sdk-1.9.11\lib\user\appengine-api-1.0-sdk-1.9.11.jar
 (ProjectTop)\war\WEB-INF\lib\javax.persistence-2.1.0.jar
 C:\Program Files (x86)\eclipse\plugins\com.google.appengine.eclipse.sdkbundle_1.9.11\appengine-java-sdk-1.9.11\lib\impl\google_sql.jar
 C:\Program Files (x86)\eclipse\plugins\com.google.appengine.eclipse.sdkbundle_1.9.11\appengine-java-sdk-1.9.11\lib\agent\appengine-agent.jar

N.F. via StackOverflow

unread,
Sep 19, 2014, 5:39:55 AM9/19/14
to google-appengin...@googlegroups.com

[Update2] @Billy Frost

Contents of log4j.properties is as below. And added log4j-1.2.14.jar in Properties -> DataNucleus -> Runtime Classpath Entries. Then I run enhancer (DataNucleus -> Run Enhancer Tool). But I can't find datanucleus.log anywhere.

By the way, what I'm trying is "run verbose" in your comment. I think "run verbose" generates datanucleus.log file, and I can check what is wrong in enhancement process. Is this correct?

# LOG4J Configuration
# ===================

# Basic logging goes to "datanucleus.log"
log4j.appender.A1=org.apache.log4j.FileAppender
log4j.appender.A1.File=datanucleus.log
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{HH:mm:ss,SSS} (%t) %-5p [%c] - %m%n

# Categories
# Each category can be set to a "level", and to direct to an appender
log4j.category.DataNucleus=INFO, A1

log4j.category.DataNucleus.JDO=INFO, A1
log4j.category.DataNucleus.Cache=INFO, A1
log4j.category.DataNucleus.MetaData=INFO, A1
log4j.category.DataNucleus.General=INFO, A1
log4j.category.DataNucleus.Transaction=INFO, A1
log4j.category.DataNucleus.Datastore=INFO, A1
log4j.category.DataNucleus.ValueGeneration=INFO, A1

log4j.category.DataNucleus.Enhancer=DEBUG, A1
log4j.category.DataNucleus.SchemaTool=INFO, A1

N.F. via StackOverflow

unread,
Sep 19, 2014, 6:29:56 AM9/19/14
to google-appengin...@googlegroups.com

[Update3] I have added following jars in Windows -> Preference -> DataNucleus -> Runtime Classpath Entries.

  • datanucleus-api-jdo-4.0.2.jar
  • datanucleus-api-jpa-4.0.2.jar
  • datanucleus-core-4.0.2.jar
  • datanucleus-enhancer-3.1.1.jar
  • geronimo-jpa_3.0_spec-1.1.1.jar
  • jdo-api-3.1-rc1.jar

When I placed these files in C:\DataNucleus, it looks working fine. But when placed in \\networkdrive\(multibyte folder name), looks not working.

The problem in this question (not enhance error) has gone, but I'm facing another problem similar to my first question. I will update that page.

Reply all
Reply to author
Forward
0 new messages