I'm facing a problem when using a slightly changed "JPA Controller Class" generated out of my entity class by NetBeans 6.8. In this JPA Controller Class I'm using the EMF (Entity Manager Factory) as described here: http://code.google.com/appengine/docs/java/datastore/usingjpa.html#Getting_an_EntityManager_Instance
I'm using AppEngine-Java-SDK-1.3.0. Why do I get the "is not that of an entity but needs to be for this operation" exception: ============================================== public class MessageJpaController { private EntityManagerFactory emf = null; public MessageJpaController() { emf = EMF.get(); } public EntityManager getEntityManager() { return emf.createEntityManager(); } public void create(Message message) { EntityManager em = null; try { em = getEntityManager(); em.getTransaction().begin(); em.persist(message); em.getTransaction().commit(); } catch (Exception ex) { throw new PersistenceException(ex); } finally { if (em != null) { em.close(); } } } ... } ============================================== @Entity public class Message implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String message; @Temporal(javax.persistence.TemporalType.TIMESTAMP) private Date dateTime; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public Date getDateTime() { return dateTime; } public void setDateTime(Date dateTime) { this.dateTime = dateTime; } @Override public boolean equals(Object obj) { if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } final Message other = (Message) obj; if (this.id != other.id && (this.id == null || !this.id.equals (other.id))) { return false; } return true; } @Override public int hashCode() { int hash = 7; hash = 37 * hash + (this.id != null ? this.id.hashCode() : 0); return hash; } } ============================================== [java] java.lang.IllegalArgumentException: Type ("de.alteskind.appengine.jpa.Message") is not that of an entity but needs to be for this operation [java] at org.datanucleus.jpa.EntityManagerImpl.assertEntity (EntityManagerImpl.java:888) [java] at org.datanucleus.jpa.EntityManagerImpl.persist (EntityManagerImpl.java:385) [java] at de.alteskind.appengine.jpa.MessageJpaController.create (MessageJpaController.java:28) [java] at de.alteskind.appengine.jsf.MessageView.createMessage(MessageView.java: 36) [java] at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) [java] at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) [java] at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) [java] at java.lang.reflect.Method.invoke(Method.java: 597) [java] at com.google.appengine.tools.development.agent.runtime.Runtime.invoke (Runtime.java:100) [java] at com.sun.el.parser.AstValue.invoke(AstValue.java: 187) [java] at com.sun.el.MethodExpressionImpl.invoke (MethodExpressionImpl.java:297) [java] at com.sun.faces.facelets.el.TagMethodExpression.invoke (TagMethodExpression.java:98) [java] at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke (MethodBindingMethodExpressionAdapter.java:88) [java] at com.sun.faces.application.ActionListenerImpl.processAction (ActionListenerImpl.java:102) [java] at javax.faces.component.UICommand.broadcast (UICommand.java:315) [java] at javax.faces.component.UIViewRoot.broadcastEvents (UIViewRoot.java:775) [java] at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java: 1267) [java] at com.sun.faces.lifecycle.InvokeApplicationPhase.execute (InvokeApplicationPhase.java:82) [java] at com.sun.faces.lifecycle.Phase.doPhase (Phase.java:101) [java] at com.sun.faces.lifecycle.LifecycleImpl.execute (LifecycleImpl.java:118) [java] at javax.faces.webapp.FacesServlet.service (FacesServlet.java:312) [java] at org.mortbay.jetty.servlet.ServletHolder.handle (ServletHolder.java:487) [java] at org.mortbay.jetty.servlet.ServletHandler $CachedChain.doFilter(ServletHandler.java:1093) [java] at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter (ServeBlobFilter.java:51) [java] at org.mortbay.jetty.servlet.ServletHandler $CachedChain.doFilter(ServletHandler.java:1084) [java] at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter (TransactionCleanupFilter.java:43) [java] at org.mortbay.jetty.servlet.ServletHandler $CachedChain.doFilter(ServletHandler.java:1084) [java] at com.google.appengine.tools.development.StaticFileFilter.doFilter (StaticFileFilter.java:121) [java] at org.mortbay.jetty.servlet.ServletHandler $CachedChain.doFilter(ServletHandler.java:1084) [java] at org.mortbay.jetty.servlet.ServletHandler.handle (ServletHandler.java:360) [java] at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java: 216) [java] at org.mortbay.jetty.servlet.SessionHandler.handle (SessionHandler.java:181) [java] at org.mortbay.jetty.handler.ContextHandler.handle (ContextHandler.java:712) [java] at org.mortbay.jetty.webapp.WebAppContext.handle (WebAppContext.java:405) [java] at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle (DevAppEngineWebAppContext.java:70) [java] at org.mortbay.jetty.handler.HandlerWrapper.handle (HandlerWrapper.java:139) [java] at com.google.appengine.tools.development.JettyContainerService $ApiProxyHandler.handle(JettyContainerService.java:352) [java] at org.mortbay.jetty.handler.HandlerWrapper.handle (HandlerWrapper.java:139) [java] at org.mortbay.jetty.Server.handle(Server.java: 313) [java] at org.mortbay.jetty.HttpConnection.handleRequest (HttpConnection.java:506) [java] at org.mortbay.jetty.HttpConnection $RequestHandler.content(HttpConnection.java:844) [java] at org.mortbay.jetty.HttpParser.parseNext (HttpParser.java:644) [java] at org.mortbay.jetty.HttpParser.parseAvailable (HttpParser.java:211) [java] at org.mortbay.jetty.HttpConnection.handle (HttpConnection.java:381) [java] at org.mortbay.io.nio.SelectChannelEndPoint.run (SelectChannelEndPoint.java:396) [java] at org.mortbay.thread.BoundedThreadPool $PoolThread.run(BoundedThreadPool.java:442) [java] Caused by: org.datanucleus.exceptions.NoPersistenceInformationException: The class "de.alteskind.appengine.jpa.Message" is required to be persistable yet no Meta-Data/Annotations can be found for this class. Please check that the Meta-Data/annotations is defined in a valid file location. [java] at org.datanucleus.ObjectManagerImpl.assertClassPersistable (ObjectManagerImpl.java:3894) [java] at org.datanucleus.jpa.EntityManagerImpl.assertEntity (EntityManagerImpl.java:884) [java] ... 45 more
-- You received this message because you are subscribed to the Google Groups "Google App Engine for Java" group. To post to this group, send email to google-appengine-j...@googlegroups.com. To unsubscribe from this group, send email to google-appengine-java+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine-java?hl=en.