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.
[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
[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
[Update3] I have added following jars in Windows -> Preference -> DataNucleus -> Runtime Classpath Entries.
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.