Java GAE+;弹簧&x2B;JDO-PersistenceManagerFactory初始化错误
我有一个标准的PMF等级:Java GAE+;弹簧&x2B;JDO-PersistenceManagerFactory初始化错误,java,google-app-engine,log4j,jdo,Java,Google App Engine,Log4j,Jdo,我有一个标准的PMF等级: public class PMF { private static final PersistenceManagerFactory persistenceManagerFactory = JDOHelper .getPersistenceManagerFactory("transactions-optional"); private PMF() { } public static PersistenceManage
public class PMF {
private static final PersistenceManagerFactory persistenceManagerFactory = JDOHelper
.getPersistenceManagerFactory("transactions-optional");
private PMF() {
}
public static PersistenceManagerFactory get() {
return persistenceManagerFactory;
}
}
在本地appengine服务器上运行,
第一次调用PMF.get()时,出现以下异常:
javax.jdo.JDOFatalInternalException: Unexpected exception caught.
at javax.jdo.JDOHelper.invokeGetPersistenceManagerFactoryOnImplementation(JDOHelper.java:1193)
at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:808)
at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:1093)
at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:919)
at com.myapp.framework.PMF.<clinit>(PMF.java:17)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
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)
...
NestedThrowablesStackTrace:
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:115)
at javax.jdo.JDOHelper$16.run(JDOHelper.java:1965)
at java.security.AccessController.doPrivileged(Native Method)
at javax.jdo.JDOHelper.invoke(JDOHelper.java:1960)
at javax.jdo.JDOHelper.invokeGetPersistenceManagerFactoryOnImplementation(JDOHelper.java:1166)
...
Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.apache.log4j.LogManager
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
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 org.apache.log4j.Logger.getLogger(Logger.java:104)
at org.datanucleus.util.Log4JLogger.<init>(Log4JLogger.java:49)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.google.appengine.tools.development.agent.runtime.Runtime.newInstance_(Runtime.java:127)
at com.google.appengine.tools.development.agent.runtime.Runtime.newInstance(Runtime.java:135)
at org.datanucleus.util.NucleusLogger.getLoggerInstance(NucleusLogger.java:140)
at org.datanucleus.util.NucleusLogger.<clinit>(NucleusLogger.java:106)
at org.datanucleus.plugin.PluginRegistryFactory.newInstance(PluginRegistryFactory.java:104)
at org.datanucleus.plugin.PluginRegistryFactory.newPluginRegistry(PluginRegistryFactory.java:63)
at org.datanucleus.plugin.PluginManager.<init>(PluginManager.java:61)
at org.datanucleus.plugin.PluginManager.createPluginManager(PluginManager.java:427)
at org.datanucleus.NucleusContext.<init>(NucleusContext.java:224)
at org.datanucleus.NucleusContext.<init>(NucleusContext.java:204)
at org.datanucleus.NucleusContext.<init>(NucleusContext.java:182)
at org.datanucleus.api.jdo.JDOPersistenceManagerFactory.<init>(JDOPersistenceManagerFactory.java:409)
at org.datanucleus.api.jdo.JDOPersistenceManagerFactory.createPersistenceManagerFactory(JDOPersistenceManagerFactory.java:294)
at org.datanucleus.api.jdo.JDOPersistenceManagerFactory.getPersistenceManagerFactory(JDOPersistenceManagerFactory.java:195)
... 82 more
“我的库”文件夹中包含的库包括:
-sdk中包含的所有GAE库都使用EclipseGoogle插件
-Spring MVC、Jackson和Aspectj包括使用常春藤和常春藤eclipse插件:
<dependencies>
<dependency org="org.springframework" name="spring-webmvc" rev="3.2.0.RELEASE" />
<dependency org="org.codehaus.jackson" name="jackson-mapper-asl" rev="1.9.11" />
<dependency org="org.aspectj" name="aspectjrt" rev="1.7.1" />
<dependency org="org.aspectj" name="aspectjweaver" rev="1.7.1" />
</dependencies>
我真的不明白为什么它会失败,因为通常log4j是由GAE支持的。我从spring依赖项中排除了log4j,我不再得到错误。 在我的常春藤档案中:
<dependency org="org.springframework" name="spring-webmvc" rev="3.2.0.RELEASE">
<exclude org="log4j" module="log4j" />
</dependency>
看起来您没有将Log4j jar添加到项目中,或者这个jar没有上传到GAE服务器。事实上,我的lib文件夹中有一个来自spring dependencies的Log4j-1.2.14.jar,它很好地复制到了GAE服务器,但GAE似乎阻止了类加载。当我从spring依赖项中排除log4j时,我不再得到错误。使用此解决方案,我可以松一些日志吗?
<dependency org="org.springframework" name="spring-webmvc" rev="3.2.0.RELEASE">
<exclude org="log4j" module="log4j" />
</dependency>