没有类'com.appspot.<projectname> .model.News'已注册

use*_*875 2 java eclipse google-app-engine objectify

我在创建新闻文章时遇到问题:CreateNewsServlet.java我使用Objectify和GAE.我有一个RegisterServlet.java可以工作!但是当我尝试添加新闻文章时,我得到以下堆栈:

mei 08, 2014 10:29:45 AM com.google.apphosting.utils.jetty.JettyLogger warn
WARNING: /CreateNewsServlet.do
java.lang.IllegalArgumentException: No class 'com.appspot.darkening.model.News' was registered
at com.googlecode.objectify.ObjectifyFactory.getMetadata(ObjectifyFactory.java:247)
at com.googlecode.objectify.ObjectifyFactory.getMetadataForEntity(ObjectifyFactory.java:273)
at com.googlecode.objectify.impl.AsyncObjectifyImpl.put(AsyncObjectifyImpl.java:261)
at com.googlecode.objectify.impl.AsyncObjectifyImpl.put(AsyncObjectifyImpl.java:239)
at com.googlecode.objectify.impl.ObjectifyImpl.put(ObjectifyImpl.java:135)
at com.appspot.darkening.model.service.NewsOfyDAOImpl.createNews(NewsOfyDAOImpl.java:29)
at com.appspot.darkening.server.CreateNewsServlet.doPost(CreateNewsServlet.java:107)
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:123)
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:368)
at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:351)
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:97)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:485)
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)
Run Code Online (Sandbox Code Playgroud)

我的RegisterServlet和DAO类.

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.appspot.darkening.model.User;
import com.googlecode.objectify.Key;
import com.googlecode.objectify.Objectify;
import com.googlecode.objectify.ObjectifyService;

public class UserOfyDAOImpl implements UserOfyDAO {
   private Objectify ofy;

public UserOfyDAOImpl(){
      ofy = ObjectifyService.begin();

}
public void deleteUser(User u) {
      //TODO delete user ofy
       ofy.delete((u));
   }


   public void createUser(String us, String pw, String nm, int sec){
       ofy.put(new User(us, pw, nm, sec));


   }
Run Code Online (Sandbox Code Playgroud)

//

import java.io.IOException;
import java.util.ArrayList;
import java.util.logging.Logger;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;




import com.appspot.darkening.model.User;
import com.appspot.darkening.model.service.UserOfyDAOImpl;
import com.googlecode.objectify.Objectify;
import com.googlecode.objectify.ObjectifyService;


public class RegisterServlet extends HttpServlet {
private static final Logger log = Logger.getLogger(UserContextListener.class.getName());
protected void doPost( HttpServletRequest req, HttpServletResponse resp) 
        throws ServletException, IOException{


    boolean succes = false;
    String name = req.getParameter("name");
    String username = req.getParameter("username");
    String pass = req.getParameter("password1");
    int seclvl = Integer.parseInt(req.getParameter("seclvl"));

    ArrayList<User> allUsers = new ArrayList<User>();
    allUsers = (ArrayList<User>) getServletContext().getAttribute("users");
    System.out.println(allUsers);
    if(name != null &&username != null && pass != null){


        User u = new User(name,username, pass, seclvl);
        UserOfyDAOImpl uop = new UserOfyDAOImpl();
        for(User ul : uop.getAllUsers()){
            if(ul.getUsername().equals(username) && ul.getPassword().equals(pass)){
                log.info("gebruiker bestaat al");
            }
            else{
                uop.createUser(name, username, pass, seclvl);
                req.setAttribute("msgs", "Er is een leerling aangemaakt");
                succes = true;
                log.info("gebruiker:"+ uop+" is aangemaakt.");
            }






    }


    RequestDispatcher rd = null;
    if(succes){
        req.setAttribute("msgs", "Succes");
        rd = req.getRequestDispatcher("login.jsp");
    }
    else{
        rd = req.getRequestDispatcher("register.jsp");
    }
    rd.forward(req, resp);
}
}
Run Code Online (Sandbox Code Playgroud)

}

我的CreateNewsServlet和DAO类.

package com.appspot.darkening.model.service;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.appspot.darkening.model.News;
import com.googlecode.objectify.Key;
import com.googlecode.objectify.Objectify;
import com.googlecode.objectify.ObjectifyService;

public class NewsOfyDAOImpl implements NewsOfyDAO {
   private Objectify ofy;

public NewsOfyDAOImpl(){
      ofy = ObjectifyService.begin();

}
public void deleteNews(News u) {
      //TODO delete News ofy
       ofy.delete((u));
   }

   public void createNews(String us, String pw,  int sec, String au, String da){
       ofy.put(new News(us, pw, sec, au, da));
   }

package com.appspot.darkening.server;

import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.logging.Logger;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.appspot.darkening.model.News;
import com.appspot.darkening.model.User;
import com.appspot.darkening.model.service.NewsOfyDAOImpl;
import com.appspot.darkening.model.service.UserOfyDAOImpl;
import com.googlecode.objectify.Objectify;
import com.googlecode.objectify.ObjectifyService;


public class CreateNewsServlet extends HttpServlet {
/**
 * 
 */
private static final long serialVersionUID = 1L;
private static final Logger log = Logger.getLogger(UserContextListener.class.getName());

public void doGet(HttpServletRequest request,  HttpServletResponse response) throws IOException,                                                  ServletException {  
doPost(request, response);  } 

protected void doPost( HttpServletRequest req, HttpServletResponse resp) 
        throws ServletException, IOException{

     boolean succes = false;
     String title = req.getParameter("title");
     String description = req.getParameter("descr");
     String securityLevel = req.getParameter("seclvl");
     int seclvl = 1;
     seclvl = Integer.parseInt(securityLevel);
     String author = req.getParameter("author");
    // Create an instance of SimpleDateFormat used for formatting 
    // the string representation of date (month/day/year)
    DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");

    // Get the date today using Calendar object.
    Date today = Calendar.getInstance().getTime();        
    // Using DateFormat format method we can create a string 
    // representation of a date with the defined format.
     String date = df.format(today);

     System.out.println(title);
     System.out.println(description);
     System.out.println(seclvl);
     System.out.println(author);
     System.out.println(today); 
     System.out.println(date);  
     ArrayList<User> allUsers = new ArrayList<User>();
        allUsers = (ArrayList<User>) getServletContext().getAttribute("users");
        UserOfyDAOImpl n = new UserOfyDAOImpl();

    if(title != null && description != null && seclvl != 0 && author != null && date !=null){

        News u = new News(title,description, seclvl, author, date);
        NewsOfyDAOImpl uop = new NewsOfyDAOImpl();

                uop.createNews(title, description, seclvl, author, date);
                req.setAttribute("msgs", "Er is een leerling aangemaakt");
                succes = true;
                log.info("gebruiker:"+ uop+" is aangemaakt.");

    }

    RequestDispatcher rd = null;
    if(succes){
        req.setAttribute("msgs", "Succes");
        rd = req.getRequestDispatcher("index-goede.jsp");
    }
    else{
        rd = req.getRequestDispatcher("CreateNews.jsp");
    }
    rd.forward(req, resp);

}
}
Run Code Online (Sandbox Code Playgroud)

任何帮助或提示将不胜感激!

Mos*_*ham 5

您没有注册要与objectify一起使用的实体.您必须为应用程序启动注册一次(不是请求)

看这里:

https://code.google.com/p/objectify-appengine/wiki/BestPractices#Registering_Your_Entities