Hi Aaron, I've just committed your changes into my repository, it is at: http://github.com/jeffyu/ode/commit/a5ba9bbb0c6f49db60c29109845beacbef3a17de I've resolved the conflicts files, all of them are pom files, could you have a look at it to see if I am missing some changes or not.
Also, I've updated the JPADaoOperator.java to JPADAOOperator.java, otherwise the filename and the classname is inconsistent. Regards Jeff On Mon, Mar 8, 2010 at 11:36 PM, Jeff Yu <jeff.yuch...@gmail.com> wrote: > Hi Aaron, > > This is great, it all sounds great to me, but before I dig into the code, I > am wondering if you could commit this change into the jpa work repo. ( > http://github.com/jeffyu/ode/tree/jpa), as I've already added your account > (aaronanderson) as the collaborator, you should be able to push the commit > into repo. > > Below are the instructions on how to do the merge. (Thanks Rafal for > telling me this, I am also quite new to git. :)) > > In your project directory, run: > > git fetch g...@github.com:jeffyu/ode.git jpa:jeff_jpa > then from jeff_jpa, > git merge jpa (you may need to resolve some conflicts if any). > > then you can push merged local branch to the repo: > git push g...@github.com:jeffyu/ode.git jeff_jpa:jpa > > Let me know if you have problems on this.. I will look into your code > tomorrow and then provide more comments. Thanks for your great work. ;) > > Regards > Jeff > > > > On Mon, Mar 8, 2010 at 3:28 PM, Aaron Anderson <aaronander...@acm.org>wrote: > >> Hi Jeff, >> >> I committed my changes to my github fork at >> http://github.com/aaronanderson/ode/tree/jpa Please take a look at it and >> let me know what you think. Here are some notes on what I did: >> >> 1) Moved the bpel-store DAO interfaces, JPA, and hibernate classes into >> their respective modules >> 2) Updated the DAO package names to divide the DAO interfaces in a >> consistent fashion >> 3) Introduced the DAOConnectionFactory interface to use a common DAO >> factory instantiation pattern across implementations. >> 4) Moved all the DAO test cases to a new single module, dao-test. This >> artifact is extracted to each of the three DAO implementation (hibernate, >> hibernate JPA, and OpenJPA) at test time. This allows for good test case >> coverage for each of the implementations without unit test redundancy. >> Instead of introducing a new module these test cases could be moved to >> bpel-dao and a maven test classifer used to archive them instead. >> 5) All the test cases pass except for a couple of DAO tests for both >> hibernate and hibernate JPA. Engine passes all the tests with OpenJPA. I'll >> look into the two failed test cases early this week >> 6) I have not run the hibernate DAO implementations with the engine yet >> but I did not need to tweak too many of the JPA classes in order for it to >> load in Hibernate 3.4.0GA. >> 6) I can get started on moving the simple scheduler DAO code into the >> implementation modules once the JPA changes stabilize. >> >> Please take a look and let me know what you think. I am new to git so if >> you would like to accept any of these changes I may need some pointers on >> how to merge them in with your repository. >> >> Cheers, >> >> Aaron >> >> >> >> >> >> >> ________________________________ >> From: Jeff Yu <jeff.yuch...@gmail.com> >> To: dev@ode.apache.org >> Sent: Thu, March 4, 2010 11:26:50 PM >> Subject: Re: JPA DAO refactoring. >> >> Hi Aaron, >> >> Yeah, lets try to put it into the OpenJPA DAO moudle first, and then think >> about the other way. >> >> BTW, I didn't see you commit logs on your repo, was thinking that I will >> add >> you as a collaborator in the github's jpa work repository. >> >> Regards >> Jeff >> >> On Fri, Mar 5, 2010 at 4:37 AM, Aaron Anderson <aaronander...@acm.org >> >wrote: >> >> > Hi Jeff, >> > >> > Thanks for the response! >> > >> > For question #2, I errantly used the term class annotation instead of >> class >> > enhancement. The challenge I encountered was trying to acheive the goal >> of >> > reusing the same JPA entities across persistence providers while >> > also somehow addressing the differences between the class >> > enhancement behaviors of hibernate and OpenJPA. Hibernate utilizes a >> byte >> > code manipulator at runtime to augment the JPA entites so I had no >> problems >> > with it. OpenJPA on the other hand requires the JPA entity classes to be >> > enhanced with OpenJPA specific class references or there must be an >> OpenJPA >> > agent to augment the classes at runtime. Using the OpenJPA enhancer >> means >> > that there must be two separate versions of the JPA entity compiled >> classes: >> > a non-manipulated version and an OpenJPA enhanced version. I used a >> maven >> > classifer to set them appart but it would be possible to include the >> OpenJPA >> > enhanced classes in the OpenJPA DAO module. Maybe when I am done with >> > shuffling >> > around the code I can investigate to see if there is a way to enable >> the >> > OpenJPA agent at runtime programatically so it behaves more like >> Hibernate. >> > >> > Regards, >> > >> > Aaron >> > >> > >> > >> > ________________________________ >> > From: Jeff Yu <jeff.yuch...@gmail.com> >> > To: dev@ode.apache.org >> > Sent: Thu, March 4, 2010 12:22:14 AM >> > Subject: Re: JPA DAO refactoring. >> > >> > Hi Aaron, >> > >> > Firstly, we are very glad that you made progress on this, and interested >> in >> > contributing your effort in this area. ;) >> > >> > comments inline. >> > >> > On Thu, Mar 4, 2010 at 2:02 PM, Jeff Yu <jeff.yuch...@gmail.com> wrote: >> > >> > > Quote from Aaron's comments of JIRA. ( >> > > https://issues.apache.org/jira/browse/ODE-704) >> > > >> > > Hi Jeff, >> > > >> > > Thanks for the pointers on helping me get started on this task. I have >> > > setup a github project and created a fork of your JPA branch. I have >> made >> > > some progress with separating the JPA and hibernate code apart based >> on >> > your >> > > initial effort and I also have started to attempt to unify the JPA DAO >> > > patterns used in the DAO and bpel-store modules. I had a few questions >> > and I >> > > was hoping you could provide me some guidance on them. >> > > >> > > 1) Maven modules - To prevent module proliferation I was thinking that >> > the >> > > DAO, store, and scheduler implementations could be stored in the same >> > module >> > > per implementation. For example, >> > > >> > > ode-dao - contains new generic DAO ConnectionFactory interface(s) and >> the >> > > existing core DAOConnection interfaces >> > > dao-jpa - contains all the JPA entities, including dao, store, and >> soon >> > to >> > > be scheduler. The store and scheduler implementations would still be >> in >> > > different packages and persistence units. >> > > dao-hibernate - contains all the hibernate entities, including dao, >> > store, >> > > and soon to be scheduler. Includes factory implementation classes that >> > > implement generic interfaces in ode-dao >> > > dao-jpa-ojpa - contains factory implementation classes that implement >> > > generic interfaces in ode-dao. The factory primes the JPA environment >> > with >> > > the the openjpa specific properties >> > > dao-jpa-hibernate - same as dao-jpa-ojpa but for hibernate >> > > bpel-store - contains factory implementation classes that implement >> > generic >> > > interfaces in ode-dao and the existing store connection code. >> > > bpel-scheduler-simple - the same as bpel-store with new connection >> based >> > > DAO >> > > il-common - OdeConfigProperties updated to include new factory class >> > > lookups for the store and scheduler implementations >> > > >> > > What do you think of this approach? >> > > >> > >> > +1 to this. One comment, (just make sure. ;) ) for the ode-dao, we >> should >> > put the store, and soon to be scheduler's DAO's Interfaces into this >> > module. >> > >> > >> > >> > > >> > > 2) OpenJPA class enhancements - OpenJPA requires that the classes be >> > > annotated in order to be utilized unless a JavaEE container is used or >> > their >> > > runtime agent is utilized. The problem is that these class >> enhancements >> > > would interfere with a different JPA implementations and duplicating >> the >> > > entities per implementation module would lead to too much redundancy. >> To >> > > address this I took the approach of extending the dao-jpa maven pom to >> > > duplicate the target classes, run the enhancer on the copy, and then >> run >> > the >> > > maven-jar plugin again with a classifer of openjpa so that two >> versions >> > of >> > > the module will be stored in the maven repo. Is this a valid approach? >> > > >> > >> > Sorry, I didn't see these openjpa's specific annotations in the code? >> With >> > regard to the class enhancements, I was thinking that we run the enhance >> > commands on the dao-jpa-ojpa module, so the dao-jpa module is all about >> > standard JPA, no JPA's implementator's stuff. Does this approach make >> sense >> > to you? >> > >> > >> > > >> > > 3) When examining the ode 2.0 source code I found a lot of references >> to >> > > JDBC datasources and transaction managers in the DAO classes. To me >> the >> > DAO >> > > abstraction classes should be storage implementation agnostic. I would >> > like >> > > to refactor the connection interfaces to use the same interface and >> > > introduce a common DAO strategy. >> > > >> > > //new common interface >> > > public interface DAOConnectionFactory<C> { >> > > >> > > C getConnection(); >> > > >> > > <E> void init(OdeConfigProperties p, E envCtx); >> > > >> > > void shutdown(); >> > > } >> > > >> > > //Module specific DAO access implementation (dao, store, scheduler, >> etc) >> > > public interface BpelDAOConnectionFactory extends >> > > DAOConnectionFactory<BpelDAOConnection> { >> > > >> > > BpelDAOConnection getConnection(); >> > > >> > > >> > > } >> > > >> > > //Implementation specific factory that can be instantiated by the >> module >> > > using an OdeConfigProperties lookup >> > > public class BpelDAOConnectionFactoryJPAImpl implements >> > > BpelDAOConnectionFactory { >> > > >> > > public BpelDAOConnection getConnection() { >> > > return new BpelDAOConnectionJpaImpl(); >> > > } >> > > >> > > public <JDBCContext>void init(OdeConfigProperties p, JDBCContext >> envCtx) >> > > { >> > > >> > > } >> > > >> > > public void shutdown() { >> > > >> > > } >> > > >> > > } >> > > >> > > //This is a implementation specific environment context that the >> runtime >> > > the ode is executed in can pass opaquely through the DAO layer into >> the >> > > implementation. >> > > public class JDBCContext { >> > > >> > > DataSource getDataSource(){} >> > > TransactionManager getTransactionManager(){} >> > > >> > > } >> > > >> > > >> > > What are your thoughts on this approach? >> > > >> > >> > Yeah, +1, I like this idea. >> > >> > Regards >> > Jeff >> > >> > >> > > >> > > Regards, >> > > >> > > Aaron >> > > >> > > -- >> > > Cheers, >> > > Jeff Yu >> > > >> > > ---------------- >> > > blog: http://jeff.familyyu.net >> > > >> > > >> > >> > >> > -- >> > Cheers, >> > Jeff Yu >> > >> > ---------------- >> > blog: http://jeff.familyyu.net >> > >> >> >> >> -- >> Cheers, >> Jeff Yu >> >> ---------------- >> blog: http://jeff.familyyu.net >> > > > > -- > Cheers, > Jeff Yu > > ---------------- > blog: http://jeff.familyyu.net > > -- Cheers, Jeff Yu ---------------- blog: http://jeff.familyyu.net