cayenne-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ari Maniatis (JIRA)" <>
Subject [jira] Updated: (CAY-988) CayenneObjectManager - alternative API for using Apache Cayenne
Date Wed, 06 Jan 2010 09:17:54 GMT


Ari Maniatis updated CAY-988:

    Fix Version/s: Undefined future

> CayenneObjectManager - alternative API for using Apache Cayenne
> ---------------------------------------------------------------
>                 Key: CAY-988
>                 URL:
>             Project: Cayenne
>          Issue Type: Improvement
>    Affects Versions: 3.0
>            Reporter: David Marko
>            Assignee: Andrus Adamchik
>            Priority: Trivial
>             Fix For: Undefined future
>         Attachments:
> Hello,
> a few months ago a wrote about creating alternative approach to using Apache Cayenne.
Actualy I use Cayenne with Click Framework and following scenario came from pratice on several
projects. The main idea is to use Cayenne as very stable background(engine) but alter API
to something closer to ActiveRecord like approach. The result is CayenneObjectManager that
implementes alternative API that, as result, generate standard Cayenne queries. 
> CayenneObjectManager API assumes Java5 as generics are used extensively and is tested
with latest Apache Cayenne M3. Entire package is rather small and is intended to be extended
by other methods. I'm not very experienced JAVA developer so one thing I would like to ask
is, if someone can review the concept and correct some potencial mistakes or contribute with
some ideas etc. I'm open for correction. 
> David
> For quick example just image you have a simple table with Role names and imagine how
simply you can work with this.
> // Load role object by its name
> COManager manager=new COManagerImpl();
> // init is based on usage scenario. This can be used in standalone app. for e.g. web
app usage, the context is inititalized automaticly from DataContext.getThreadDataContext();

> co_manager.setContext(DataContext.createDataContext());
> Role role_admin=co_manager.find(Role.class).byProperty("name").EQUALS("admin").first();
> // all roles from allowed list as key-pair for checkbox field
> Map<String,String> roles=co_manager.find(Role.class).byProperty(Role.NAME_PROPERTY).IN(allowed_roles).to_pairs("name",
> CayenneObjectsManager - alternative API for working with Apache Cayenne subsystem 
> // Available use cases
> // find one item by ID
> co_manager.find(Class).byId(id) 
> // find all items by property and given condition
> co_manager.find(Class).byProperty("property").EQUALS(value) 
> // find first item by property and given condition
> co_manager.find(Class).byProperty("property").BETWEEN(value1,value2).first() 
> co_manager.find(Class).byProperty("property").LIKE(value).first() 
> co_manager.find(Class).byProperty("property").IN(range).first() 
> // find all items
> co_manager.find(Class).all() 
> // find all items by based on CayenneObjectsQuery
> co_manager.find(Class).allByQuery(COQuery query) 
> // find all firts item by based on CayenneObjectsQuery
> co_manager.find(Class).allByQuery(COQuery query).firts() 
> //find all selected items as key-pairs available e.g. for checkbox field
> co_manager.find(Class).byProperty("property").EQUAL(value1).to_pairs(key,value)
> // aggregate functions
> co_manager.aggregate(Class).count("property") 
> co_manager.aggregate(Class).count("property", COQuery query) 
> co_manager.aggregate(Class).sum("property") 
> co_manager.aggregate(Class).sum("property", COQuery query) 
> co_manager.aggregate(Class).avg("property") 
> co_manager.aggregate(Class).avg("property", COQuery query) 
> co_manager.aggregate(Class).count("property", Query.where("year >$year").addParam("year",
> // common actions
> co_manager.create(Class) 

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message