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
