Hey Pinaki Very good to hear that you also added initial support for the Tuscany DAS interfaces. BTW, let me ask you what are your plans to Fluid ? My personal opinion is that this might be a great addition to Tuscany, and we could have it as another DAS option in Tuscany. This could also promote a better integration between Tuscany and OpenJPA communities.
Thoughts ? On 7/31/07, Pinaki Poddar <[EMAIL PROTECTED]> wrote: > Hi Luciano, > In an earlier response to your question: > > if would be feasible to add a DAS interface[1] layer on top of Fluid > [2]? > My answer was: Yes. > > As backup of that answer, I just added the support for SDO DAS by > implementing DASFactory/DAS/Command > Using Fluid. These implementations are very thin-wrapper that delegates > to Fluid's JPA API. > > From a usage model, there is conceptual shift though from a SQL-based > DAS. > > Using Fluid based DAS, user code will look like: (there are some > TestCases that details it) > DataObject person = createPerson(ssn, "Fluid", "Guy", > 17); > DAS das = getDAS(); > Command insert = das.getCommand("INSERT"); > insert.setParameter(0, person); > insert.execute(); > > to persist a Person DataObject, or to query > DAS das = getDAS(); > Command query = das.getCommand("SELECT"); > String jpql = "SELECT o FROM Person o WHERE > o.firstName=?1 AND o.age=?2"; > query.setParameter(0, jpql); > query.setParameter(1, "Fluid"); > query.setParameter(2, 17); > DataObject list = query.executeQuery(); > List result = (List)list.get(0); > > Few notable points are: > 1. There is no SQL. > 2. All object level paramaters are set via Command.setParameter() > method. > Insert command acts on a Person DataObject (insert can be cascaded > transitively, btw) > which is passed to it as parameter. > 3. Query is JPQL. This is a powerful contribution of JPA. The > namespace of the query > tokens are Object Domain tokens i.e. SDO Type and Property names; > not database > Table or Column names. Join is navigation across a SDO DataGraph. > OpenJPA will take care of creating the appropriate SQL. > User can see/monitor what SQL is being generated by OpenJPA. > 4. DAS defined return of Command.executeQuery() as a DataObject. One > would prefer it > to be a List<DataObject> but to confirm to the API, I just return a > dynamic DataObject > whose 0-th Property is a List<DataObject> > > And, last but not the least, applyChanges(): > dataObject.setString("firstName", "Solid"); > das.applyChanges(dataObject); > Will make an UPDATE to the database. > > How does user application gets a DAS? > > DASFactory dasFactory = new FluidDASFactory("SDO-DAS"); > DAS dasFactory = dasfactory.createDAS(); > > 1. Everything about persistence service (from database connections to > ~200 configurable parameters > supported by OpenJPA) is configured in a single file: > META-INF/persistence.xml. > The unit name in this file should be <persistence-unit > unitName="SDO-DAS">. > 2. The overloaded DASFactory.createDAS() that takes > org.apache.tuscany.sdo.das.rdb.Config and other > parameters are supported simply by ignoring the argument :). > > > Regards > > > > > > > > > Pinaki Poddar > 972.834.2865 > > -----Original Message----- > From: Luciano Resende [mailto:[EMAIL PROTECTED] > Sent: Friday, July 27, 2007 3:25 PM > To: tuscany-dev@ws.apache.org > Subject: Re: Persistence of Service Data Objects using OpenJPA > > I haven't looked into this with any great detail, but I'd like to ask if > would be feasible to add a DAS interface[1] layer on top of Fluid [2]. > > Thoughts ? > > [1] > https://svn.apache.org/repos/asf/incubator/tuscany/java/das/rdb/src/main > /java/org/apache/tuscany/das/rdb/DAS.java > [2] http://people.apache.org/~ppoddar/fluid/site/welcome.html > > On 7/27/07, Frank Budinsky <[EMAIL PROTECTED]> wrote: > > Hi Pinaki, > > > > I think your project has a lot of potential. Another related aspect is > > > that there is interest in the SDO specification charter to discuss the > > > possibility of converging/supporting JAXB with static SDO in version > 3. > > JAXB2, as you may know, has a similar objective to support standard > POJOs. > > If that happens, then I see even more synergy with your approach. At > > Tuscany, we'd also be very interested in the bytecode generation that > > you mentioned you've prototyped in Fluid. Tuscany has done a little > > bit of sandbox prototyping in that area as well, but nobody has had > > enough time to really pursue it. > > > > Given this work, I think you should consider getting involved with the > > > DAS specification effort, if you haven't already. > > > > Frank. > > > > > > > > > > "Pinaki Poddar" <[EMAIL PROTECTED]> > > 07/27/2007 12:32 PM > > Please respond to > > tuscany-dev@ws.apache.org > > > > > > To > > <tuscany-dev@ws.apache.org> > > cc > > <[EMAIL PROTECTED]> > > Subject > > Persistence of Service Data Objects using OpenJPA > > > > > > > > > > > > > > Hi Frank, > > > > Thank you for your interest. Before I answer the specific questions > > > let me say few words to explain why Fluid is attempted at first place. > > > > A) there is a natural synergy between SDO model and the POJO model > > where JPA excels. > > B) Object Persistence (be it strongly-typed POJO or loosely-typed > > SDO) is complex problem by itself. Throw in quirk of multiple database > > > vendors -- and one really got a hard problem in hand. OpenJPA, > > Hibernate, TopLink had worked over many years to solve this problem to > > > a reasonable degree. SDO persistence should leverage that > > knowledge/effort instead of reinventing a costly wheel. > > > > > > 1) Yes -- you're right. The views expressed in > > > > http://www.osoa.org/display/Main/SDO+and+Java+Persistence+Architecture > > +% > > 28JPA%29 is in agreement with what promoted me to start the lab > > (actually I checked this page while researching and mentioned in in my > > > blog). According to this wiki page: "Work on the specification of a > > JPA data access service by the OSOA collaboration is envisaged > > sometime in the future but has not started yet." > > So Fluid can be considered as a prototype/exploration of similar > > ideas. > > > > 2) Yes, I am aware of SDO's generation of Java and I have played with > > > org.apache.tuscany.sdo.generate.XSD2JavaGenerator briefly. I decided > > to write yet another code generator for Fluid because > > > > a) SDO2POJOGenerator handles JPA annotations as it sources SDO > > Type information defined by XSDHelper.define(). > > The annotations in the class will be made optional as we proceed -- > > because JPA allows a separate mapping file Orm.xml thereby retaining > > POJO-ness of the persistent domain classes. > > > > b) The generated Java classes is "domain-ready" i.e. they are > > self-consistent and independent. Proof: they can be compiled without > > any other package other that java.util.*. Adding annotation, however, > > makes them compile-dependent on jpa.jar, but that dependency will be > > made optional as mapping information can be externalized in orm.xml. > > > > C) as far as SDO metamodel to Java metamodel mapping goes, it is > > essentially isomorphic (at least for this prototype). > > SDO2POJO does not introduce any extra artifact (see below). I have not > > > played enough with org.apache.tuscany.sdo.generate.XSD2JavaGenerator > > to make a fair judgement -- but most probably it is generating Java > > classes which has more dependency on framework classes in terms of > > (inheriting/implementing) as well as package imports. > > > > d) One mapping element is introduced in SDO-Java conversion > process. > > It is about "Container" SDO Types. I describe the details in Fluid > > website. The reason for defining a Container Type abstraction is > > better alignment for mapping to relational database (save extra joins > > and allow navigational query across multi-cardinality relation paths). > > > > > > 3) Besides the source code generation route, another possibilities > > is dynamic Java bytecode generation for SDO Types. Fluid prototyped > > that approach too. > > > > Regards -- > > > > > > Pinaki Poddar > > 972.834.2865 > > > > -----Original Message----- > > From: Frank Budinsky [mailto:[EMAIL PROTECTED] > > Sent: Friday, July 27, 2007 10:39 AM > > To: tuscany-dev@ws.apache.org > > Subject: RE: How does xsd:ID property type is distinguished from > > xsd:string > > > > Hi Pinaki, > > > > This looks very cool, especially that you've got a working prototype! > > I have a couple of questions. > > > > 1) This seems to overlap with the DAS plan described here: > > > > > > http://www.osoa.org/display/Main/SDO+and+Java+Persistence+Architecture > > +% > > 28JPA%29 > > > > I'm not very familiar with the DAS work myself, but there seems to be > > some overlap with your work. > > > > 2) I'm also wondering if you were aware that SDO also defines a > > mapping to static Java interfaces/classes. See section 5 of the SDO > spec: > > > > > > http://www.osoa.org/download/attachments/36/Java-SDO-Spec-v2.1.0-FINAL > > .p > > df?version=1 > > > > Does your SDO2POJOGenerator conform to that mapping? Have you tried > > the Tuscany static SDO generator > > (org.apache.tuscany.sdo.generate.XSD2JavaGenerator)? Is there any > > relashionship? > > > > Frank. > > > > "Pinaki Poddar" <[EMAIL PROTECTED]> wrote on 07/26/2007 10:41:27 PM: > > > > > Hello, > > > I have been asking newbie questions to this forum. And people have > > > > been very helpful. > > > > > > Those newbie questions were for a Apache Lab project named Fluid > > > -- to explore possibilities of SDO persistence using JPA API. > > > > > > With all your help, I could put together an initial proptotype > > > that creates/updates/queries SDO using JPA API. I used Tuscany and > > > OpenJPA for SDO and JPA implementation respectively. > > > > > > Further details of this project (with user documentation) can be > > > found at > > > > > > http://people.apache.org/~ppoddar/fluid/site/welcome.html > > > > > > Your comments/suggestions are most welcome -- > > > > > > > > > Pinaki Poddar > > > 972.834.2865 > > > > > > -----Original Message----- > > > From: Frank Budinsky [mailto:[EMAIL PROTECTED] > > > Sent: Tuesday, July 24, 2007 4:59 PM > > > To: tuscany-dev@ws.apache.org > > > Subject: RE: How does xsd:ID property type is distinguished from > > > xsd:string > > > > > > EAttribute.isID() will only be true if the type is xsd:ID. > > > > > > Frank. > > > > > > "Pinaki Poddar" <[EMAIL PROTECTED]> wrote on 07/24/2007 05:31:09 PM: > > > > > > > Hi Frank, > > > > > Database IDs (e.g., primary and foreign keys) are more > > > > related to > > > > > > > xsd:key/xsd:keyref, then xsd:ID, but fortunately SDO 3 is planning > > > > > to address all of them :-) > > > > > > > > Thanks for telling me this. > > > > > > > > Now is ((property.getType().isDataType()) && > > > > ((EAttribute)property).isID())) == true for a property p that is > > > > declared as xsd:key or xsd:keyref? > > > > > > > > Or broadly, what is the semantics of Eattribute.isID()? > > > > > > > > > > > > Pinaki Poddar > > > > 972.834.2865 > > > > > > > > -----Original Message----- > > > > From: Frank Budinsky [mailto:[EMAIL PROTECTED] > > > > Sent: Tuesday, July 24, 2007 3:01 PM > > > > To: tuscany-dev@ws.apache.org > > > > Subject: RE: How does xsd:ID property type is distinguished from > > > > xsd:string > > > > > > > > Hi Pinaki, > > > > > > > > Identity support is also in the SDO 3 charter: Support for a > > > > concept > > > > > > of identity in SDO, and its relationship to other technologies. > > > > > > > > Database IDs (e.g., primary and foreign keys) are more related to > > > > xsd:key/xsd:keyref, then xsd:ID, but fortunately SDO 3 is planning > > > > > to address all of them :-) > > > > > > > > Frank. > > > > > > > > "Pinaki Poddar" <[EMAIL PROTECTED]> wrote on 07/24/2007 11:02:21 AM: > > > > > > > > > Hi Frank, > > > > > Thanks. > > > > > > > > > > > SDO (SDO 3) is planning to provide an api for accessing > > > > > > extended > > > > > > > > XSD > > > > > metadata > > > > > > > > > > That is good news. However, identity mechanics should appear > > > > > more distinctly on API surface e.g. > > > > > boolean Proprty.isIdentifier(); > > > > > List<Property> Type.getIdentifiers(); > > > > > > > > > > I will qualify absence of any identity semantics from SDO a > > > > > major drawback. Especially, if it comes to any persistence > > > > > operation on SDO DataObject/DataGraph. Hopefully some of the SDO > > > > > > spec writers would notice this omission and add it to future > spec version. > > > > > > > > > > After a quick pick in current DAS implementation, it appeared > > > > > that > > > > > > > 'primary key' identification is based on existing database > > > > > column name > > > > > > > > > "ID" (yes, hardcoded) -- but I may be wrong and am ready to > > > > > learn how DAS is handling identity issue. > > > > > > > > > > > SDO (SDO 3) is planning to provide an api for accessing > > > > > > extended > > > > > > > > XSD > > > > > metadata > > > > > That is a good decision. Wrapping should always provide access > > > > > to what > > > > > > > > > is being wrapped. > > > > > > > > > > > downcasting to the EMF implementation class > > > > > > > > > > Thanks for this info. I will do this for now. But I heed your > > > > > advice > > > > > > > > and have already a scheme in place that programs against *only* > > > > > commonj.sdo API but can access underlying implementaion, if > > > > > available, > > > > > > > > > without any compile-time binding. > > > > > Slightly costly -- but works for, say, extracting package name > > > > > from Types. > > > > > > > > > > > > > > > > > > > > Pinaki Poddar > > > > > 972.834.2865 > > > > > > > > > > -----Original Message----- > > > > > From: Frank Budinsky [mailto:[EMAIL PROTECTED] > > > > > Sent: Tuesday, July 24, 2007 9:16 AM > > > > > To: tuscany-dev@ws.apache.org > > > > > Subject: Re: How does xsd:ID property type is distinguished from > > > > > > xsd:string > > > > > > > > > > Hi Pinaki, > > > > > > > > > > They can't be distinguished in the current version of SDO > > > > > metadata, you need to look at the original XSD. The next version > > > > > > of SDO (SDO > > > > > 3) is planning to provide an api for accessing extended XSD > > > > > metadata. In Tuscany, you can currently determine this by > > > > > downcasting to the EMF implementation class, although we don't > > > recommend people do that: > > > > > > > > > > System.out.println(" Property isID: " + > > > > > ((property.getType().isDataType()) && > > > > > ((EAttribute)property).isID())); > > > > > > > > > > Frank. > > > > > > > > > > "Pinaki Poddar" <[EMAIL PROTECTED]> wrote on 07/24/2007 01:00:03 > AM: > > > > > > > > > > > > > > > > > Hi, > > > > > > > > > > > > A newbie question: > > > > > > How does two Property: one defined as xsd:string and other > > > > > > as > > > > > > > > xsd:ID can be distiguished? > > > > > > > > > > > > Assume: > > > > > > 1. we have a simple XML schema defining a Person SDO Type > > > > > > with two properties as follows: > > > > > > <xsd:complexType name="Person"> > > > > > > <xsd:attribute name="firstName" type="xsd:string"/> > > > > > > <xsd:attribute name="id" type="xsd:ID"/> > > > > > > </xsd:complexType> > > > > > > > > > > > > 2. TypeHelper.INSTANCE.define() > > > > > > defines SDO Type with two commonj.sdo.Property, p1 (for > > > > > > firstName) > > > > > > > > > > > and p2 (for id) > > > > > > > > > > > > 3. both p1.getType().getInstanceClass() and > > > > > > p2.getType().getInstanceClass() return java.lang.String > > > > > > both p1.getType().isDataType() and > > > > > > p2.getType().isDataType() > > > > > > > > return true > > > > > > > > > > > > The question is, what can be done to identify p2 as a property > > > > > > > that were defined as xsd:ID? > > > > > > > > > > > > > > > > > > Thanks for your help -- > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Pinaki Poddar > > > > > > 972.834.2865 > > > > > > > > > > > > Notice: This email message, together with any attachments, > > > > > > may contain information of BEA Systems, Inc., its > > > > > > subsidiaries and affiliated entities, that may be > > > > > > confidential, proprietary, copyrighted and/or legally > > > > > > privileged, and is intended solely for > > > > > > > > > the > > > > > > > > > > > use of the individual or entity named in this message. If you > > > > > > are not the intended recipient, and have received this message > > > > > > > in error, > > > > > > > > > > please immediately return this by email and then delete it. > > > > > > > > > > > > -------------------------------------------------------------- > > > > > > -- > > > > > > -- > > > > > > -- > > > > > > - To unsubscribe, e-mail: > > > > > > [EMAIL PROTECTED] > > > > > > For additional commands, e-mail: > > > > > > [EMAIL PROTECTED] > > > > > > > > > > > > > > > > > > > > > ---------------------------------------------------------------- > > > > > -- > > > > > -- > > > > > - To unsubscribe, e-mail: [EMAIL PROTECTED] > > > > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > > > > > > > Notice: This email message, together with any attachments, may > > > > > contain information of BEA Systems, Inc., its subsidiaries > > > > > and affiliated entities, that may be confidential, > > > > > proprietary, copyrighted and/or legally privileged, and is > > > > > intended solely for > > > > > > > the > > > > > > > > > use of the individual or entity named in this message. If you > > > > > are not the intended recipient, and have received this message > > > > > in error, > > > > > > > > please immediately return this by email and then delete it. > > > > > > > > > > ---------------------------------------------------------------- > > > > > -- > > > > > -- > > > > > - To unsubscribe, e-mail: [EMAIL PROTECTED] > > > > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > > > > > > > > > ------------------------------------------------------------------ > > > > -- > > > > - To unsubscribe, e-mail: [EMAIL PROTECTED] > > > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > > > > Notice: This email message, together with any attachments, may > > > > contain information of BEA Systems, Inc., its subsidiaries > > > > and affiliated entities, that may be confidential, proprietary, > > > > copyrighted and/or legally privileged, and is intended solely for > > > > > the > > > > > > > use of the individual or entity named in this message. If you are > > > > not the intended recipient, and have received this message in > > > > error, > > > > > > please immediately return this by email and then delete it. > > > > > > > > ------------------------------------------------------------------ > > > > -- > > > > - To unsubscribe, e-mail: [EMAIL PROTECTED] > > > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > > > > > -------------------------------------------------------------------- > > > - To unsubscribe, e-mail: [EMAIL PROTECTED] > > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > Notice: This email message, together with any attachments, may > > > contain information of BEA Systems, Inc., its subsidiaries and > > > affiliated entities, that may be confidential, proprietary, > > > copyrighted and/or legally privileged, and is intended solely for > > > the > > > > > use of the individual or entity named in this message. If you are > > > not the intended recipient, and have received this message in error, > > > > please immediately return this by email and then delete it. > > > > > > -------------------------------------------------------------------- > > > - To unsubscribe, e-mail: [EMAIL PROTECTED] > > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > Notice: This email message, together with any attachments, may > > contain information of BEA Systems, Inc., its subsidiaries and > > affiliated entities, that may be confidential, proprietary, > > copyrighted and/or legally privileged, and is intended solely for the > > > use of the individual or entity named in this message. If you are not > > the intended recipient, and have received this message in error, > > please immediately return this by email and then delete it. > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > -- > Luciano Resende > Apache Tuscany Committer > http://people.apache.org/~lresende > http://lresende.blogspot.com/ > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > Notice: This email message, together with any attachments, may contain > information of BEA Systems, Inc., its subsidiaries and affiliated > entities, that may be confidential, proprietary, copyrighted and/or > legally privileged, and is intended solely for the use of the individual or > entity named in this message. If you are not the intended recipient, and have > received this message in error, please immediately return this by email and > then delete it. > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > -- Luciano Resende Apache Tuscany Committer http://people.apache.org/~lresende http://lresende.blogspot.com/ --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]