Не удалось инициализировать класс com.sample.PMF (механизм приложений Google) - PullRequest
1 голос
/ 29 июля 2010

Я получаю эту ошибку при попытке сохранить что-либо в Datastore. Я пытался искать, но ничего не получил. Это код, в котором я сохраняю данные в хранилище:

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

Любая информация по этому вопросу приветствуется!

РЕДАКТИРОВАТЬ : добавление трассировки стека:

at 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) в org.apache.jasper.servlet.JspServlet.service (JspServlet.java:236) на com.google.appengine.tools.development.PrivilegedJspServlet.access $ 101 (PrivilegedJspServlet.java:23) на com.google.appengine.tools.development.PrivilegedJspServlet $ 2.run (PrivilegedJspServlet.java:59) at java.security.AccessController.doPrivileged (собственный метод) на com.google.appengine.tools.development.PrivilegedJspServlet.service (PrivilegedJspServlet.java:57) на javax.servlet.http.HttpServlet.service (HttpServlet.java:806) в org.mortbay.jetty.servlet.ServletHolder.handle (ServletHolder.java:487) на org.mortbay.jetty.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) на org.mortbay.jetty.servlet.Dispatcher.forward (Dispatcher.java:268) на org.mortbay.jetty.servlet.Dispatcher.forward (Dispatcher.java:126) на com.google.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) в org.mortbay.jetty.handler.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)

Ответы [ 2 ]

1 голос
/ 29 июля 2010

Трассировка стека мало чем помогла, но одной из причин не инициализации PersistenceManagerFactory является то, что она не смогла найти единицу постоянства, указанную вами в методе JDOHelper.getPersistenceManagerFactory(String).

например, если ваши PMF get() метод выглядит следующим образом:

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>
0 голосов
/ 06 августа 2010

Решено: я вызывал приведенный выше код из статического метода, теперь я сделал его методом экземпляра, и он работал.но все еще в замешательстве?

...