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.

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