Hi All,
         I have situation where I need to store array of objects in
datastore. Its like I have one table called TransData(which is
persisted) which has one column of AppData object(which points to
AppData class which is not persisted). Now what I need is one Trans
data will have 'n' no. of App data (length, duration). Now instead of
saving as two separate tables, I need to make use of one table(though
i'm using 2 POJO class), by saving the object of AppData in TransData.
So that column will be having array of objects of AppData which will
have the AppData pair(length,duration). But i'm getting error
"java.lang.IllegalArgumentException: appDataObj:
com.prototype.model.AppData is not a supported property type."
Code is shown below

//TransData------------------------------------------------------code
package com.prototype.model;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import com.google.appengine.api.datastore.Key;

import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;
import com.prototype.model.AppData;

@PersistenceCapable
public class TransData {

        @PrimaryKey
        @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
        private Key transDataRow_Id;
        @Persistent
        private int transData_Id;
        @Persistent
        private int header_Id;
        @Persistent
        private List<AppData> appDataObj;
        private long applength;
        private long appDuration;


        public TransData(){

        }

        public TransData(int transData_Id,int header_Id,long applength,long
appDuration){

                this.transData_Id=transData_Id;
                this.header_Id=header_Id;
                this.applength=applength;
                this.appDuration=appDuration;

                System.out.println("this.applength=="+this.applength+"
this.appDuration=="+this.appDuration);

                appDataObj = new ArrayList<AppData>();  //--------Line
1---------------------
                System.out.println("Initial size of appDataObj: " +
appDataObj.size());//---------Line 2---------------
                appDataObj.add(new AppData(this.applength, 
this.appDuration));//-----
Line 3-----------------

//----------------------When I'm removing the lines marked (1,2,3 )
above its showing inserted successfully. But when I try to get data
its displaying 0 as the value even though I have entered value.That is
i'm getting the values of transaction
details(transDataRow_Id,transData_Id, header_Id)...also when I check
the admin page for datastore viewer I'm able to find the values
applength & appDuration..but still not able to receive it. so i made
the changes by including the above 3 lines feeling that the values are
not isnerted to appDataObject arraylist.....The getData() function is
also added below...

                System.out.println("Size of appDataObj after additions: " +
appDataObj.size());

        }

        // Accessors for the fields.  JDO doesn't use these, but your
application does.

    public Key getKey() {
        return transDataRow_Id;
    }

    public long getAppsLength(AppData app)
        {
            System.out.println("inside getAppsLength()
value="+app.getAppLength());
             return  app.getAppLength();
        }
    public long getAppsDuration(AppData app)
        {
                System.out.println("inside getAppsDuration()
value="+app.getAppDuration());
              return  app.getAppDuration();
        }
    public void setAppsLength(AppData app)
        {

        app.setAppLength(applength);
        }
    public void setAppsDuration(AppData app)
        {
                app.setAppLength(applength);
        }

    public int getTransDataId() {
        System.out.println("inside TransData getTransDataId()");
        return transData_Id;
    }
    public void setTransDataId(int transData_Id) {
        System.out.println("inside TransData setTransDataId()");
        this.transData_Id = transData_Id;
    }

    public int getHeaderId() {
        System.out.println("inside TransData getHeaderId()");
        return header_Id;
    }
    public void setHeaderId(int header_Id) {
        System.out.println("inside TransData setHeaderId()");
        this.header_Id = header_Id;
    }
}
//-----------------------------------------------------
Finish--------------------------------------------------------------------
// AppData
code------------------------------------------------------------------------------------------------------------

package com.prototype.model;

public class AppData {

        private long applength;
        private long appDuration;
        public AppData(){

        }
        public AppData(long applength,long appDuration){
                System.out.println("inside AppData constructor");
                this.applength=applength;
                this.appDuration=appDuration;
                System.out.println("this.applength=="+this.applength+"
is.appDuration=="+this.appDuration);
        }

        // Accessors for the fields.

    public long getAppLength() {
        System.out.println("inside AppData getAppLength()
value="+applength);
        return applength;
    }
    public void setAppLength(long applength) {
        System.out.println("inside AppData setAppLength()");
        this.applength = applength;
    }
    public long getAppDuration() {
        System.out.println("inside AppData getAppDuration()
value="+appDuration);
        return appDuration;
    }
    public void setAppDuration(long appDuration) {
        System.out.println("inside AppData setAppDuration()");
        this.appDuration = appDuration;
    }
}
//------------------------------------------------------------------------------
finish--------------------------------------------------------------------

//Code which calls for insertion of data
------------------------------------------------------------------------

public void addSample(int transData_Id,int header_Id,long
applength,long appDuration) {
                synchronized (this) {
                PersistenceManager pm = PMF.get().getPersistenceManager();
                System.out.println("PersistenceManager object created in
addSample()");
                TransData transData_obj = new
TransData(transData_Id,header_Id,applength,appDuration);
                pm.makePersistentAll(transData_obj);
                pm.close();

                }
        }
//--------------------------------------------------------------------
Finish---------------------------------------------------------------------------------
//--Code for getting data
inserted----------------------------------------------------------------------------------

public List<TransData> listTransList() {
                PersistenceManager pm = PMF.get().getPersistenceManager();
        System.out.println("PersistenceManager object created in
listTransList()");
                // Read the existing entries
        Query query = pm.newQuery(TransData.class);
        query.setOrdering("transDataRow_Id ascending");

                List<TransData> transList = (List<TransData>) query.execute();
                return transList;
        }

///------------------------JSP page for displaying inserted
data------------only the main part of code is pasted here-----------

<%
        Dao dao = Dao.INSTANCE;
        List<TransData> trans_List = new ArrayList<TransData>();
        List<AppData> app_List = new ArrayList<AppData>();
        trans_List = dao.listTransList();
        for (TransData trans_data_obj : trans_List){
 %>
                  <tr align="center">
                        <td 
bgcolor="#CCCCCC">&nbsp;<%=trans_data_obj.getKey()%></td>
                        <td 
bgcolor="#CCCCCC">&nbsp;<%=trans_data_obj.getTransDataId()%> </
td>
                        <td 
bgcolor="#CCCCCC">&nbsp;<%=trans_data_obj.getHeaderId()%></td>
                        <td bgcolor="#CCCCCC">&nbsp;

                        <%=trans_data_obj.getAppsLength(app_data_obj)%>

                        </td>
                        <td bgcolor="#CCCCCC">&nbsp;

                        <%=trans_data_obj.getAppsDuration(app_data_obj)%>

//-------------------------------------------------------------------
Finish------------------------------------------------------------------

i'm getting the following error:-
//data from eclipse
console-----------------------------------------------------
transData_Id = 1
header_Id = 1
applength = 10
appDuration = 100
PersistenceManager object created in addSample()
this.applength==10 this.appDuration==100
Initial size of appDataObj: 0
inside AppData constructor
this.applength==10 this.appDuration==100
Size of appDataObj after additions: 1
Jan 18, 2011 12:39:46 PM com.google.apphosting.utils.jetty.JettyLogger
warn
WARNING: /createLogData
java.lang.IllegalArgumentException: appDataObj:
com.prototype.model.AppData is not a supported property type.
        at
com.google.appengine.api.datastore.DataTypeUtils.checkSupportedSingleValue(DataTypeUtils.java:
184)
        at
com.google.appengine.api.datastore.DataTypeUtils.checkSupportedValue(DataTypeUtils.java:
149)
        at
com.google.appengine.api.datastore.DataTypeUtils.checkSupportedValue(DataTypeUtils.java:
123)
        at com.google.appengine.api.datastore.Entity.setProperty(Entity.java:
280)
        at
org.datanucleus.store.appengine.DatastoreFieldManager.storeObjectField(DatastoreFieldManager.java:
843)
        at
org.datanucleus.state.AbstractStateManager.providedObjectField(AbstractStateManager.java:
1037)
        at com.prototype.model.TransData.jdoProvideField(TransData.java)
        at com.prototype.model.TransData.jdoProvideFields(TransData.java)
        at
org.datanucleus.state.JDOStateManagerImpl.provideFields(JDOStateManagerImpl.java:
2715)
        at
org.datanucleus.store.appengine.DatastorePersistenceHandler.insertPreProcess(DatastorePersistenceHandler.java:
341)
        at
org.datanucleus.store.appengine.DatastorePersistenceHandler.insertObjects(DatastorePersistenceHandler.java:
251)
        at
org.datanucleus.store.appengine.BatchPutManager.processBatchState(BatchPutManager.java:
35)
        at
org.datanucleus.store.appengine.BatchManager.finish(BatchManager.java:
54)
        at org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManager
$BatchManagerWrapper.call(DatastoreJDOPersistenceManager.java:127)
        at org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManager
$BatchManagerWrapper.access$200(DatastoreJDOPersistenceManager.java:
121)
        at
org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManager.makePersistentAll(DatastoreJDOPersistenceManager.java:
98)
        at
org.datanucleus.jdo.JDOPersistenceManager.makePersistentAll(JDOPersistenceManager.java:
703)
        at com.prototype.constant.Dao.addSample(Dao.java:62)
        at com.prototype.process.LogCreateData.doPost(LogCreateData.java:47)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:713)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
        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.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:
58)
        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:
122)
        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.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:
70)
        at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:
152)
        at com.google.appengine.tools.development.JettyContainerService
$ApiProxyHandler.handle(JettyContainerService.java:349)
        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)


Please help me how to solve the same....


-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine" 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?hl=en.

Reply via email to