RE: DataObject/DataGraph Serialization DataGraphRoot

2006-09-06 Thread Scott Kurinskas
Hi All,

I thought I'd check-in regarding the status of this request?  Kevin was kind
enough to log jira issue (http://issues.apache.org/jira/browse/TUSCANY-670),
but I'm blocked.  Any chance there is a workaround available?  I'd like to
use the DAS for DB access, but would be willing to map to/from a XSD if that
would eliminate the current problem.

Thanks,
Scott 

-Original Message-
From: Kevin Williams [mailto:[EMAIL PROTECTED] 
Sent: Friday, August 25, 2006 3:25 PM
To: tuscany-user@ws.apache.org; tuscany-dev@ws.apache.org
Subject: Re: DataObject/DataGraph Serialization  DataGraphRoot

Hi Yang,
Comments in line ...

Yang ZHONG wrote:

 You may need to serialize the generated SDO metadata. On the other 
 hand, I recommend the scenario design to be reconsidered.

 Thank Frank for suggesting a SDOUtil helper taking a list of Types for 
 DAS to serialize all generated Types along with DataGraph.
 If you're willing to do that, I'll implement and send it out.

Yes.  Please implement this method.  If I understand correctly, the function
exists today in EMF but we prefer to stay with SDO apis.  Also, I am not
sure why the method should take a list of generated Types since they exist
in the graph already.  So, why not a method something like
this:  serializeTypes() ?

 At the same time, I have some thoughts on the scenario design. 
 DataBase schema is unlikely changed frequently, it's inefficient for 
 DAS to always generate same SDO metadata over and over again on every 
 single query, it's also inefficient to serialize same SDO metadata 
 over and over again on every single invocation back to client. A 
 typical customer scenario is, both client and server have SDO metadata 
 already, therefore SDO metadata serialization isn't really necessary, 
 and SDO metadata generation from DAS isn't really necessary. I know an 
 early version of DAS (it was under different name) can accept existing 
 SDO metadata and generate only SDO instances. My previous product 
 customers actually complained about the very poor performance caused 
 by repeating same SDO metadata generation and serialization.

 So, are you interested in trying such scenario so that you won't have 
 type not found problem?

 Solution 2-1 (typical real scenario):
 1. deploy SDO metadata to both client and server 2. instruct DAS to 
 accept the existing SDO metadata 3. do rest of whatever being done 
 right now

The DAS supports this scenario today and can accept Static Types from the
client.  But, the purely dynamic scenario is an important one so we must
support both.

Thanks!

 Solution 2-2 (temporary if current DAS doesn't take any SDO metadata 
 yet) 1. deploy the generated SDO metadata from DAS to client, once 2. 
 do rest of whatever being done right now

 On 8/25/06, Kevin Williams [EMAIL PROTECTED] wrote:


 The RDB DAS creates the graph and corresponding Types dynamically 
 from the database query results.

 Frank Budinsky wrote:

 The problem seems to be that the metadata for class DataGraphRoot is
 not
 registered on the client. Is that the only missing metadata? What 
 about the metadata for the rest of the model. I can't provide any 
 more help without more details about how the metadata is being defined.
 
 Frank.
 
 Kevin Williams [EMAIL PROTECTED] wrote on 08/25/2006 03:30:15 PM:
 
 
 
 It may be that your remote client has not initialized the SDO/EMF 
 environment properly and I think that we need some help from the 
 SDO team.  I have copied this to the dev list since not everyone 
 has registered yet for the user list.
 
 --Kevin
 
 
 
 Luciano Resende wrote:
 
 
 
 Hi Scott
 
So, here is a quick example from our unit testings :
 
 /**
  * Read a specific customer
  */
 public void testReadSingle() throws Exception {
 
 //Create and initialize command to read customers
 DAS das = DAS.FACTORY.createDAS(getConnection());
 Command readCustomers = das.createCommand(select * from 
 CUSTOMER where ID = 1);
 
 //Read
 DataObject root = readCustomers.executeQuery();
 
 //Verify
 assertEquals(1, root.getInt(CUSTOMER[1]/ID));
 }
 
 If you get a reference to root first, then try to access the 
 customer information, do you still have this problem ?
 
 Maybe something like this :
 
 DataObject root = readCust.executeQuery(); cust = 
 root.getDataObject(CUSTOMER)
 
 Please let me know if this helps...
 
 - Luciano
 
 
 On 8/24/06, *Scott Kurinskas* [EMAIL PROTECTED] 
 mailto:[EMAIL PROTECTED] wrote:
 
 Hi,
 
 Now that my DAS example is up and running, I'm trying to move my
 example to
 a client/server environment and integrate it with my product.  My
 use-case
 is very simple, a client makes a request to the server, the
 server
 fetches
 the result from the database and returns the DataObject back to
 the client.
 The server side code looks like the following:
 
 das = DAS.FACTORY.createDAS(getConfig

Re: DataObject/DataGraph Serialization DataGraphRoot

2006-08-25 Thread Kevin Williams
It may be that your remote client has not initialized the SDO/EMF 
environment properly and I think that we need some help from the SDO 
team.  I have copied this to the dev list since not everyone has 
registered yet for the user list.


--Kevin



Luciano Resende wrote:


Hi Scott

   So, here is a quick example from our unit testings :

/**
 * Read a specific customer
 */
public void testReadSingle() throws Exception {

//Create and initialize command to read customers
DAS das = DAS.FACTORY.createDAS(getConnection());
Command readCustomers = das.createCommand(select * from 
CUSTOMER where ID = 1);   


//Read
DataObject root = readCustomers.executeQuery();
   
//Verify

assertEquals(1, root.getInt(CUSTOMER[1]/ID));
}

If you get a reference to root first, then try to access the customer 
information, do you still have this problem ?


Maybe something like this :

DataObject root = readCust.executeQuery();
cust = root.getDataObject(CUSTOMER)

Please let me know if this helps...

- Luciano


On 8/24/06, *Scott Kurinskas* [EMAIL PROTECTED] 
mailto:[EMAIL PROTECTED] wrote:


Hi,

Now that my DAS example is up and running, I'm trying to move my
example to
a client/server environment and integrate it with my product.  My
use-case
is very simple, a client makes a request to the server, the server
fetches
the result from the database and returns the DataObject back to
the client.
The server side code looks like the following:

das = DAS.FACTORY.createDAS(getConfig(CompanyConfig.xml),
connection);
String sql = Select * from customers where
customers.customerNumber =  +
key;
Command readCust = das.createCommand(sql);
DataObject cust = readCust.executeQuery();
return cust;

The code executes fine on the client but for some reason the
client is
throwing the exception below.  The client should be deserializing the
response into a DataObject, but for some reason its complaining
about class
DataGraphRoot not found.  The same code executing in a app works
great.

Thoughts?

Thanks again,
Scott

Caught unexpected Exception
org.eclipse.emf.ecore.resource.Resource$IOWrappedException: Class
'DataGraphRoot' not found.
( file:///C:/Documents%20and%20Settings/skurinsk/workspace/SDO%20
file:///C:/Documents%20and%20Settings/skurinsk/workspace/SDO%20%20Cache%20

file:///C:/Documents%20and%20Settings/skurinsk/workspace/SDO%20%20Cache%20
Client/all.datagraph %20Cache%20Client/all.datagraph, 5, 22)
at
org.eclipse.emf.ecore.xmi.impl.XMLLoadImpl.handleErrors(XMLLoadImpl.java:80)
at
org.eclipse.emf.ecore.xmi.impl.XMLLoadImpl.load(XMLLoadImpl.java :189)
at
org.apache.tuscany.sdo.util.DataGraphResourceFactoryImpl$DataGraphResourceIm
pl$LoadImpl.load(DataGraphResourceFactoryImpl.java:452)
at
org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl.doLoad(XMLResourceImpl.java
:1
79)
at
org.eclipse.emf.ecore.resource.impl.ResourceImpl.load(ResourceImpl.java:1089
)
at
org.apache.tuscany.sdo.impl.DataGraphImpl$EDataGraphExternalizable.readExter
nal(DataGraphImpl.java:665)
at
java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1758)
at
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1716)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java :1304)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:349)
at
org.apache.tuscany.sdo.helper.HelperProviderImpl$ResolvableImpl.readDataObje
ct(HelperProviderImpl.java:205)
at
org.apache.tuscany.sdo.helper.HelperProviderImpl$ResolvableImpl.readExternal

(HelperProviderImpl.java:144)
at
commonj.sdo.impl.ExternalizableDelegator.readExternal(ExternalizableDelegato
r.java:80)
at
java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1758)
at
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1716)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1304)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:349)
at
com.gemstone.gemfire.DataSerializer.readObject(DataSerializer.java:3200)
at
com.gemstone.gemfire.internal.util.BlobHelper.deserializeBlob(BlobHelper.jav
a:55




--
-
Luciano Resende
SOA Opensource - Apache Tuscany
- 





-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: DataObject/DataGraph Serialization DataGraphRoot

2006-08-25 Thread Kevin Williams

Hi Yang,
Comments in line ...

Yang ZHONG wrote:

You may need to serialize the generated SDO metadata. On the other 
hand, I

recommend the scenario design to be reconsidered.

Thank Frank for suggesting a SDOUtil helper taking a list of Types for 
DAS

to serialize all generated Types along with DataGraph.
If you're willing to do that, I'll implement and send it out.

Yes.  Please implement this method.  If I understand correctly, the 
function exists today in EMF but we prefer to stay with SDO apis.  Also, 
I am not sure why the method should take a list of generated Types since 
they exist in the graph already.  So, why not a method something like 
this:  serializeTypes() ?



At the same time, I have some thoughts on the scenario design. DataBase
schema is unlikely changed frequently, it's inefficient for DAS to always
generate same SDO metadata over and over again on every single query, 
it's
also inefficient to serialize same SDO metadata over and over again on 
every

single invocation back to client. A typical customer scenario is, both
client and server have SDO metadata already, therefore SDO metadata
serialization isn't really necessary, and SDO metadata generation from 
DAS

isn't really necessary. I know an early version of DAS (it was under
different name) can accept existing SDO metadata and generate only SDO
instances. My previous product customers actually complained about the 
very

poor performance caused by repeating same SDO metadata generation and
serialization.

So, are you interested in trying such scenario so that you won't have 
type

not found problem?

Solution 2-1 (typical real scenario):
1. deploy SDO metadata to both client and server
2. instruct DAS to accept the existing SDO metadata
3. do rest of whatever being done right now

The DAS supports this scenario today and can accept Static Types from 
the client.  But, the purely dynamic scenario is an important one so we 
must support both.


Thanks!


Solution 2-2 (temporary if current DAS doesn't take any SDO metadata yet)
1. deploy the generated SDO metadata from DAS to client, once
2. do rest of whatever being done right now

On 8/25/06, Kevin Williams [EMAIL PROTECTED] wrote:



The RDB DAS creates the graph and corresponding Types dynamically from
the database query results.

Frank Budinsky wrote:

The problem seems to be that the metadata for class DataGraphRoot is 
not

registered on the client. Is that the only missing metadata? What about
the metadata for the rest of the model. I can't provide any more help
without more details about how the metadata is being defined.

Frank.

Kevin Williams [EMAIL PROTECTED] wrote on 08/25/2006 03:30:15 PM:



It may be that your remote client has not initialized the SDO/EMF
environment properly and I think that we need some help from the SDO
team.  I have copied this to the dev list since not everyone has
registered yet for the user list.

--Kevin



Luciano Resende wrote:



Hi Scott

   So, here is a quick example from our unit testings :

/**
 * Read a specific customer
 */
public void testReadSingle() throws Exception {

//Create and initialize command to read customers
DAS das = DAS.FACTORY.createDAS(getConnection());
Command readCustomers = das.createCommand(select * from
CUSTOMER where ID = 1);

//Read
DataObject root = readCustomers.executeQuery();

//Verify
assertEquals(1, root.getInt(CUSTOMER[1]/ID));
}

If you get a reference to root first, then try to access the customer
information, do you still have this problem ?

Maybe something like this :

DataObject root = readCust.executeQuery();
cust = root.getDataObject(CUSTOMER)

Please let me know if this helps...

- Luciano


On 8/24/06, *Scott Kurinskas* [EMAIL PROTECTED]
mailto:[EMAIL PROTECTED] wrote:

Hi,

Now that my DAS example is up and running, I'm trying to move my
example to
a client/server environment and integrate it with my product.  My
use-case
is very simple, a client makes a request to the server, the 
server

fetches
the result from the database and returns the DataObject back to
the client.
The server side code looks like the following:

das = DAS.FACTORY.createDAS(getConfig(CompanyConfig.xml),
connection);
String sql = Select * from customers where
customers.customerNumber =  +
key;
Command readCust = das.createCommand(sql);
DataObject cust = readCust.executeQuery();
return cust;

The code executes fine on the client but for some reason the
client is
throwing the exception below.  The client should be deserializing


the


response into a DataObject, but for some reason its complaining
about class
DataGraphRoot not found.  The same code executing in a app works
great.

Thoughts?

Thanks again,
Scott

Caught unexpected Exception
org.eclipse.emf.ecore.resource.Resource$IOWrappedException: Class