Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Modeling » EMF "Technology" (Ecore Tools, EMFatic, etc)  » [Teneo] New feature I've written for your consideration / discussion: extended references
[Teneo] New feature I've written for your consideration / discussion: extended references [message #609444] Thu, 09 August 2007 17:05
Jason Henriksen is currently offline Jason HenriksenFriend
Messages: 231
Registered: July 2009
Senior Member
This is a multi-part message in MIME format.

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

Hi Martin,

Over the last couple of weeks I've extended a feature of yours. The =
code I have is very experimental, but I wanted to explain the goal of it =
to you and see what you think. Please remember that I have all the code =
I'm about to describe working, but that I want to bounce it off of you =
to see if you might want to integrate it.

Basically, I've extended the anyURI xsd:type that you had previously =
discussed with me. I think this is a tremendously powerful feature but =
I needed to tweak a few things to make it work.
First off consider the url: hibernate://?dsname=3Dmystore&query1=3DFROM =
Writer

This url has two problems: First off, the dsname isn't something we want =
outside users of the reference to see and the query gives move =
information about our database than we want clients to have. The ideal =
reference url is "entity://#<object-type>.<id number>" so for example =
"entity://#Consumer.218". I know you already had a pipe delimited =
version that was similar to the URL that I want, but that code does a =
"select * from table" and then spins though the results. I have way =
more database records then machine memory, so I set up a new URL style =
so as not to mess up any existing functionality. (And my clients =
thought the . was more readable than the pipe, so I just went with it)

So first off why did I change the protocol name: EMF auto-resolves the =
references on the back end where the database is available and that is =
awesome. However if you on the front end with a SOAP interface between =
you and the data base, hibernate is unavailable to you. Thus the =
hibernate protocol is a bit of a misnomer. On the front end, the EMF =
resolver code will be configured to auto-matically make a SOAP request =
to the back end in order to resolve the URL. On the backend the =
resolver will be configured to use hibernate. But since it's not using =
hibernate in both layers, we thought that 'entity' would be a more =
correct term. It also disambiguates my new stuff from your existing =
code a bit.

The next part is the dsname section. This is something I'm still =
messing with, but for the most part I've just set a globally 'well =
known' name that all of the reference handlers use. I'm not sure that's =
going to scale to multi-threaded work, so I'll probably need to have a =
ThreadLocal variable that stores the name. However, the basic idea that =
the xml user shouldn't be able to see the datasource name stands. What =
if the name changes, but old XML gets used? For now, in my low =
contention model, just using a global name set through properties works, =
and if I have to make it more scalable later I can make that work.

Finally we have the "#<object-type>.<object-id>" section. Clearly this =
requires that all of your objects have a unique id number, but I'm happy =
to make that requirement. This URL is automatically converted into a =
query URL which teneo then handles normally. In order to do that =
converstion, I've enhanced teneo to take a user-supplied helper class. =
The default helper class (that we could ship with teneo) simply takes =
the "#Consumer.218" and converts it to the query "select * from Consumer =
where id-column =3D 218". It figures out what the appropriate id-column =
name is by inspecting the ecore package associated with the data source. =
Once we have the query, then I just let Teneo do its magic.

So once all that was done, I could import xml with my new reference =
format and the EMF would auto-resolve the proxy objects beautifully. =
From there I did a bit more hacking and property adding and made it so =
that EMF when writing XML would put out my new reference format as well =
and life was good. I did have to add a bit of EMF code to prevent it =
from asking to load the whole "file" and thus trying to load the whole =
DB again, but those changes were fairly minor.

All this code works and is looking fairly good. If you're interested in =
seeing it, I'll polish it up and send you a patch to consider. I'd also =
love to hear if you have any design ideas or concerns about this plan.

Thanks Martin!

Jason Henriksen






------=_NextPart_000_002B_01C7DA6C.D8907F20
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.2800.1561" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY>
<DIV><FONT face=3DArial size=3D2>Hi Martin,</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>Over the last couple of weeks I've =
extended a=20
feature of yours.&nbsp; The code I have is very experimental, but I =
wanted to=20
explain the goal of it to you and see what you think.&nbsp; Please =
remember that=20
I have all the code I'm about to describe working, but that I want to =
bounce it=20
off of you to see if you might want to integrate it.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>Basically,&nbsp;I've extended the =
anyURI xsd:type=20
that you had previously discussed with me.&nbsp; I think this is a =
tremendously=20
powerful feature but I needed to tweak a few things to make it=20
work.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>First off consider the url:&nbsp;=20
hibernate://?dsname=3Dmystore&amp;query1=3DFROM Writer</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>This url has two problems: First off, =
the dsname=20
isn't something we want outside users of the reference to see and the =
query=20
gives move information about our database than we want clients to =
have.&nbsp;=20
The ideal reference url is "entity://#&lt;object-type&gt;.&lt;id=20
number&gt;"&nbsp; so for example&nbsp; "entity://#Consumer.218".&nbsp; I =
know=20
you already had a&nbsp;pipe delimited version that was similar to the =
URL that I=20
want, but that code does a "select * from table" and then spins though =
the=20
results.&nbsp; I have way more database records then machine memory, so =
I set up=20
a new URL style so as not to mess up any existing functionality.&nbsp; =
(And my=20
clients thought the . was more readable than the pipe, so I just went =
with=20
it)</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>So first off why did I change the =
protocol=20
name:&nbsp; EMF auto-resolves the references on the back end where the =
database=20
is available and that is awesome.&nbsp; However if you on the front end =
with a=20
SOAP interface between you and the data base, hibernate is unavailable =
to=20
you.&nbsp; Thus the hibernate protocol is a bit of a misnomer.&nbsp; On =
the=20
front end, the EMF resolver code will be configured to auto-matically =
make a=20
SOAP request to the back end in order to resolve the URL.&nbsp; On the =
backend=20
the resolver will be configured to use hibernate.&nbsp; But since it's =
not using=20
hibernate in both layers, we thought that 'entity' would be a more =
correct=20
term.&nbsp; It also disambiguates my new stuff from your existing code a =

bit.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>The next part is the dsname =
section.&nbsp; This is=20
something I'm still messing with, but for the most part I've just set a =
globally=20
'well known' name that all of the reference handlers use.&nbsp; I'm not =
sure=20
that's going to scale to multi-threaded work, so I'll probably need to =
have a=20
ThreadLocal variable that stores the name.&nbsp; However, the basic idea =
that=20
the xml user shouldn't be able to see the datasource name stands.&nbsp; =
What if=20
the name changes, but old XML gets used?&nbsp; For now, in my low =
contention=20
model, just using a global name set through properties works, and if I =
have to=20
make it more scalable later I can make that work.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>Finally we have&nbsp;the=20
"#&lt;object-type&gt;.&lt;object-id&gt;" section.&nbsp; Clearly=20
this&nbsp;requires that all of your objects have a unique id number, but =
I'm=20
happy to make that requirement.&nbsp; This URL is automatically =
converted into a=20
query URL which teneo then handles normally.&nbsp; In order to do that=20
converstion, I've enhanced teneo to take a user-supplied helper =
class.&nbsp; The=20
default helper class (that we could ship with teneo) simply takes the=20
"#Consumer.218" and converts it to the query "select * from Consumer =
where=20
id-column =3D 218".&nbsp; It figures out what the appropriate id-column =
name is by=20
inspecting the ecore package associated with the data source.&nbsp; Once =
we have=20
the query, then I just let Teneo do its magic.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>So once all that was done, I could =
import xml with=20
my new reference format and the EMF would auto-resolve the proxy objects =

beautifully.&nbsp; From there I did a bit more hacking and property =
adding and=20
made it so that EMF when writing XML would put out my new reference =
format as=20
well and life was good.&nbsp; I did have to add a bit of EMF code to =
prevent it=20
from asking to load the whole "file" and thus trying to load the whole =
DB again,=20
but those changes were fairly minor.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>All this code works and is looking =
fairly=20
good.&nbsp; If you're interested in seeing it, I'll polish it up and =
send you a=20
patch to consider.&nbsp; I'd also love to hear if you have any design =
ideas or=20
concerns about this plan.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>Thanks Martin!</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial=20
size=3D2> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs p=
;&nbsp;&nbsp;&nbsp;=20
Jason Henriksen</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV>&nbsp;</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></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV></BODY></HTML>

------=_NextPart_000_002B_01C7DA6C.D8907F20--
Previous Topic:[TENEO] Sequence generation problem
Next Topic:[Teneo] Problems with inherited field
Goto Forum:
  


Current Time: Thu Apr 25 15:39:29 GMT 2024

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

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

Back to the top