HashMap isn't supported as a persistable type.
The only way you've got to persist it is serialize it:
http://gae-java-persistence.blogspot.com/2009/10/serialized-fields.html

Cheers

barak wrote:
Hi,

I'm trying to persist the following class:

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class UserStats
{
	@PrimaryKey
	@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
	private Key							key;

	@Persistent
	private String						id;

	@Persistent
	private HashMap<String, Integer>	queries;

	public UserStats( String id )
	{
		this.id = id;

		queries = new HashMap<String, Integer>();
	}

	public Key getKey()
	{
		return key;
	}

	public String getId()
	{
		return id;
	}

	public void setId( String id )
	{
		this.id = id;
	}

	public HashMap<String, Integer> getQueries()
	{
		return queries;
	}

	public void setQueries( HashMap<String, Integer> queries )
	{
		this.queries = queries;
	}
}

But the following exception is raised:

SEVERE: java.lang.IllegalArgumentException: queries: java.util.HashMap
is not a supported property type.
	at
com.google.appengine.api.datastore.DataTypeUtils.checkSupportedSingleValue
(DataTypeUtils.java:134)
	at
com.google.appengine.api.datastore.DataTypeUtils.checkSupportedValue
(DataTypeUtils.java:116)
	at com.google.appengine.api.datastore.Entity.setProperty(Entity.java:
260)
	at
org.datanucleus.store.appengine.DatastoreFieldManager.storeObjectField
(DatastoreFieldManager.java:790)
	at org.datanucleus.state.AbstractStateManager.providedObjectField
(AbstractStateManager.java:1037)
	at com.me2.data.UserStats.jdoProvideField(UserStats.java)
	at com.me2.data.UserStats.jdoProvideFields(UserStats.java)
	at org.datanucleus.state.JDOStateManagerImpl.provideFields
(JDOStateManagerImpl.java:2715)
	at
org.datanucleus.store.appengine.DatastorePersistenceHandler.insertObject
(DatastorePersistenceHandler.java:180)
	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 com.me2.jsf.LargeDataModelBeanSample.gogo
(LargeDataModelBeanSample.java:199)
	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.sun.el.parser.AstValue.invoke(AstValue.java:130)
	at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:
274)
	at com.sun.facelets.el.TagMethodExpression.invoke
(TagMethodExpression.java:68)
	at javax.faces.event.MethodExpressionActionListener.processAction
(MethodExpressionActionListener.java:99)
	at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
	at javax.faces.component.UIComponentBase.broadcast
(UIComponentBase.java:771)
	at javax.faces.component.UICommand.broadcast(UICommand.java:372)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:
475)
	at javax.faces.component.UIViewRoot.processApplication
(UIViewRoot.java:756)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute
(InvokeApplicationPhase.java:82)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:
118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:
487)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter
(ServletHandler.java:1093)
	at org.primefaces.optimus.filter.PDFRenderingFilter.doFilter
(PDFRenderingFilter.java:74)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter
(ServletHandler.java:1084)
	at org.primefaces.optimus.filter.CharacterEncodingFilter.doFilter
(CharacterEncodingFilter.java:32)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter
(ServletHandler.java:1084)
	at org.primefaces.ui.webapp.filter.FileUploadFilter.doFilter
(FileUploadFilter.java:79)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter
(ServletHandler.java:1084)
	at
com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter
(TransactionCleanupFilter.java:43)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter
(ServletHandler.java:1084)
	at com.google.appengine.tools.development.StaticFileFilter.doFilter
(StaticFileFilter.java:124)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter
(ServletHandler.java:1084)
	at org.mortbay.jetty.servlet.ServletHandler.handle
(ServletHandler.java:360)
	at org.mortbay.jetty.security.SecurityHandler.handle
(SecurityHandler.java:216)
	at org.mortbay.jetty.servlet.SessionHandler.handle
(SessionHandler.java:181)
	at org.mortbay.jetty.handler.ContextHandler.handle
(ContextHandler.java:712)
	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:
405)
	at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle
(DevAppEngineWebAppContext.java:54)
	at org.mortbay.jetty.handler.HandlerWrapper.handle
(HandlerWrapper.java:139)
	at 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.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:
506)
	at org.mortbay.jetty.HttpConnection$RequestHandler.content
(HttpConnection.java:844)
	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:644)
	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381)
	at org.mortbay.io.nio.SelectChannelEndPoint.run
(SelectChannelEndPoint.java:396)
	at org.mortbay.thread.BoundedThreadPool$PoolThread.run
(BoundedThreadPool.java:442)

If I'm using newer sdk, exceptions regarding restricted classes are
thrown.

Is it possible to persist HashMap with sdk1.2.2?

Thanks.


  

--

Patrizio Munzi
Product Specialist
Viale Bruno Buozzi, 19 - 00197 Roma (Italy)
tel: +39 06 4543 3540
fax: +39 06 4543 3587
mobile: +39 393 7195 164
mail: [email protected]
web: http://www.eris4.com
skype: eris4_munzi


--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to