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
