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

Reply via email to