Agreed Indeed.
I think for people who are in the same configuration as me  ( one DB +
Hibernate (lazy)) This could be a generic way of doing things.

Thanks

On Sun, Dec 12, 2010 at 10:13 PM, Paul Lindner <[email protected]> wrote:

> When a person object is a composite of data from multiple backend
> services you want the fields up front.  This allows you to optimize
> data access and may allow you to avoid expensive queries.
>
>
> On Fri, Dec 10, 2010 at 1:13 AM, franck tankoua <[email protected]>
> wrote:
> > Hi all.
> >
> > I have a shindig container with hibernate. the probem is that for me it
> is
> > more easy to do something like "select u from users u" in JPQL, then
> filter
> > after using introspection.
> >
> > The interface PersonService for instance force us to handle the field in
> > that method but I think we really don't need and this could be automated.
> > Instead of this :
> > public Future<RestfulCollection<Person>> getPeople(Set<UserId> userIds,
> >            GroupId groupId, CollectionOptions collectionOptions,
> >            Set<String> fields, SecurityToken token) throws
> > ProtocolException
> >
> > what about having this ( without the set of fields) :
> >
> > public Future<RestfulCollection<Person>> getPeople(Set<UserId> userIds,
> >            GroupId groupId, CollectionOptions collectionOptions,
> > SecurityToken token) throws ProtocolException
> >
> > And  use something a  method like this  to select fields :
> > {{{
> >
> > public static <T> T getFilteredBean(Set<String> field, T bean) {
> >        if (field != null && !field.isEmpty()) {
> >            try {
> >                Object copiedBean = bean.getClass().getConstructor(new
> > Class[] {}).newInstance(new Object[] {});
> >                PropertyDescriptor[] properties = getBeanProperties(bean
> >                        .getClass());
> >                for (PropertyDescriptor prop : properties) {
> >                    if (field.contains(prop.getName())) {
> >                        try{
> >                        Method readMethod = prop.getReadMethod();
> >                        Method writeMethod = prop.getWriteMethod();
> >                        Object value = readMethod.invoke(bean, new
> Object[]
> > {});
> >                        writeMethod.invoke(copiedBean, new Object[] {
> value
> > });
> >                        }catch(Exception e){
> >                            logger.error("Failed to copy filtered
> > Bean"+bean.getClass()+". Error while setting the property
> "+prop.getName(),
> > e);
> >                        }
> >                    }
> >                }
> >                return (T) copiedBean;
> >            } catch (Exception e) {
> >                logger.error("failed to copy filtered Bean ", e);
> >            }
> >        }
> >        return bean;
> >    }
> >
> > }}}
> >
> > --
> > Franck
> >
>
>
>
> --
> Paul Lindner -- [email protected] -- linkedin.com/in/plindner
>



-- 
Franck

Reply via email to