I share some of the concerns that Jeff is bringing up in his mail and
remember that long time ago Ted Husted had offered [1] to replace our
Hibernate backend with iBatis or Cayenne. At the time, Dave said no
thank you because Craig was working on JDO, but I hear mixed reviews on
the work:

1. Some think that a pluggable strategy is good
2. Some would like to just pick one and move on
3. Some think is necessary just for license and we should always use
hibernate

We are fine with #1 and #2 not with #3. Therefore, I want to provide
more support for #1 and #2 and suggest that if we have a pluggable
strategy we could work on an iBatis implementation, maybe Ted will help
us. If we choose #2, we would support an iBatis implementation. I think
you get where I'm going. We are using iBatis internally in different
projects and the experience has been good so far.

I would love to hear your opinion on this.

-Elias

[1] http://tinyurl.com/pjkle

Jeff Blattman wrote:
> given that JDO's future is unclear* (at best) and JPA is unproven* (are
> there any robust production tested implementations yet?), i would think
> that a "wait and see" approach would be most prudent.
> 
> * = craig would know much better than i, i think
> 
> i think that all things being equal it'd be better to not have the
> hibernate dependency, but it doesn't seem like now would be the right
> time to switch. if you're going to do this, make sure you won't be
> contemplating it again in 6 months.
> 
> now, if folks want to put start putting things together in sandbox, by
> all means ... maybe by the time 3.x is ready, things will be clear
> 
> Allen Gilliland wrote:
>>
>> So maybe it's time to ask the question more squarely ... who wants to
>> replace Hibernate as our persistence implementation?
>>
>> -- Allen
>>
>>
>>>
>>> Matt
>>>
>>>>
>>>> -- Allen
>>>>
>>>>
>>>> Craig L Russell wrote:
>>>> > Hi,
>>>> >
>>>> > Here's what I propose as a starting point for the query interface
>>>> > between Datamapper Managers and Datamapper Persistence.
>>>> >
>>>> > There are enough differences between JDO, JPA, and Hibernate that I
>>>> > found it really awkward to define a set of methods on
>>>> > PersistenceStrategy that covered the functionality. In particular,
>>>> there
>>>> > are two methods in JPA that both execute the query and determine the
>>>> > result shape, and parameters are passed one by one. In JDO, there
>>>> is an
>>>> > API that determines the result shape and one method to execute the
>>>> > query, passing parameter values. It's trivial to encapsulate these
>>>> > differences in a Query instance.
>>>> >
>>>> > I've included the Query API below for discussion, along with calling
>>>> > sequence from Mapper.
>>>> >
>>>> > Craig
>>>> >
>>>> > public class DatamapperPersistenceStrategy {
>>>> > ...
>>>> >      /**
>>>> >      * Create query.
>>>> >      * @param clazz the class of instances to find
>>>> >      * @param queryName the name of the query
>>>> >      * @throws org.apache.roller.RollerException on any error
>>>> >      */
>>>> >
>>>> >     public DatamapperQuery newQuery(Class clazz, String queryName)
>>>> >             throws RollerException;
>>>> > }
>>>> >
>>>> > public class DatamapperUserManagerImpl {
>>>> > ...
>>>> >     public WebsiteData getWebsiteByHandle(String handle, Boolean
>>>> enabled)
>>>> >             throws RollerException {
>>>> >         // XXX cache websites by handle?
>>>> >         return (WebsiteData)strategy.newQuery(WebsiteData.class,
>>>> >                 "getByHandle&&Enabled")
>>>> >             .execute(new Object[]{handle, enabled});
>>>> >     }
>>>> >
>>>> > public interface DatamapperQuery {
>>>> >
>>>> >     /** Execute the query with no parameters.
>>>> >      * @return the results of the query
>>>> >      */
>>>> >     Object execute();
>>>> >
>>>> >     /** Execute the query with one parameter.
>>>> >      * @param param the parameter
>>>> >      * @return the results of the query
>>>> >      */
>>>> >     Object execute(Object param);
>>>> >
>>>> >     /** Execute the query with parameters.
>>>> >      * @param params the parameters
>>>> >      * @return the results of the query
>>>> >      */
>>>> >     Object execute(Object[] params);
>>>> >
>>>> >     /** Remove instances selected by the query with no parameters.
>>>> >      * @return the results of the query
>>>> >      */
>>>> >     void removeAll();
>>>> >
>>>> >     /** Remove instances selected by the query with one parameter.
>>>> >      * @param param the parameter
>>>> >      * @return the results of the query
>>>> >      */
>>>> >     void removeAll(Object param);
>>>> >
>>>> >     /** Remove instances selected by the query with parameters.
>>>> >      * @param params the parameters
>>>> >      * @return the results of the query
>>>> >      */
>>>> >     void removeAll(Object[] params);
>>>> >
>>>> >     /** Set the result to be a single instance (not a List).
>>>> >      * @result the instance on which this method is called
>>>> >      */
>>>> >     DatamapperQuery setUnique();
>>>> >
>>>> >     /** Set the types of the parameters. This is only needed if the
>>>> >      * parameter types are temporal types, e.g. Date, Time, Calendar.
>>>> >      * @param the types of the parameters in corresponding positions.
>>>> >      * @result the instance on which this method is called
>>>> >      */
>>>> >     DatamapperQuery setTypes(Object[] types);
>>>> >
>>>> >     /** Set the range of results for this query.
>>>> >      * @fromIncl the beginning row number
>>>> >      * @toExcl the ending row number
>>>> >      * @return the instance on which this method is called
>>>> >      */
>>>> >     DatamapperQuery setRange(long fromIncl, long toExcl);
>>>> > }
>>>> >
>>>> > Craig Russell
>>>> > [EMAIL PROTECTED] http://db.apache.org/jdo
>>>> >
>>>> >
>>>>
> 

Reply via email to