Your code looks fine. I just copied it over to a non-Spring context and it worked without a hitch. Did you see this error before upgrading your SDK? Are you seeing it in both the local development server and production? If you start a new project and copy over your domain and DAO classes, does it work?
- Jason On Fri, Sep 11, 2009 at 2:04 PM, cancunmods <[email protected]> wrote: > > Hi, I am using spring in my application and the pmf is a singleton, I > put it in the class just to make sure it is not a spring issue. I am > still getting the error but in my case nothing is persisted. I also > added the @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) > line and no dice my SDK version is the newest 1.2.5. The following is > the spring code from which I am calling the saveUser method I had > posted before. Any help would be greatly appreciaed, thanks. > > package subasta.web.users; > > import org.springframework.beans.propertyeditors.StringTrimmerEditor; > import org.springframework.web.bind.ServletRequestDataBinder; > import org.springframework.web.servlet.mvc.SimpleFormController; > import org.springframework.web.servlet.ModelAndView; > import org.springframework.web.servlet.view.RedirectView; > import org.springframework.beans.factory.annotation.Autowired; > > import subasta.domain.users.User; > > import javax.servlet.ServletException; > import javax.servlet.http.HttpServletRequest; > > import java.util.logging.Logger; > > import subasta.service.users.GuardaUsuario; > import subasta.repository.users.UserDAO; > > public class RegisterController extends SimpleFormController { > /** Logger for this class and subclasses */ > private static final Logger log = Logger.getLogger > (RegisterController.class > .getName()); > > private UserDAO userDao; > > public void setUserDao(UserDAO userDao) { > this.userDao = userDao; > } > > @Override > public ModelAndView onSubmit(Object command) throws ServletException > { > > String nombre = ((GuardaUsuario) command).getNombre(); > log.info("Guardando usuario " + nombre + "."); > > User user = new User(nombre); > userDao.saveUser(user); > > > log.info("returning from RegisterController view to " > + getSuccessView()); > > > > return new ModelAndView(new RedirectView(getSuccessView())); > } > > > > /* > * This was added because after uploading to GAE I was getting an > exception, it is > * actually a pretty neat addition, taken from its javadoc: > * Property editor that trims Strings. Optionally allows > transforming > an empty string into a null value. Needs to be explictly registered, > e.g. for command binding. > * @see > org.springframework.web.servlet.mvc.BaseCommandController#initBinder > (javax.servlet.http.HttpServletRequest, > org.springframework.web.bind.ServletRequestDataBinder) > */ > @Override > protected void initBinder(HttpServletRequest request, > ServletRequestDataBinder binder) throws Exception { > binder.registerCustomEditor(String.class, > new StringTrimmerEditor(false)); > } > } > > > On Sep 11, 3:31 pm, Jeff <[email protected]> wrote: > > I've been seeing the same thing, and also only on the first access > > after application start. It happens consistently for me with my first > > call to either getObjectById makePersistent or makePersistentAll. In > > my attempts to search the web for info, I ran across a snippet of code > > that included the specified error message text. A comment in that > > source said something like "this is a harmless exception, we should > > figure out a way to suppress it." Yeah, I was annoyed at having spent > > a bunch of time thinking this was the source of an issue when it was > > only a red herring. Sorry I don't remember the url to that code > > snippet but searching for pieces of the error message from the > > beginning of your stack trace should eventually find it. > > > > I'm currently choosing to ignore the exception and everything appears > > to be working for me. > > > > On Sep 11, 12:01 pm, "Jason (Google)" <[email protected]> wrote: > > > > > > > > > You shouldn't need the @Persistent(valueStrategy = > > > IdGeneratorStrategy.IDENTITY) line since you're using a key name and > not a > > > String-encoded ID. > > > > > The only thing that looks suspicious is your pmf object. The best > practice > > > is to use a PersistenceManagerFactory singleton as documented athttp:// > code.google.com/appengine/docs/java/datastore/usingjdo.html#Ge..., > > > but I would expect to see exceptions with subsequent calls to saveUser, > not > > > the first call. All the same, I recommend you try this to see if it > helps, > > > and please also let me know which version of the SDK you're using. > > > > > - Jason > > > > > On Thu, Sep 10, 2009 at 1:09 AM, bysse <[email protected]> wrote: > > > > > > As expected, this has nothing to do with wicket or sessions, just to > > > > be sure i've checked those. If fact, all entities get persisted as > > > > they should and the exception is caught somewhere in makePersistent. > > > > So as far as i know, no harm is done(?) > > > > So i think i'll just ignore this stacktrace and continue as usual. > > > > > > On Sep 10, 12:22 am, bysse <[email protected]> wrote: > > > > > I also get this exception, but only on the first call to > > > > > makePersistent. > > > > > > > First Call: > > > > > Exception > > > > > Store objects ? > > > > > Later Calls > > > > > Ok > > > > > Stores objects > > > > > > > Can't think of anything that causes this. I'm using Wicket, how > about > > > > > you? > > > > > > > /Erik > > > > > > > On Sep 8, 7:48 pm, cancunmods <[email protected]> wrote: > > > > > > > > I am having trouble saving an object on google app engine. Here > is my > > > > > > POJO class: > > > > > > > > package subasta.domain.users; > > > > > > > > import javax.jdo.annotations.IdentityType; > > > > > > import javax.jdo.annotations.PersistenceCapable; > > > > > > import javax.jdo.annotations.PrimaryKey; > > > > > > import javax.jdo.annotations.Persistent; > > > > > > > > @PersistenceCapable(identityType = IdentityType.APPLICATION) > > > > > > public class User { > > > > > > @PrimaryKey > > > > > > @Persistent > > > > > > private String nombre; > > > > > > > > public User(String nombre){ > > > > > > this.nombre = nombre; > > > > > > } > > > > > > > > public String getNombre() { > > > > > > return nombre; > > > > > > } > > > > > > > > public void setNombre(String nombre) { > > > > > > this.nombre = nombre; > > > > > > } > > > > > > > > } > > > > > > > > Here is my JDO Code.: > > > > > > > > package subasta.repository.users; > > > > > > > > import java.util.Set; > > > > > > import java.util.logging.Logger; > > > > > > > > import javax.jdo.JDOHelper; > > > > > > import javax.jdo.PersistenceManagerFactory; > > > > > > import javax.jdo.PersistenceManager; > > > > > > > > import subasta.domain.users.User; > > > > > > > > public class JDOUserDAO implements UserDAO{ > > > > > > /** Logger for this class and subclasses */ > > > > > > private static final Logger log = > Logger.getLogger(UserDAO.class > > > > > > .getName()); > > > > > > > > private static final PersistenceManagerFactory pmf = > > > > > > JDOHelper.getPersistenceManagerFactory("transactions- > > > > > > optional"); > > > > > > > > //PersistenceManagerFactory pmf; > > > > > > > > //public void setPmf(PersistenceManagerFactory pmf) { > > > > > > //this.pmf = pmf; > > > > > > //} > > > > > > > > public void saveUser(User user){ > > > > > > PersistenceManager pm = pmf.getPersistenceManager(); > > > > > > try{ > > > > > > pm.makePersistent(user); > > > > > > }finally { > > > > > > pm.close(); > > > > > > } > > > > > > } > > > > > > > > @SuppressWarnings("unchecked") > > > > > > public Set<User> getUsers(){ > > > > > > PersistenceManager pm = pmf.getPersistenceManager(); > > > > > > Set<User> users = (Set<User>)pm.getManagedObjects > > > > > > (User.class); > > > > > > pm.close(); > > > > > > return users; > > > > > > } > > > > > > > > } > > > > > > > > Things go wrong when making the call tomakePersistent. The > exception > > > > > > is: > > > > > > > > 08-sep-2009 16:51:35 > > > > > > > com.google.appengine.repackaged.com.google.common.base.FinalizableReference > Queue > > > > > > <init> > > > > > > INFO: Failed to start reference finalizer thread. Reference > cleanup > > > > > > will only occur when new references are created. > > > > > > 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.repackaged.com.google.common.base.FinalizableReference > Queue.<init> > > > > > > (FinalizableReferenceQueue.java:124) > > > > > > at > > > > > > > com.google.appengine.repackaged.com.google.common.labs.misc.InterningPools > > > > > > $WeakInterningPool.<clinit>(InterningPools.java:104) > > > > > > at > > > > > > > com.google.appengine.repackaged.com.google.common.labs.misc.InterningPools. > newWeakInterningPool > > > > > > (InterningPools.java:48) > > > > > > at > > > > > > > com.google.appengine.repackaged.com.google.io.protocol.ProtocolSupport.<cli > nit> > > > > > > (ProtocolSupport.java:55) > > > > > > at com.google.apphosting.api.DatastorePb$PutRequest.freeze > > > > > > (DatastorePb.java:8452) > > > > > > at com.google.apphosting.api.DatastorePb$PutRequest$1.<init> > > > > > > (DatastorePb.java:8367) > > > > > > at com.google.apphosting.api.DatastorePb$PutRequest.<clinit> > > > > > > (DatastorePb.java:8364) > > > > > > at > com.google.appengine.api.datastore.DatastoreServiceImpl.put > > > > > > (DatastoreServiceImpl.java:152) > > > > > > at > com.google.appengine.api.datastore.DatastoreServiceImpl.put > > > > > > (DatastoreServiceImpl.java:138) > > > > > > at > com.google.appengine.api.datastore.DatastoreServiceImpl.put > > > > > > (DatastoreServiceImpl.java:130) > > > > > > at > > > > > > > org.datanucleus.store.appengine.RuntimeExceptionWrappingDatastoreService.pu > t > > > > > > (RuntimeExceptionWrappingDatastoreService.java:93) > > > > > > at > org.datanucleus.store.appengine.DatastorePersistenceHandler.put > > > > > > (DatastorePersistenceHandler.java:165) > > > > > > at > org.datanucleus.store.appengine.DatastorePersistenceHandler.put > > > > > > (DatastorePersistenceHandler.java:112) > > > > > > at > > > > > > > org.datanucleus.store.appengine.DatastorePersistenceHandler.insertObjects > > > > > > (DatastorePersistenceHandler.java:239) > > > > > > at > > > > > > > org.datanucleus.store.appengine.DatastorePersistenceHandler.insertObject > > > > > > (DatastorePersistenceHandler.java:225) > > > > > > at > org.datanucleus.state.JDOStateManagerImpl.internalMakePersistent > > > > > > (JDOStateManagerImpl.java:3185) > > > > > > at org.datanucleus.state.JDOStateManagerImpl.makePersistent > > > > > > (JDOStateManagerImpl.java:3161) > > > > > > at org.datanucleus.ObjectManagerImpl.persistObjectInternal > > > > > > (ObjectManagerImpl.java:1298) > > > > > > at org.datanucleus.ObjectManagerImpl.persistObject > > > > > > (ObjectManagerImpl.java:1175) > > > > > > at > org.datanucleus.jdo.JDOPersistenceManager.jdoMakePersistent > > > > > > (JDOPersistenceManager.java:669) > > > > > > at org.datanucleus.jdo.JDOPersistenceManager.makePersistent > > > > > > (JDOPersistenceManager.java:694) > > > > > > at > subasta.repository.users.JDOUserDAO.saveUser(JDOUserDAO.java: > > > > > > 29) > > > > > > at subasta.web.users.RegisterController.onSubmit > > > > > > (RegisterController.java:38) > > > > > > at > > > > > > org.springframework.web.servlet.mvc.SimpleFormController.onSubmit > > > > > > (SimpleFormController.java:409) > > > > > > at > > > > > > org.springframework.web.servlet.mvc.SimpleFormController.onSubmit > > > > > > (SimpleFormController.java:381) > > > > > > at > > > > > > > org.springframework.web.servlet.mvc.SimpleFormController.processFormSubmiss > ion > > > > > > (SimpleFormController.java:267) > > > > > > at > > > > > > > org.springframework.web.servlet.mvc.AbstractFormController.handleRequestInt > ernal > > > > > > (AbstractFormController.java:265) > > > > > > at > > > > > > > org.springframework.web.servlet.mvc.AbstractController.handleRequest > > > > > > (AbstractController.java:153) > > > > > > at > > > > > > > org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle > > > > > > (SimpleControllerHandlerAdapter.java:48) > > > > > > at > org.springframework.web.servlet.DispatcherServlet.doDispatch > > > > > > (DispatcherServlet.java:875) > > > > > > at > org.springframework.web.servlet.DispatcherServlet.doService > > > > > > (DispatcherServlet.java:807) > > > > > > at > org.springframework.web.servlet.FrameworkServlet.processRequest > > > > > > (FrameworkServlet.java:571) > > > > > > at org.springframework.web.servlet.FrameworkServlet.doPost > > > > > > (FrameworkServlet.java:511) > > > > > > at > > > > ... > > > > read 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 [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/google-appengine-java?hl=en -~----------~----~----~----~------~----~------~--~---
