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
>
>