1

尝试将某些内容保存到 Datastore 时出现此错误。我试图搜索但没有得到任何东西。这是我保存到数据存储区的代码:

    Student temp = null;
    PersistenceManager pm = PMF.get().getPersistenceManager();
    try {
        Student stu = new Student(name);
        temp = pm.makePersistent(stu);
    } finally {
        pm.close();
    }
    return temp;

任何有关这方面的信息表示赞赏!

编辑:添加堆栈跟踪:

在 com.sample.dbops.DBManager.saveStudent(DBManager.java:18) 在 org.apache.jsp.index_jsp._jspService(index_jsp.java:64) 在 org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java :94) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:806) 在 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324) 在 org.apache.jasper.servlet.JspServlet。 serviceJspFile(JspServlet.java:292) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236) at com.google.appengine.tools.development.PrivilegedJspServlet.access$101(PrivilegedJspServlet.java:23) at com.google.appengine.tools.development.PrivilegedJspServlet$2.run(PrivilegedJspServlet.java:59) at java.security.AccessController.doPrivileged(Native Method) at com.google.appengine.tools.development.PrivilegedJspServlet。org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) org.mortbay.jetty 的 javax.servlet.http.HttpServlet.service(HttpServlet.java:806) 的服务(PrivilegedJspServlet.java:57) .servlet.ServletHandler.handle(ServletHandler.java:362) 在 org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 在 org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181 ) 在 org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712) 在 org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) 在 com.google.apphosting.utils.jetty。 DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:54) at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:268) at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126) at com 。谷歌。appengine.tools.development.StaticFileUtils.serveWelcomeFileAsForward(StaticFileUtils.java:80) 在 com.google.appengine.tools.development.LocalResourceFileServlet.maybeServeWelcomeFile(LocalResourceFileServlet.java:251) 在 com.google.appengine.tools.development.LocalResourceFileServlet。 doGet(LocalResourceFileServlet.java:117) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:693) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:806) 在 org.mortbay.jetty.servlet .ServletHolder.handle(ServletHolder.java:487) 在 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1093) 在 com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java :43) 在 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) 在 com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:124) 在 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) 在 org.mortbay.jetty .servlet.ServletHandler.handle(ServletHandler.java:360) 在 org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 在 org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181 ) 在 org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712) 在 org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) 在 com.google.apphosting.utils.jetty。 DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:54) 在 org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139) 在 com.google.appengine.tools.development。JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:313) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139) at org.mortbay.jetty.Server.handle(Server.java:313) at org org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:506) 在 org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:830) 在 org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514 ) 在 org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) 在 org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381) 在 org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint. java:396) 在 org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)HandlerWrapper.handle(HandlerWrapper.java:139) 在 org.mortbay.jetty.Server.handle(Server.java:313) 在 org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:506) 在 org.mortbay.jetty .HttpConnection$RequestHandler.headerComplete(HttpConnection.java:830) 在 org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514) 在 org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) 在 org. mortbay.jetty.HttpConnection.handle(HttpConnection.java:381) 在 org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:396) 在 org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java: 442)HandlerWrapper.handle(HandlerWrapper.java:139) 在 org.mortbay.jetty.Server.handle(Server.java:313) 在 org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:506) 在 org.mortbay.jetty .HttpConnection$RequestHandler.headerComplete(HttpConnection.java:830) 在 org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514) 在 org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) 在 org. mortbay.jetty.HttpConnection.handle(HttpConnection.java:381) 在 org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:396) 在 org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java: 442)org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514) 的 HttpConnection$RequestHandler.headerComplete(HttpConnection.java:830) org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) 的 org.mortbay .jetty.HttpConnection.handle(HttpConnection.java:381) 在 org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:396) 在 org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442 )org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514) 的 HttpConnection$RequestHandler.headerComplete(HttpConnection.java:830) org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) 的 org.mortbay .jetty.HttpConnection.handle(HttpConnection.java:381) 在 org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:396) 在 org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442 )BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)

4

2 回答 2

1

堆栈跟踪没有太大帮助,但不初始化 PersistenceManagerFactory 的一个原因是它找不到您在JDOHelper.getPersistenceManagerFactory(String)方法中指定的持久性单元。

例如,如果您的 PMFget()方法如下所示:

public static synchronized PersistenceManagerFactory get() {
    if(pmfInstance == null)  {
        pmfInstance = JDOHelper.getPersistenceManagerFactory(
              "transactions-optional");
    }
    return pmfInstance;
}

然后,您的类路径中必须有一个 jdoconfig.xml(例如 WEB-INF/classes),它定义如下持久性单元:(与您在 getPersistenceManagerFactory 中使用的名称相同)。在这种情况下,“交易-可选”

    <persistence-manager-factory name="transactions-optional">
        <property name="javax.jdo.PersistenceManagerFactoryClass" value="org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManagerFactory"/>
        <property name="javax.jdo.option.ConnectionURL" value="appengine"/>
        <property name="javax.jdo.option.NontransactionalRead" value="true"/>
        <property name="javax.jdo.option.NontransactionalWrite" value="false"/>
    </persistence-manager-factory>
于 2010-07-29T16:07:24.630 回答
0

已解决:我从静态方法调用上述代码,现在我将其设为实例方法并且它可以工作。但仍然感到困惑?

于 2010-08-05T20:43:25.043 回答