Allen Gilliland wrote:
> comments inline ...
>
> Matt Raible wrote:
>> On 8/15/06, Allen Gilliland <[EMAIL PROTECTED]> wrote:
>>>
>>> assuming we agree that we are only focusing on implementing one of the
>>> options, we then need to decide which one. just so it's known, i think
>>> it's entirely lame that we are getting rid of Hibernate over a silly
>>> licensing issue. as a large roller customer i consider it more of a
>>> pain than a benefit to have to replace the backend. regardless of that
>>> fact, it appears that's what everyone wants to do, so i consider
>>> Hibernate to no longer be an option. that leaves JDO and JPA as you
>>> mentioned, and i don't really have any preference between the two.
>>
>> I don't believe that "everyone wants to do so" is an accurate
>> statement. I believe "Apache wants us to do so" is an accurate
>> statement. I'd rather stick with Hibernate b/c it's been proven to
>> work and I know it well. Remember all the issues we used to
>> experience on JRoller? I'd hate to see any of those come back again.
We (as IBM) would also like if Roller didn't have the hibernate
dependency. It's really a thorn in our side everytime our use of Roller
comes up to talk about the Hibernate dependency with our lawyers.
However, the only reason why we are staying with Roller is because of
our desire to leave incubator stage and have all of our code using the
same license, a license that IBM is comfortable with.
>
> Actually, that's great to hear because that's exactly how I feel.
> Perhaps I had misinterpreted the previous discussions about this on the
> list because it had seemed like not too many ppl were voicing support
> for Hibernate. For my part, I am not at all interested in replacing
> Hibernate as our persistence api for the same reasons you've eluded to ...
>
> 1. Hibernate is a known quantity and many of us have some experience
> with it. I don't have any experience with JDO or JPA, so switching to
> either of those technologies means a new learning curve.
>
> 2. Potential risk. A lot can go wrong when you swap your persistence
> layer and unless there is a burning need to do so then I think it's
> worth questioning why we would want to do that. Speaking as a customer
> of Roller who runs a large site, I am very nervous about the prospect of
> switching the Roller persistence implementation.
>
> 3. Extra work. To replace it means a lot of extra work and for what
> benefit? To get around an open source licensing issue?
>
Your points are valid but as Craig noted, I don't think we have a
choice. It's not about a license issue, it's about us becoming an Apache
project for whatever benefits the Roller community decided was worth
joining for
>
> So maybe it's time to ask the question more squarely ... who wants to
> replace Hibernate as our persistence implementation?
We would like to do so.
>
> -- 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
>>> >
>>> >
>>>
>