Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Modeling » EMF "Technology" (Ecore Tools, EMFatic, etc)  » [CDO] JPA
[CDO] JPA [message #94789] Wed, 29 August 2007 02:29 Go to next message
Simon Mc Duff is currently offline Simon Mc DuffFriend
Messages: 596
Registered: July 2009
Senior Member
This is a multi-part message in MIME format.

------=_NextPart_000_0289_01C7E9C2.E0D0B550
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

I started to put JPA interface in front of CDO.=20

I added a QueryRequest as well. Right now it does only support native =
Query.. but still. (Delegate the QueryString to the back end...)

We added QueryRequest and a QueryIndication...


Right now the query is only a string :-(... It is far to have all the =
feature that JPA gives.. but we need to start somewhere.

What do you think Eike ? It is worth it.. the complete the query =
mechanism ? and to add XA transaction ?


HERE some code:

HashMap map =3D new HashMap();

map.put("packages", new EPackage[] { Model1Package.eINSTANCE } );
map.put("repositoryName", "repo1");

EntityManagerFactory factory =3D =
Persistence.createEntityManagerFactory("localhost:2036",map);

EntityManager manager =3D factory.createEntityManager(map);
manager.getTransaction().begin();

Resource resource =3D manager.find(Resource.class, "/test1");

long timeStart =3D System.currentTimeMillis();
Iterator<EObject> itr =3D resource.getAllContents();
int count =3D0;
while ( itr.hasNext() )
{
Vehicle vehicle =3D (Vehicle) itr.next();
if (count % 1000 =3D=3D 0 && count !=3D 0)
{
long millis =3D (System.currentTimeMillis() - timeStart);
if (millis !=3D 0)
System.out.println("TIME TO TAKE " + count + " "+ millis + " "+ (count =
*1000 / millis )+ " objects / sec" );
}
count++;
}
System.out.println("TIME TO TAKE " + count + " "+ =
(System.currentTimeMillis() - timeStart));

Query query =3D manager.createNativeQuery("<native QUERY>");
List returnResult =3D query.getResultList();
manager.getTransaction().commit();

manager.close();

factory.close();

Simon
------=_NextPart_000_0289_01C7E9C2.E0D0B550
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Diso-8859-1">
<META content=3D"MSHTML 6.00.6000.16525" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY>
<DIV><FONT face=3DArial size=3D2>I started to put JPA interface in front =
of CDO.=20
</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>I added a QueryRequest as well. Right =
now it does=20
only support native Query.. but still.&nbsp; (Delegate the QueryString =
to the=20
back end...)</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>We added QueryRequest and a=20
QueryIndication...</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>Right now the query is only a string =
:-(... It is=20
far to have all the feature that JPA gives.. but we need to start=20
somewhere.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT><FONT face=3DArial =
size=3D2></FONT>&nbsp;</DIV>
<DIV align=3Dleft><FONT face=3DArial><FONT size=3D2><FONT face=3DArial =
size=3D2>What do=20
you think Eike ? It is worth it..&nbsp; the complete the query mechanism =
? and=20
to add XA transaction ?</FONT></FONT></FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>HERE some =
code:</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>HashMap map =3D new=20
HashMap();</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial><FONT size=3D2><FONT face=3DArial=20
size=3D2></FONT></FONT></FONT>&nbsp;</DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>map.put("packages", new =
EPackage[] {=20
Model1Package.eINSTANCE } );</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>map.put("repositoryName",=20
"repo1");</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>EntityManagerFactory =
factory =3D=20
Persistence.createEntityManagerFactory("localhost:2036",map); </FONT></DIV=
>
<DIV align=3Dleft><FONT face=3DArial><FONT size=3D2><FONT face=3DArial=20
size=3D2></FONT></FONT></FONT>&nbsp;</DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>EntityManager manager =3D=20
factory.createEntityManager(map);</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial><FONT size=3D2><FONT face=3DArial =
size=3D2><FONT=20
size=3D2>
<P>manager.getTransaction().begin();</P></FONT></FONT></FONT ></FONT></DIV=
>
<DIV align=3Dleft><FONT face=3DArial size=3D2>Resource resource =3D=20
manager.find(Resource.class, "/test1");</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>long timeStart =3D=20
System.currentTimeMillis();</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>Iterator&lt;EObject&gt; =
itr =3D=20
resource.getAllContents();</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>int count =
=3D0;</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>while ( itr.hasNext() =
)</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>{</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>Vehicle vehicle =3D =
(Vehicle)=20
itr.next();</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>if (count % 1000 =3D=3D 0 =
&amp;&amp; count=20
!=3D 0)</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>{</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>long millis =3D=20
(System.currentTimeMillis() - timeStart);</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>if (millis !=3D =
0)</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>System.out.println("TIME =
TO TAKE " +=20
count + " "+ millis + " "+ (count *1000 / millis )+ " objects / sec"=20
);</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>}</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>count++;</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>}</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>System.out.println("TIME =
TO TAKE " +=20
count + " "+ (System.currentTimeMillis() - timeStart));</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial><FONT size=3D2><FONT face=3DArial=20
size=3D2></FONT></FONT></FONT>&nbsp;</DIV><FONT size=3D2>
<DIV align=3Dleft><FONT face=3DArial>Query query =3D=20
manager.createNativeQuery(</FONT></FONT><FONT face=3DArial =
color=3D#2a00ff=20
size=3D2>"&lt;native QUERY&gt;"</FONT><FONT size=3D2><FONT=20
face=3DArial>);</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial>List returnResult =3D=20
query.getResultList();</FONT></DIV>
<DIV align=3Dleft><FONT size=3D2>
<P>manager.getTransaction().commit();</P></FONT></DIV></FONT >
<DIV align=3Dleft><FONT face=3DArial =
size=3D2>manager.close();</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial><FONT size=3D2><FONT face=3DArial=20
size=3D2></FONT></FONT></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>factory.close();</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>Simon</FONT></DIV></BODY></HTML>

------=_NextPart_000_0289_01C7E9C2.E0D0B550--
Re: [CDO] JPA [message #94807 is a reply to message #94789] Wed, 29 August 2007 06:37 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: stepper.sympedia.de

This is a multi-part message in MIME format.
--------------090909010003080502050301
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Simon McDuff schrieb:
> I started to put JPA interface in front of CDO.
>
> I added a QueryRequest as well. Right now it does only support native
> Query.. but still. (Delegate the QueryString to the back end...)
>
> We added QueryRequest and a QueryIndication...
>
>
> Right now the query is only a string :-(... It is far to have all the
> feature that JPA gives.. but we need to start somewhere.
>
> What do you think Eike ? It is worth it.. the complete the query
> mechanism ?
Having a query mechanism is very cool. It is on my plan anymway, but not
at the very top ;-)

The only thing I knew about JPA was that it started to exist.
Since it's not part of JSE we have to separate support for it.
You say you put CDO behind the JPA interface. Is it completely hidden?
How do they integrate?
What is "native query"?

You see, a lot of questions and more are below ;-)

> and to add XA transaction ?
We should discuss that in a separate thread.
Please explain where you'd like to integrate XA and what benefit you expect.

> HERE some code:
>
> HashMap map = new HashMap();
>
> map.put("packages", new EPackage[] { Model1Package.eINSTANCE } );
> map.put("repositoryName", "repo1");
>
> EntityManagerFactory factory =
> Persistence.createEntityManagerFactory("localhost:2036",map);
I assume "localhost:2036" is the address of a Net4j server.
How does JPA manage to get an IConnector that is needed to open a
CDOSession?

> EntityManager manager = factory.createEntityManager(map);
Does this instance of EntityManager encapsulate a CDOSession?

> manager.getTransaction().begin();
>
In the code below I can't find a line that makes a transaction necessary.
Is it to encapsulate a CDOView?

> Resource resource = manager.find(Resource.class, "/test1");
What does happen here behind the scenes?
Is the "/test1" resource loaded from a CDO repository?
Have you provided any logic for that?
Is the resource contained in a ResourceSet?

> long timeStart = System.currentTimeMillis();
> Iterator<EObject> itr = resource.getAllContents();
Is there a special reason why you call get*All*Contents()?
Can Vehicles contain other Vehicles?
Just curious ;-)

> int count =0;
> while ( itr.hasNext() )
> {
> Vehicle vehicle = (Vehicle) itr.next();
> if (count % 1000 == 0 && count != 0)
> {
> long millis = (System.currentTimeMillis() - timeStart);
> if (millis != 0)
> System.out.println("TIME TO TAKE " + count + " "+ millis + " "+ (count
> *1000 / millis )+ " objects / sec" );
> }
> count++;
> }
> System.out.println("TIME TO TAKE " + count + " "+
> (System.currentTimeMillis() - timeStart));

> Query query = manager.createNativeQuery("<native QUERY>");
> List returnResult = query.getResultList();
Is this pseudo code?
What is the query?
What is the result?

> manager.getTransaction().commit();
>
> manager.close();
>
> factory.close();
>
> Simon

The idea is appealing but, as you can see, I still don't know very much
about it ;-)

Cheers
/Eike



--------------090909010003080502050301
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Simon McDuff schrieb:
<blockquote cite="mid:fb2lm2$fdk$1@build.eclipse.org" type="cite">
<meta http-equiv="Content-Type" content="text/html; ">
<meta content="MSHTML 6.00.6000.16525" name="GENERATOR">
<style></style>
<div><font face="Arial" size="2">I started to put JPA interface in
front of CDO. </font></div>
<div>&nbsp;</div>
<div><font face="Arial" size="2">I added a QueryRequest as well.
Right now it does only support native Query.. but still.&nbsp; (Delegate the
QueryString to the back end...)</font></div>
<div>&nbsp;</div>
<div><font face="Arial" size="2">We added QueryRequest and a
QueryIndication...</font></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><font face="Arial" size="2">Right now the query is only a string
:-(... It is far to have all the feature that JPA gives.. but we need
to start somewhere.</font></div>
<div>&nbsp;</div>
<div align="left"><font face="Arial"><font size="2"><font face="Arial"
size="2">What do you think Eike ? It is worth it..&nbsp; the complete the
query mechanism ? </font></font></font></div>
</blockquote>
Having a query mechanism is very cool. It is on my plan anymway, but
not at the very top ;-)<br>
<br>
The only thing I knew about JPA was that it started to exist.<br>
Since it's not part of JSE we have to separate support for it.<br>
You say you put CDO behind the JPA interface. Is it completely hidden?<br>
How do they integrate?<br>
What is "native query"?<br>
<br>
You see, a lot of questions and more are below ;-)<br>
<br>
<blockquote cite="mid:fb2lm2$fdk$1@build.eclipse.org" type="cite">
<div align="left"><font face="Arial"><font size="2"><font face="Arial"
size="2">and to add XA transaction ?</font></font></font></div>
</blockquote>
We should discuss that in a separate thread.<br>
Please explain where you'd like to integrate XA and what benefit you
expect.<br>
<br>
<blockquote cite="mid:fb2lm2$fdk$1@build.eclipse.org" type="cite">
<div align="left">&nbsp; <font face="Arial" size="2">HERE some code:</font></div>
<div align="left">&nbsp;</div>
<div align="left"><font face="Arial" size="2">HashMap map = new
HashMap();</font></div>
<div align="left">&nbsp;</div>
<div align="left"><font face="Arial" size="2">map.put("packages", new
EPackage[] { Model1Package.eINSTANCE } );</font></div>
<div align="left"><font face="Arial" size="2">map.put("repositoryName",
"repo1");</font></div>
<div align="left">&nbsp;</div>
<div align="left"><font face="Arial" size="2">EntityManagerFactory
factory = Persistence.createEntityManagerFactory("localhost:2036",map); </font></div>
</blockquote>
I assume <font face="Arial" size="2">"localhost:2036" is the address
of a Net4j server.<br>
How does JPA manage to get an IConnector that is needed to open a
CDOSession?<br>
<br>
</font>
<blockquote cite="mid:fb2lm2$fdk$1@build.eclipse.org" type="cite">
<div align="left">&nbsp;<font face="Arial" size="2">EntityManager manager
= factory.createEntityManager(map);</font></div>
</blockquote>
Does this instance of EntityManager encapsulate a CDOSession?<br>
<br>
<blockquote cite="mid:fb2lm2$fdk$1@build.eclipse.org" type="cite">
<div align="left"><font face="Arial"><font size="2"><font face="Arial"
size="2"><font size="2">
<p>manager.getTransaction().begin();</p>
</font></font></font></font></div>
</blockquote>
In the code below I can't find a line that makes a transaction
necessary.<br>
Is it to encapsulate a CDOView?<br>
<br>
<blockquote cite="mid:fb2lm2$fdk$1@build.eclipse.org" type="cite">
<div align="left"><font face="Arial" size="2">Resource resource =
manager.find(Resource.class, "/test1");</font></div>
</blockquote>
What does happen here behind the scenes?<br>
Is the "/test1" resource loaded from a CDO repository?<br>
Have you provided any logic for that?<br>
Is the resource contained in a ResourceSet?<br>
<br>
<blockquote cite="mid:fb2lm2$fdk$1@build.eclipse.org" type="cite">
<div align="left"><font face="Arial" size="2">long timeStart =
System.currentTimeMillis();</font></div>
<div align="left"><font face="Arial" size="2">Iterator&lt;EObject&gt;
itr = resource.getAllContents();</font></div>
</blockquote>
Is there a special reason why you call get<b>All</b>Contents()?<br>
Can Vehicles contain other Vehicles?<br>
Just curious ;-)<br>
<br>
<blockquote cite="mid:fb2lm2$fdk$1@build.eclipse.org" type="cite">
<div align="left"><font face="Arial" size="2">int count =0;</font></div>
<div align="left"><font face="Arial" size="2">while ( itr.hasNext() )</font></div>
<div align="left"><font face="Arial" size="2">{</font></div>
<div align="left"><font face="Arial" size="2">Vehicle vehicle =
(Vehicle) itr.next();</font></div>
<div align="left"><font face="Arial" size="2">if (count % 1000 == 0
&amp;&amp; count != 0)</font></div>
<div align="left"><font face="Arial" size="2">{</font></div>
<div align="left"><font face="Arial" size="2">long millis =
(System.currentTimeMillis() - timeStart);</font></div>
<div align="left"><font face="Arial" size="2">if (millis != 0)</font></div>
<div align="left"><font face="Arial" size="2">System.out.println("TIME
TO TAKE " + count + " "+ millis + " "+ (count *1000 / millis )+ "
objects / sec" );</font></div>
<div align="left"><font face="Arial" size="2">}</font></div>
<div align="left"><font face="Arial" size="2">count++;</font></div>
<div align="left"><font face="Arial" size="2">}</font></div>
<div align="left"><font face="Arial" size="2">System.out.println("TIME
TO TAKE " + count + " "+ (System.currentTimeMillis() - timeStart));</font></div>
</blockquote>
<br>
<blockquote cite="mid:fb2lm2$fdk$1@build.eclipse.org" type="cite"><font
size="2">
</font>
<div align="left"><font size="2"><font face="Arial">Query query =
manager.createNativeQuery(</font></font><font color="#2a00ff"
face="Arial" size="2">"&lt;native QUERY&gt;"</font><font size="2"><font
face="Arial">);</font></font></div>
<div align="left"><font size="2"><font face="Arial">List returnResult
= query.getResultList();</font></font></div>
</blockquote>
Is this pseudo code?<br>
What is the query?<br>
What is the result?<br>
<br>
<blockquote cite="mid:fb2lm2$fdk$1@build.eclipse.org" type="cite">
<div align="left"><font size="2"><font size="2">
<p>manager.getTransaction().commit();</p>
</font></font></div>
<div align="left"><font face="Arial" size="2">manager.close();</font></div>
<div align="left">&nbsp;</div>
<div><font face="Arial" size="2">factory.close();</font></div>
<div>&nbsp;</div>
<div><font face="Arial" size="2">Simon</font></div>
</blockquote>
<br>
The idea is appealing but, as you can see, I still don't know very much
about it ;-)<br>
<br>
Cheers<br>
/Eike<br>
<br>
<br>
</body>
</html>

--------------090909010003080502050301--
Re: [CDO] JPA [message #94872 is a reply to message #94807] Wed, 29 August 2007 11:22 Go to previous message
Simon Mc Duff is currently offline Simon Mc DuffFriend
Messages: 596
Registered: July 2009
Senior Member
This is a multi-part message in MIME format.

------=_NextPart_000_0255_01C7EA0D.4E55F8C0
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

First we provide this API in our company.. because we need to base our =
work on top of some standard.. to do our query...and for the transaction =
management.=20

So if someone don't want to use a specific technologie.. the code =
doesn't change that much...


[comments in bold]


"Eike Stepper" <stepper@sympedia.de> wrote in message =
news:fb3471$29e$1@build.eclipse.org...
Simon McDuff schrieb:=20
I started to put JPA interface in front of CDO.=20

I added a QueryRequest as well. Right now it does only support =
native Query.. but still. (Delegate the QueryString to the back end...)

We added QueryRequest and a QueryIndication...


Right now the query is only a string :-(... It is far to have all =
the feature that JPA gives.. but we need to start somewhere.

What do you think Eike ? It is worth it.. the complete the query =
mechanism ?=20
Having a query mechanism is very cool. It is on my plan anymway, but =
not at the very top ;-)

The only thing I knew about JPA was that it started to exist.
Since it's not part of JSE we have to separate support for it.
You say you put CDO behind the JPA interface. Is it completely hidden?
[SIMON] Yes, But for specific things you could still Cast =
EntityManager as an CDOEntityManager

How do they integrate?
What is "native query"?
[SIMON] I'm reading the spec right now to determine what is the =
specification. But for the first things I did... it is only a String =
that a pass to my back-end. I will develop that.
You see, a lot of questions and more are below ;-)


and to add XA transaction ?
We should discuss that in a separate thread.
Please explain where you'd like to integrate XA and what benefit you =
expect.
[SIMON] If we would like to be part of a XA transaction. It could be =
another CDOTransaction that we would like to commit at the same time and =
be sure that both of them are committing... to keep our persistent =
objects graphs consistent. If one fail.. we will fail the other..


HERE some code:

HashMap map =3D new HashMap();

map.put("packages", new EPackage[] { Model1Package.eINSTANCE } );
map.put("repositoryName", "repo1");

EntityManagerFactory factory =3D =
Persistence.createEntityManagerFactory("localhost:2036",map);
I assume "localhost:2036" is the address of a Net4j server.yes
How does JPA manage to get an IConnector that is needed to open a =
CDOSession?
[SIMON] It is all under the hood. I just pass the parameters. We can =
add more parameters... or access CDOEntityManagerFactory directly... Or =
Subclass EntityManagerFactory for our special need.

[SIMON] It is internally. We could get IManageContainer through our =
API.. but for sure EntityManager doesn't have that concept.

EntityManager manager =3D factory.createEntityManager(map);
Does this instance of EntityManager encapsulate a CDOSession?
[SIMON] EntityManager encapsulate a transaction. If EntityManager =
isn't part of a XA transaction you can call .getTransaction to be able =
to rollback.
[SIMON] EntityManagerFactory encapsulate the session
[SIMON] Provider encapsulate the IConnector.

manager.getTransaction().begin();

In the code below I can't find a line that makes a transaction =
necessary.
Is it to encapsulate a CDOView? ..=20

[SIMON]Yes I know.. it was just an example... It always start a =
CDOTransaction... for simplicity. Because I don't know if someone will =
modify something


Resource resource =3D manager.find(Resource.class, "/test1");
What does happen here behind the scenes?
[SIMON] The query is now yet developped in CDO .. so in this case... =
for a Resource.class it will call transaction.getResourcePath(...); To =
get a resource.
Is the "/test1" resource loaded from a CDO repository?
[SIMON] Yes
Have you provided any logic for that?
Is the resource contained in a ResourceSet?
[Yes]


long timeStart =3D System.currentTimeMillis();
Iterator<EObject> itr =3D resource.getAllContents();
Is there a special reason why you call getAllContents()?
[SIMON] It is only an example that it is working. From here it is the =
same with or without CDO
Can Vehicles contain other Vehicles?
[SIMON} It is not really important for this exmaple... but it contains =
transmission... and other references.
Just curious ;-)


int count =3D0;
while ( itr.hasNext() )
{
Vehicle vehicle =3D (Vehicle) itr.next();
if (count % 1000 =3D=3D 0 && count !=3D 0)
{
long millis =3D (System.currentTimeMillis() - timeStart);
if (millis !=3D 0)
System.out.println("TIME TO TAKE " + count + " "+ millis + " "+ =
(count *1000 / millis )+ " objects / sec" );
}
count++;
}
System.out.println("TIME TO TAKE " + count + " "+ =
(System.currentTimeMillis() - timeStart));


Query query =3D manager.createNativeQuery("<native QUERY>");
List returnResult =3D query.getResultList();
Is this pseudo code?
[SIMON] No it is my exmaple I was running. I modified a few line =
directly here... so maybe it is not compiling. I change the query String =
so we can put anything there.
What is the query?
[SIMON] Could be anything.. that the back-end will receive. I will =
change that. Query is in fact a CDOQuery...
What is the result?
[SIMON] QueryRequest receive a list of CDOID from now... I need to =
build a special list (maybe you already have one) that resolve object as =
it goes.

manager.getTransaction().commit();

manager.close();

factory.close();

Simon

The idea is appealing but, as you can see, I still don't know very =
much about it ;-)
[SIMON] This is good !!!
http://java.sun.com/javaee/5/docs/api/
Look for EntityManager for the complete possibility.

Cheers
/Eike



------=_NextPart_000_0255_01C7EA0D.4E55F8C0
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type =
content=3Dtext/html;charset=3DISO-8859-1>
<META content=3D"MSHTML 6.00.2900.3157" name=3DGENERATOR></HEAD>
<BODY text=3D#000000 bgColor=3D#ffffff>
<DIV><FONT face=3DArial size=3D2>First we provide this API in our =
company.. because=20
we need to base our work on top of some standard.. to do our query...and =
for the=20
transaction management. </FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>So if someone don't want to use a =
specific=20
technologie.. the code doesn't change that much...</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2><STRONG>[comments in =
bold]</STRONG></FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV>"Eike Stepper" &lt;<A=20
href=3D"mailto:stepper@sympedia.de">stepper@sympedia.de</A>&gt; wrote in =
message=20
<A=20
href=3D"news:fb3471$29e$1@build.eclipse.org">news:fb3471$29e$1@build.ecli=
pse.org</A>...</DIV>
<BLOCKQUOTE=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">Simon=20
McDuff schrieb:=20
<BLOCKQUOTE cite=3Dmid:fb2lm2$fdk$1@build.eclipse.org type=3D"cite">
<META content=3D"MSHTML 6.00.6000.16525" name=3DGENERATOR>
<STYLE></STYLE>

<DIV><FONT face=3DArial size=3D2>I started to put JPA interface in =
front of CDO.=20
</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>I added a QueryRequest as well. =
Right now it=20
does only support native Query.. but still.&nbsp; (Delegate the =
QueryString=20
to the back end...)</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>We added QueryRequest and a=20
QueryIndication...</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>Right now the query is only a =
string :-(... It=20
is far to have all the feature that JPA gives.. but we need to start =

somewhere.</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV align=3Dleft><FONT face=3DArial><FONT size=3D2><FONT =
face=3DArial size=3D2>What=20
do you think Eike ? It is worth it..&nbsp; the complete the query =
mechanism=20
? </FONT></FONT></FONT></DIV></BLOCKQUOTE>
<DIV>Having a query mechanism is very cool. It is on my plan anymway, =
but not=20
at the very top ;-)<BR><BR>The only thing I knew about JPA was that it =
started=20
to exist.<BR>Since it's not part of JSE we have to separate support =
for=20
it.<BR>You say you put CDO behind the JPA interface. Is it completely=20
hidden?</DIV>
<DIV><STRONG>[SIMON] Yes, But for specific things you could still Cast =

EntityManager as an CDOEntityManager</STRONG></DIV><FONT face=3DArial=20
size=3D2></FONT>
<DIV><BR>How do they integrate?<BR>What is "native query"?</DIV>
<DIV><FONT face=3DArial size=3D2>[SIMON] I'm reading the spec right =
now to=20
determine what is the specification. But for the first things I did... =
it is=20
only a String that a pass to my back-end. I will develop =
that.</FONT><BR>You=20
see, a lot of questions and more are below ;-)<BR><BR></DIV>
<BLOCKQUOTE cite=3Dmid:fb2lm2$fdk$1@build.eclipse.org type=3D"cite">
<DIV align=3Dleft><FONT face=3DArial><FONT size=3D2><FONT =
face=3DArial size=3D2>and to=20
add XA transaction ?</FONT></FONT></FONT></DIV></BLOCKQUOTE>
<DIV>We should discuss that in a separate thread.<BR>Please explain =
where=20
you'd like to integrate XA and what benefit you expect.</DIV>
<DIV><STRONG>[SIMON] If we would like to be part of a XA transaction. =
It could=20
be another CDOTransaction that we would like to commit at the same =
time and be=20
sure that both of them are committing... to keep our persistent =
objects graphs=20
consistent. If one fail.. we will fail the =
other..<BR></STRONG><BR></DIV>
<BLOCKQUOTE cite=3Dmid:fb2lm2$fdk$1@build.eclipse.org type=3D"cite">
<DIV align=3Dleft>&nbsp; <FONT face=3DArial size=3D2>HERE some =
code:</FONT></DIV>
<DIV align=3Dleft>&nbsp;</DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>HashMap map =3D new=20
HashMap();</FONT></DIV>
<DIV align=3Dleft>&nbsp;</DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>map.put("packages", =
new EPackage[] {=20
Model1Package.eINSTANCE } );</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial =
size=3D2>map.put("repositoryName",=20
"repo1");</FONT></DIV>
<DIV align=3Dleft>&nbsp;</DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>EntityManagerFactory =
factory =3D=20
=
Persistence.createEntityManagerFactory("localhost:2036",map); </FONT></DIV=
></BLOCKQUOTE>
<DIV>I assume <FONT face=3DArial size=3D2>"localhost:2036" is the =
address of a=20
Net4j server.<STRONG>yes</STRONG><BR>How does JPA manage to get an =
IConnector=20
that is needed to open a CDOSession?</FONT></DIV>
<DIV><FONT face=3DArial size=3D2><STRONG>[SIMON] It is all under the =
hood. I just=20
pass the parameters. We can add more parameters... or access=20
CDOEntityManagerFactory directly... Or Subclass EntityManagerFactory =
for our=20
special need.</STRONG></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><STRONG></STRONG><BR></FONT><FONT =
face=3DArial=20
size=3D2><STRONG>[SIMON] It is internally. We could get =
IManageContainer through=20
our API.. but for sure EntityManager doesn't have that=20
concept.<BR></DIV></STRONG></FONT>
<BLOCKQUOTE cite=3Dmid:fb2lm2$fdk$1@build.eclipse.org type=3D"cite">
<DIV align=3Dleft>&nbsp;<FONT face=3DArial size=3D2>EntityManager =
manager =3D=20
factory.createEntityManager(map);</FONT></DIV></BLOCKQUOTE >
<DIV>Does this instance of EntityManager encapsulate a =
CDOSession?<BR><FONT=20
face=3DArial size=3D2><STRONG>[SIMON] EntityManager encapsulate a =
transaction. If=20
EntityManager isn't part of a XA transaction you can call =
..getTransaction to=20
be able to rollback.</STRONG></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><STRONG>[SIMON] EntityManagerFactory =
encapsulate=20
the session</STRONG></FONT></DIV>
<DIV><STRONG><FONT face=3DArial size=3D2>[SIMON] Provider encapsulate =
the=20
IConnector.</FONT><BR></STRONG></DIV>
<BLOCKQUOTE cite=3Dmid:fb2lm2$fdk$1@build.eclipse.org type=3D"cite">
<DIV align=3Dleft><FONT face=3DArial><FONT size=3D2><FONT =
face=3DArial size=3D2><FONT=20
size=3D2>
=
<P>manager.getTransaction().begin();</P></FONT></FONT></FONT ></FONT></DIV=
></BLOCKQUOTE>
<DIV>In the code below I can't find a line that makes a transaction=20
necessary.<BR>Is it to encapsulate a CDOView? .. </DIV>
<DIV>&nbsp;</DIV>
<DIV><STRONG>[SIMON]Yes I know.. it was just an example... It always =
start a=20
CDOTransaction... for simplicity. Because I don't know if someone will =
modify=20
something<BR></STRONG><BR></DIV>
<BLOCKQUOTE cite=3Dmid:fb2lm2$fdk$1@build.eclipse.org type=3D"cite">
<DIV align=3Dleft><FONT face=3DArial size=3D2>Resource resource =3D=20
manager.find(Resource.class, "/test1");</FONT></DIV></BLOCKQUOTE>
<DIV>What does happen here behind the scenes?</DIV>
<DIV><STRONG>[SIMON] The query is now yet developped in CDO .. so in =
this=20
case... for a Resource.class it will call=20
transaction.getResourcePath(...);&nbsp; To get a =
resource.<BR></STRONG>Is the=20
"/test1" resource loaded from a CDO repository?</DIV>
<DIV><STRONG>[SIMON] Yes</STRONG><BR>Have you provided any logic for=20
that?<BR>Is the resource contained in a ResourceSet?</DIV>
<DIV><STRONG>[Yes]</STRONG><BR><BR></DIV>
<BLOCKQUOTE cite=3Dmid:fb2lm2$fdk$1@build.eclipse.org type=3D"cite">
<DIV align=3Dleft><FONT face=3DArial size=3D2>long timeStart =3D=20
System.currentTimeMillis();</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial =
size=3D2>Iterator&lt;EObject&gt; itr =3D=20
resource.getAllContents();</FONT></DIV></BLOCKQUOTE>
<DIV>Is there a special reason why you call =
get<B>All</B>Contents()?</DIV>
<DIV><STRONG>[SIMON] It is only an example that it is working. From =
here it is=20
the same with or without CDO</STRONG><BR>Can Vehicles contain other=20
Vehicles?</DIV>
<DIV><STRONG>[SIMON} It is not really important for this exmaple... =
but it=20
contains transmission... and other references.</STRONG><BR>Just =
curious=20
;-)<BR><BR></DIV>
<BLOCKQUOTE cite=3Dmid:fb2lm2$fdk$1@build.eclipse.org type=3D"cite">
<DIV align=3Dleft><FONT face=3DArial size=3D2>int count =
=3D0;</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>while ( itr.hasNext() =
)</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>{</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>Vehicle vehicle =3D =
(Vehicle)=20
itr.next();</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>if (count % 1000 =
=3D=3D 0 &amp;&amp;=20
count !=3D 0)</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>{</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>long millis =3D=20
(System.currentTimeMillis() - timeStart);</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>if (millis !=3D =
0)</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial =
size=3D2>System.out.println("TIME TO TAKE " +=20
count + " "+ millis + " "+ (count *1000 / millis )+ " objects / sec" =

);</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>}</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>count++;</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>}</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial =
size=3D2>System.out.println("TIME TO TAKE " +=20
count + " "+ (System.currentTimeMillis() -=20
timeStart));</FONT></DIV></BLOCKQUOTE><BR>
<BLOCKQUOTE cite=3Dmid:fb2lm2$fdk$1@build.eclipse.org =
type=3D"cite"><FONT=20
size=3D2></FONT>
<DIV align=3Dleft><FONT size=3D2><FONT face=3DArial>Query query =3D=20
manager.createNativeQuery(</FONT></FONT><FONT face=3DArial =
color=3D#2a00ff=20
size=3D2>"&lt;native QUERY&gt;"</FONT><FONT size=3D2><FONT=20
face=3DArial>);</FONT></FONT></DIV>
<DIV align=3Dleft><FONT size=3D2><FONT face=3DArial>List =
returnResult =3D=20
query.getResultList();</FONT></FONT></DIV></BLOCKQUOTE>
<DIV>Is this pseudo code?</DIV>
<DIV><STRONG>[SIMON] No it is my exmaple I was running. I modified a =
few line=20
directly here... so maybe it is not compiling. I change the query =
String so we=20
can put anything there.</STRONG><BR>What is the query?</DIV>
<DIV><STRONG>[SIMON] Could be anything.. that the back-end will =
receive. I=20
will change that. Query is in fact a CDOQuery...</STRONG><BR>What is =
the=20
result?</DIV>
<DIV><FONT face=3DArial size=3D2><STRONG>[SIMON] QueryRequest receive =
a list of=20
CDOID from now... I need to build a special list (maybe you already =
have one)=20
that resolve object as it goes.</STRONG></FONT><BR></DIV>
<BLOCKQUOTE cite=3Dmid:fb2lm2$fdk$1@build.eclipse.org type=3D"cite">
<DIV align=3Dleft><FONT size=3D2><FONT size=3D2>
<P>manager.getTransaction().commit();</P></FONT></FONT></DIV >
<DIV align=3Dleft><FONT face=3DArial =
size=3D2>manager.close();</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>factory.close();</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>Simon</FONT></DIV></BLOCKQUOTE>
<DIV><BR>The idea is appealing but, as you can see, I still don't know =
very=20
much about it ;-)<BR><FONT face=3DArial size=3D2><STRONG>[SIMON] This =
is good=20
!!!</STRONG></FONT></DIV><STRONG><FONT face=3DArial=20
size=3D2></FONT></STRONG></BLOCKQUOTE>
<BLOCKQUOTE=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV><FONT face=3DArial size=3D2></FONT><FONT face=3DArial size=3D2><A =

=
href=3D"http://java.sun.com/javaee/5/docs/api/">http://java.sun.com/javae=
e/5/docs/api/</A></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><STRONG>Look for EntityManager for =
the complete=20
possibility.</STRONG></FONT></DIV><FONT face=3DArial =
size=3D2></FONT></BLOCKQUOTE>
<BLOCKQUOTE=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV><FONT face=3DArial size=3D2></FONT><FONT face=3DArial=20
=
size=3D2></FONT><BR>Cheers<BR>/Eike<BR><BR><BR></DIV ></BLOCKQUOTE></BODY>=
</HTML>

------=_NextPart_000_0255_01C7EA0D.4E55F8C0--
Re: [CDO] JPA [message #609575 is a reply to message #94789] Wed, 29 August 2007 06:37 Go to previous message
Eike Stepper is currently offline Eike StepperFriend
Messages: 6682
Registered: July 2009
Senior Member
This is a multi-part message in MIME format.
--------------090909010003080502050301
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Simon McDuff schrieb:
> I started to put JPA interface in front of CDO.
>
> I added a QueryRequest as well. Right now it does only support native
> Query.. but still. (Delegate the QueryString to the back end...)
>
> We added QueryRequest and a QueryIndication...
>
>
> Right now the query is only a string :-(... It is far to have all the
> feature that JPA gives.. but we need to start somewhere.
>
> What do you think Eike ? It is worth it.. the complete the query
> mechanism ?
Having a query mechanism is very cool. It is on my plan anymway, but not
at the very top ;-)

The only thing I knew about JPA was that it started to exist.
Since it's not part of JSE we have to separate support for it.
You say you put CDO behind the JPA interface. Is it completely hidden?
How do they integrate?
What is "native query"?

You see, a lot of questions and more are below ;-)

> and to add XA transaction ?
We should discuss that in a separate thread.
Please explain where you'd like to integrate XA and what benefit you expect.

> HERE some code:
>
> HashMap map = new HashMap();
>
> map.put("packages", new EPackage[] { Model1Package.eINSTANCE } );
> map.put("repositoryName", "repo1");
>
> EntityManagerFactory factory =
> Persistence.createEntityManagerFactory("localhost:2036",map);
I assume "localhost:2036" is the address of a Net4j server.
How does JPA manage to get an IConnector that is needed to open a
CDOSession?

> EntityManager manager = factory.createEntityManager(map);
Does this instance of EntityManager encapsulate a CDOSession?

> manager.getTransaction().begin();
>
In the code below I can't find a line that makes a transaction necessary.
Is it to encapsulate a CDOView?

> Resource resource = manager.find(Resource.class, "/test1");
What does happen here behind the scenes?
Is the "/test1" resource loaded from a CDO repository?
Have you provided any logic for that?
Is the resource contained in a ResourceSet?

> long timeStart = System.currentTimeMillis();
> Iterator<EObject> itr = resource.getAllContents();
Is there a special reason why you call get*All*Contents()?
Can Vehicles contain other Vehicles?
Just curious ;-)

> int count =0;
> while ( itr.hasNext() )
> {
> Vehicle vehicle = (Vehicle) itr.next();
> if (count % 1000 == 0 && count != 0)
> {
> long millis = (System.currentTimeMillis() - timeStart);
> if (millis != 0)
> System.out.println("TIME TO TAKE " + count + " "+ millis + " "+ (count
> *1000 / millis )+ " objects / sec" );
> }
> count++;
> }
> System.out.println("TIME TO TAKE " + count + " "+
> (System.currentTimeMillis() - timeStart));

> Query query = manager.createNativeQuery("<native QUERY>");
> List returnResult = query.getResultList();
Is this pseudo code?
What is the query?
What is the result?

> manager.getTransaction().commit();
>
> manager.close();
>
> factory.close();
>
> Simon

The idea is appealing but, as you can see, I still don't know very much
about it ;-)

Cheers
/Eike



--------------090909010003080502050301
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Simon McDuff schrieb:
<blockquote cite="mid:fb2lm2$fdk$1@build.eclipse.org" type="cite">
<meta http-equiv="Content-Type" content="text/html; ">
<meta content="MSHTML 6.00.6000.16525" name="GENERATOR">
<style></style>
<div><font face="Arial" size="2">I started to put JPA interface in
front of CDO. </font></div>
<div>&nbsp;</div>
<div><font face="Arial" size="2">I added a QueryRequest as well.
Right now it does only support native Query.. but still.&nbsp; (Delegate the
QueryString to the back end...)</font></div>
<div>&nbsp;</div>
<div><font face="Arial" size="2">We added QueryRequest and a
QueryIndication...</font></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><font face="Arial" size="2">Right now the query is only a string
:-(... It is far to have all the feature that JPA gives.. but we need
to start somewhere.</font></div>
<div>&nbsp;</div>
<div align="left"><font face="Arial"><font size="2"><font face="Arial"
size="2">What do you think Eike ? It is worth it..&nbsp; the complete the
query mechanism ? </font></font></font></div>
</blockquote>
Having a query mechanism is very cool. It is on my plan anymway, but
not at the very top ;-)<br>
<br>
The only thing I knew about JPA was that it started to exist.<br>
Since it's not part of JSE we have to separate support for it.<br>
You say you put CDO behind the JPA interface. Is it completely hidden?<br>
How do they integrate?<br>
What is "native query"?<br>
<br>
You see, a lot of questions and more are below ;-)<br>
<br>
<blockquote cite="mid:fb2lm2$fdk$1@build.eclipse.org" type="cite">
<div align="left"><font face="Arial"><font size="2"><font face="Arial"
size="2">and to add XA transaction ?</font></font></font></div>
</blockquote>
We should discuss that in a separate thread.<br>
Please explain where you'd like to integrate XA and what benefit you
expect.<br>
<br>
<blockquote cite="mid:fb2lm2$fdk$1@build.eclipse.org" type="cite">
<div align="left">&nbsp; <font face="Arial" size="2">HERE some code:</font></div>
<div align="left">&nbsp;</div>
<div align="left"><font face="Arial" size="2">HashMap map = new
HashMap();</font></div>
<div align="left">&nbsp;</div>
<div align="left"><font face="Arial" size="2">map.put("packages", new
EPackage[] { Model1Package.eINSTANCE } );</font></div>
<div align="left"><font face="Arial" size="2">map.put("repositoryName",
"repo1");</font></div>
<div align="left">&nbsp;</div>
<div align="left"><font face="Arial" size="2">EntityManagerFactory
factory = Persistence.createEntityManagerFactory("localhost:2036",map); </font></div>
</blockquote>
I assume <font face="Arial" size="2">"localhost:2036" is the address
of a Net4j server.<br>
How does JPA manage to get an IConnector that is needed to open a
CDOSession?<br>
<br>
</font>
<blockquote cite="mid:fb2lm2$fdk$1@build.eclipse.org" type="cite">
<div align="left">&nbsp;<font face="Arial" size="2">EntityManager manager
= factory.createEntityManager(map);</font></div>
</blockquote>
Does this instance of EntityManager encapsulate a CDOSession?<br>
<br>
<blockquote cite="mid:fb2lm2$fdk$1@build.eclipse.org" type="cite">
<div align="left"><font face="Arial"><font size="2"><font face="Arial"
size="2"><font size="2">
<p>manager.getTransaction().begin();</p>
</font></font></font></font></div>
</blockquote>
In the code below I can't find a line that makes a transaction
necessary.<br>
Is it to encapsulate a CDOView?<br>
<br>
<blockquote cite="mid:fb2lm2$fdk$1@build.eclipse.org" type="cite">
<div align="left"><font face="Arial" size="2">Resource resource =
manager.find(Resource.class, "/test1");</font></div>
</blockquote>
What does happen here behind the scenes?<br>
Is the "/test1" resource loaded from a CDO repository?<br>
Have you provided any logic for that?<br>
Is the resource contained in a ResourceSet?<br>
<br>
<blockquote cite="mid:fb2lm2$fdk$1@build.eclipse.org" type="cite">
<div align="left"><font face="Arial" size="2">long timeStart =
System.currentTimeMillis();</font></div>
<div align="left"><font face="Arial" size="2">Iterator&lt;EObject&gt;
itr = resource.getAllContents();</font></div>
</blockquote>
Is there a special reason why you call get<b>All</b>Contents()?<br>
Can Vehicles contain other Vehicles?<br>
Just curious ;-)<br>
<br>
<blockquote cite="mid:fb2lm2$fdk$1@build.eclipse.org" type="cite">
<div align="left"><font face="Arial" size="2">int count =0;</font></div>
<div align="left"><font face="Arial" size="2">while ( itr.hasNext() )</font></div>
<div align="left"><font face="Arial" size="2">{</font></div>
<div align="left"><font face="Arial" size="2">Vehicle vehicle =
(Vehicle) itr.next();</font></div>
<div align="left"><font face="Arial" size="2">if (count % 1000 == 0
&amp;&amp; count != 0)</font></div>
<div align="left"><font face="Arial" size="2">{</font></div>
<div align="left"><font face="Arial" size="2">long millis =
(System.currentTimeMillis() - timeStart);</font></div>
<div align="left"><font face="Arial" size="2">if (millis != 0)</font></div>
<div align="left"><font face="Arial" size="2">System.out.println("TIME
TO TAKE " + count + " "+ millis + " "+ (count *1000 / millis )+ "
objects / sec" );</font></div>
<div align="left"><font face="Arial" size="2">}</font></div>
<div align="left"><font face="Arial" size="2">count++;</font></div>
<div align="left"><font face="Arial" size="2">}</font></div>
<div align="left"><font face="Arial" size="2">System.out.println("TIME
TO TAKE " + count + " "+ (System.currentTimeMillis() - timeStart));</font></div>
</blockquote>
<br>
<blockquote cite="mid:fb2lm2$fdk$1@build.eclipse.org" type="cite"><font
size="2">
</font>
<div align="left"><font size="2"><font face="Arial">Query query =
manager.createNativeQuery(</font></font><font color="#2a00ff"
face="Arial" size="2">"&lt;native QUERY&gt;"</font><font size="2"><font
face="Arial">);</font></font></div>
<div align="left"><font size="2"><font face="Arial">List returnResult
= query.getResultList();</font></font></div>
</blockquote>
Is this pseudo code?<br>
What is the query?<br>
What is the result?<br>
<br>
<blockquote cite="mid:fb2lm2$fdk$1@build.eclipse.org" type="cite">
<div align="left"><font size="2"><font size="2">
<p>manager.getTransaction().commit();</p>
</font></font></div>
<div align="left"><font face="Arial" size="2">manager.close();</font></div>
<div align="left">&nbsp;</div>
<div><font face="Arial" size="2">factory.close();</font></div>
<div>&nbsp;</div>
<div><font face="Arial" size="2">Simon</font></div>
</blockquote>
<br>
The idea is appealing but, as you can see, I still don't know very much
about it ;-)<br>
<br>
Cheers<br>
/Eike<br>
<br>
<br>
</body>
</html>

--------------090909010003080502050301--


Re: [CDO] JPA [message #609579 is a reply to message #94807] Wed, 29 August 2007 11:22 Go to previous message
Simon Mc Duff is currently offline Simon Mc DuffFriend
Messages: 596
Registered: July 2009
Senior Member
This is a multi-part message in MIME format.

------=_NextPart_000_0255_01C7EA0D.4E55F8C0
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

First we provide this API in our company.. because we need to base our =
work on top of some standard.. to do our query...and for the transaction =
management.=20

So if someone don't want to use a specific technologie.. the code =
doesn't change that much...


[comments in bold]


"Eike Stepper" <stepper@sympedia.de> wrote in message =
news:fb3471$29e$1@build.eclipse.org...
Simon McDuff schrieb:=20
I started to put JPA interface in front of CDO.=20

I added a QueryRequest as well. Right now it does only support =
native Query.. but still. (Delegate the QueryString to the back end...)

We added QueryRequest and a QueryIndication...


Right now the query is only a string :-(... It is far to have all =
the feature that JPA gives.. but we need to start somewhere.

What do you think Eike ? It is worth it.. the complete the query =
mechanism ?=20
Having a query mechanism is very cool. It is on my plan anymway, but =
not at the very top ;-)

The only thing I knew about JPA was that it started to exist.
Since it's not part of JSE we have to separate support for it.
You say you put CDO behind the JPA interface. Is it completely hidden?
[SIMON] Yes, But for specific things you could still Cast =
EntityManager as an CDOEntityManager

How do they integrate?
What is "native query"?
[SIMON] I'm reading the spec right now to determine what is the =
specification. But for the first things I did... it is only a String =
that a pass to my back-end. I will develop that.
You see, a lot of questions and more are below ;-)


and to add XA transaction ?
We should discuss that in a separate thread.
Please explain where you'd like to integrate XA and what benefit you =
expect.
[SIMON] If we would like to be part of a XA transaction. It could be =
another CDOTransaction that we would like to commit at the same time and =
be sure that both of them are committing... to keep our persistent =
objects graphs consistent. If one fail.. we will fail the other..


HERE some code:

HashMap map =3D new HashMap();

map.put("packages", new EPackage[] { Model1Package.eINSTANCE } );
map.put("repositoryName", "repo1");

EntityManagerFactory factory =3D =
Persistence.createEntityManagerFactory("localhost:2036",map);
I assume "localhost:2036" is the address of a Net4j server.yes
How does JPA manage to get an IConnector that is needed to open a =
CDOSession?
[SIMON] It is all under the hood. I just pass the parameters. We can =
add more parameters... or access CDOEntityManagerFactory directly... Or =
Subclass EntityManagerFactory for our special need.

[SIMON] It is internally. We could get IManageContainer through our =
API.. but for sure EntityManager doesn't have that concept.

EntityManager manager =3D factory.createEntityManager(map);
Does this instance of EntityManager encapsulate a CDOSession?
[SIMON] EntityManager encapsulate a transaction. If EntityManager =
isn't part of a XA transaction you can call .getTransaction to be able =
to rollback.
[SIMON] EntityManagerFactory encapsulate the session
[SIMON] Provider encapsulate the IConnector.

manager.getTransaction().begin();

In the code below I can't find a line that makes a transaction =
necessary.
Is it to encapsulate a CDOView? ..=20

[SIMON]Yes I know.. it was just an example... It always start a =
CDOTransaction... for simplicity. Because I don't know if someone will =
modify something


Resource resource =3D manager.find(Resource.class, "/test1");
What does happen here behind the scenes?
[SIMON] The query is now yet developped in CDO .. so in this case... =
for a Resource.class it will call transaction.getResourcePath(...); To =
get a resource.
Is the "/test1" resource loaded from a CDO repository?
[SIMON] Yes
Have you provided any logic for that?
Is the resource contained in a ResourceSet?
[Yes]


long timeStart =3D System.currentTimeMillis();
Iterator<EObject> itr =3D resource.getAllContents();
Is there a special reason why you call getAllContents()?
[SIMON] It is only an example that it is working. From here it is the =
same with or without CDO
Can Vehicles contain other Vehicles?
[SIMON} It is not really important for this exmaple... but it contains =
transmission... and other references.
Just curious ;-)


int count =3D0;
while ( itr.hasNext() )
{
Vehicle vehicle =3D (Vehicle) itr.next();
if (count % 1000 =3D=3D 0 && count !=3D 0)
{
long millis =3D (System.currentTimeMillis() - timeStart);
if (millis !=3D 0)
System.out.println("TIME TO TAKE " + count + " "+ millis + " "+ =
(count *1000 / millis )+ " objects / sec" );
}
count++;
}
System.out.println("TIME TO TAKE " + count + " "+ =
(System.currentTimeMillis() - timeStart));


Query query =3D manager.createNativeQuery("<native QUERY>");
List returnResult =3D query.getResultList();
Is this pseudo code?
[SIMON] No it is my exmaple I was running. I modified a few line =
directly here... so maybe it is not compiling. I change the query String =
so we can put anything there.
What is the query?
[SIMON] Could be anything.. that the back-end will receive. I will =
change that. Query is in fact a CDOQuery...
What is the result?
[SIMON] QueryRequest receive a list of CDOID from now... I need to =
build a special list (maybe you already have one) that resolve object as =
it goes.

manager.getTransaction().commit();

manager.close();

factory.close();

Simon

The idea is appealing but, as you can see, I still don't know very =
much about it ;-)
[SIMON] This is good !!!
http://java.sun.com/javaee/5/docs/api/
Look for EntityManager for the complete possibility.

Cheers
/Eike



------=_NextPart_000_0255_01C7EA0D.4E55F8C0
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type =
content=3Dtext/html;charset=3DISO-8859-1>
<META content=3D"MSHTML 6.00.2900.3157" name=3DGENERATOR></HEAD>
<BODY text=3D#000000 bgColor=3D#ffffff>
<DIV><FONT face=3DArial size=3D2>First we provide this API in our =
company.. because=20
we need to base our work on top of some standard.. to do our query...and =
for the=20
transaction management. </FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>So if someone don't want to use a =
specific=20
technologie.. the code doesn't change that much...</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2><STRONG>[comments in =
bold]</STRONG></FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV>"Eike Stepper" &lt;<A=20
href=3D"mailto:stepper@sympedia.de">stepper@sympedia.de</A>&gt; wrote in =
message=20
<A=20
href=3D"news:fb3471$29e$1@build.eclipse.org">news:fb3471$29e$1@build.ecli=
pse.org</A>...</DIV>
<BLOCKQUOTE=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">Simon=20
McDuff schrieb:=20
<BLOCKQUOTE cite=3Dmid:fb2lm2$fdk$1@build.eclipse.org type=3D"cite">
<META content=3D"MSHTML 6.00.6000.16525" name=3DGENERATOR>
<STYLE></STYLE>

<DIV><FONT face=3DArial size=3D2>I started to put JPA interface in =
front of CDO.=20
</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>I added a QueryRequest as well. =
Right now it=20
does only support native Query.. but still.&nbsp; (Delegate the =
QueryString=20
to the back end...)</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>We added QueryRequest and a=20
QueryIndication...</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>Right now the query is only a =
string :-(... It=20
is far to have all the feature that JPA gives.. but we need to start =

somewhere.</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV align=3Dleft><FONT face=3DArial><FONT size=3D2><FONT =
face=3DArial size=3D2>What=20
do you think Eike ? It is worth it..&nbsp; the complete the query =
mechanism=20
? </FONT></FONT></FONT></DIV></BLOCKQUOTE>
<DIV>Having a query mechanism is very cool. It is on my plan anymway, =
but not=20
at the very top ;-)<BR><BR>The only thing I knew about JPA was that it =
started=20
to exist.<BR>Since it's not part of JSE we have to separate support =
for=20
it.<BR>You say you put CDO behind the JPA interface. Is it completely=20
hidden?</DIV>
<DIV><STRONG>[SIMON] Yes, But for specific things you could still Cast =

EntityManager as an CDOEntityManager</STRONG></DIV><FONT face=3DArial=20
size=3D2></FONT>
<DIV><BR>How do they integrate?<BR>What is "native query"?</DIV>
<DIV><FONT face=3DArial size=3D2>[SIMON] I'm reading the spec right =
now to=20
determine what is the specification. But for the first things I did... =
it is=20
only a String that a pass to my back-end. I will develop =
that.</FONT><BR>You=20
see, a lot of questions and more are below ;-)<BR><BR></DIV>
<BLOCKQUOTE cite=3Dmid:fb2lm2$fdk$1@build.eclipse.org type=3D"cite">
<DIV align=3Dleft><FONT face=3DArial><FONT size=3D2><FONT =
face=3DArial size=3D2>and to=20
add XA transaction ?</FONT></FONT></FONT></DIV></BLOCKQUOTE>
<DIV>We should discuss that in a separate thread.<BR>Please explain =
where=20
you'd like to integrate XA and what benefit you expect.</DIV>
<DIV><STRONG>[SIMON] If we would like to be part of a XA transaction. =
It could=20
be another CDOTransaction that we would like to commit at the same =
time and be=20
sure that both of them are committing... to keep our persistent =
objects graphs=20
consistent. If one fail.. we will fail the =
other..<BR></STRONG><BR></DIV>
<BLOCKQUOTE cite=3Dmid:fb2lm2$fdk$1@build.eclipse.org type=3D"cite">
<DIV align=3Dleft>&nbsp; <FONT face=3DArial size=3D2>HERE some =
code:</FONT></DIV>
<DIV align=3Dleft>&nbsp;</DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>HashMap map =3D new=20
HashMap();</FONT></DIV>
<DIV align=3Dleft>&nbsp;</DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>map.put("packages", =
new EPackage[] {=20
Model1Package.eINSTANCE } );</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial =
size=3D2>map.put("repositoryName",=20
"repo1");</FONT></DIV>
<DIV align=3Dleft>&nbsp;</DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>EntityManagerFactory =
factory =3D=20
=
Persistence.createEntityManagerFactory("localhost:2036",map); </FONT></DIV=
></BLOCKQUOTE>
<DIV>I assume <FONT face=3DArial size=3D2>"localhost:2036" is the =
address of a=20
Net4j server.<STRONG>yes</STRONG><BR>How does JPA manage to get an =
IConnector=20
that is needed to open a CDOSession?</FONT></DIV>
<DIV><FONT face=3DArial size=3D2><STRONG>[SIMON] It is all under the =
hood. I just=20
pass the parameters. We can add more parameters... or access=20
CDOEntityManagerFactory directly... Or Subclass EntityManagerFactory =
for our=20
special need.</STRONG></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><STRONG></STRONG><BR></FONT><FONT =
face=3DArial=20
size=3D2><STRONG>[SIMON] It is internally. We could get =
IManageContainer through=20
our API.. but for sure EntityManager doesn't have that=20
concept.<BR></DIV></STRONG></FONT>
<BLOCKQUOTE cite=3Dmid:fb2lm2$fdk$1@build.eclipse.org type=3D"cite">
<DIV align=3Dleft>&nbsp;<FONT face=3DArial size=3D2>EntityManager =
manager =3D=20
factory.createEntityManager(map);</FONT></DIV></BLOCKQUOTE >
<DIV>Does this instance of EntityManager encapsulate a =
CDOSession?<BR><FONT=20
face=3DArial size=3D2><STRONG>[SIMON] EntityManager encapsulate a =
transaction. If=20
EntityManager isn't part of a XA transaction you can call =
..getTransaction to=20
be able to rollback.</STRONG></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><STRONG>[SIMON] EntityManagerFactory =
encapsulate=20
the session</STRONG></FONT></DIV>
<DIV><STRONG><FONT face=3DArial size=3D2>[SIMON] Provider encapsulate =
the=20
IConnector.</FONT><BR></STRONG></DIV>
<BLOCKQUOTE cite=3Dmid:fb2lm2$fdk$1@build.eclipse.org type=3D"cite">
<DIV align=3Dleft><FONT face=3DArial><FONT size=3D2><FONT =
face=3DArial size=3D2><FONT=20
size=3D2>
=
<P>manager.getTransaction().begin();</P></FONT></FONT></FONT ></FONT></DIV=
></BLOCKQUOTE>
<DIV>In the code below I can't find a line that makes a transaction=20
necessary.<BR>Is it to encapsulate a CDOView? .. </DIV>
<DIV>&nbsp;</DIV>
<DIV><STRONG>[SIMON]Yes I know.. it was just an example... It always =
start a=20
CDOTransaction... for simplicity. Because I don't know if someone will =
modify=20
something<BR></STRONG><BR></DIV>
<BLOCKQUOTE cite=3Dmid:fb2lm2$fdk$1@build.eclipse.org type=3D"cite">
<DIV align=3Dleft><FONT face=3DArial size=3D2>Resource resource =3D=20
manager.find(Resource.class, "/test1");</FONT></DIV></BLOCKQUOTE>
<DIV>What does happen here behind the scenes?</DIV>
<DIV><STRONG>[SIMON] The query is now yet developped in CDO .. so in =
this=20
case... for a Resource.class it will call=20
transaction.getResourcePath(...);&nbsp; To get a =
resource.<BR></STRONG>Is the=20
"/test1" resource loaded from a CDO repository?</DIV>
<DIV><STRONG>[SIMON] Yes</STRONG><BR>Have you provided any logic for=20
that?<BR>Is the resource contained in a ResourceSet?</DIV>
<DIV><STRONG>[Yes]</STRONG><BR><BR></DIV>
<BLOCKQUOTE cite=3Dmid:fb2lm2$fdk$1@build.eclipse.org type=3D"cite">
<DIV align=3Dleft><FONT face=3DArial size=3D2>long timeStart =3D=20
System.currentTimeMillis();</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial =
size=3D2>Iterator&lt;EObject&gt; itr =3D=20
resource.getAllContents();</FONT></DIV></BLOCKQUOTE>
<DIV>Is there a special reason why you call =
get<B>All</B>Contents()?</DIV>
<DIV><STRONG>[SIMON] It is only an example that it is working. From =
here it is=20
the same with or without CDO</STRONG><BR>Can Vehicles contain other=20
Vehicles?</DIV>
<DIV><STRONG>[SIMON} It is not really important for this exmaple... =
but it=20
contains transmission... and other references.</STRONG><BR>Just =
curious=20
;-)<BR><BR></DIV>
<BLOCKQUOTE cite=3Dmid:fb2lm2$fdk$1@build.eclipse.org type=3D"cite">
<DIV align=3Dleft><FONT face=3DArial size=3D2>int count =
=3D0;</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>while ( itr.hasNext() =
)</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>{</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>Vehicle vehicle =3D =
(Vehicle)=20
itr.next();</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>if (count % 1000 =
=3D=3D 0 &amp;&amp;=20
count !=3D 0)</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>{</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>long millis =3D=20
(System.currentTimeMillis() - timeStart);</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>if (millis !=3D =
0)</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial =
size=3D2>System.out.println("TIME TO TAKE " +=20
count + " "+ millis + " "+ (count *1000 / millis )+ " objects / sec" =

);</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>}</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>count++;</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>}</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial =
size=3D2>System.out.println("TIME TO TAKE " +=20
count + " "+ (System.currentTimeMillis() -=20
timeStart));</FONT></DIV></BLOCKQUOTE><BR>
<BLOCKQUOTE cite=3Dmid:fb2lm2$fdk$1@build.eclipse.org =
type=3D"cite"><FONT=20
size=3D2></FONT>
<DIV align=3Dleft><FONT size=3D2><FONT face=3DArial>Query query =3D=20
manager.createNativeQuery(</FONT></FONT><FONT face=3DArial =
color=3D#2a00ff=20
size=3D2>"&lt;native QUERY&gt;"</FONT><FONT size=3D2><FONT=20
face=3DArial>);</FONT></FONT></DIV>
<DIV align=3Dleft><FONT size=3D2><FONT face=3DArial>List =
returnResult =3D=20
query.getResultList();</FONT></FONT></DIV></BLOCKQUOTE>
<DIV>Is this pseudo code?</DIV>
<DIV><STRONG>[SIMON] No it is my exmaple I was running. I modified a =
few line=20
directly here... so maybe it is not compiling. I change the query =
String so we=20
can put anything there.</STRONG><BR>What is the query?</DIV>
<DIV><STRONG>[SIMON] Could be anything.. that the back-end will =
receive. I=20
will change that. Query is in fact a CDOQuery...</STRONG><BR>What is =
the=20
result?</DIV>
<DIV><FONT face=3DArial size=3D2><STRONG>[SIMON] QueryRequest receive =
a list of=20
CDOID from now... I need to build a special list (maybe you already =
have one)=20
that resolve object as it goes.</STRONG></FONT><BR></DIV>
<BLOCKQUOTE cite=3Dmid:fb2lm2$fdk$1@build.eclipse.org type=3D"cite">
<DIV align=3Dleft><FONT size=3D2><FONT size=3D2>
<P>manager.getTransaction().commit();</P></FONT></FONT></DIV >
<DIV align=3Dleft><FONT face=3DArial =
size=3D2>manager.close();</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>factory.close();</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>Simon</FONT></DIV></BLOCKQUOTE>
<DIV><BR>The idea is appealing but, as you can see, I still don't know =
very=20
much about it ;-)<BR><FONT face=3DArial size=3D2><STRONG>[SIMON] This =
is good=20
!!!</STRONG></FONT></DIV><STRONG><FONT face=3DArial=20
size=3D2></FONT></STRONG></BLOCKQUOTE>
<BLOCKQUOTE=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV><FONT face=3DArial size=3D2></FONT><FONT face=3DArial size=3D2><A =

=
href=3D"http://java.sun.com/javaee/5/docs/api/">http://java.sun.com/javae=
e/5/docs/api/</A></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><STRONG>Look for EntityManager for =
the complete=20
possibility.</STRONG></FONT></DIV><FONT face=3DArial =
size=3D2></FONT></BLOCKQUOTE>
<BLOCKQUOTE=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV><FONT face=3DArial size=3D2></FONT><FONT face=3DArial=20
=
size=3D2></FONT><BR>Cheers<BR>/Eike<BR><BR><BR></DIV ></BLOCKQUOTE></BODY>=
</HTML>

------=_NextPart_000_0255_01C7EA0D.4E55F8C0--
Previous Topic:Persist EObject from BPEL20.XSD
Next Topic:[CDO][0.8.0]
Goto Forum:
  


Current Time: Fri Apr 19 12:56:32 GMT 2024

Powered by FUDForum. Page generated in 0.02395 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top