Subject: Re: DynaBeans, DynaClass, DynaMen
From: "Vic C." <[EMAIL PROTECTED]>
 ===
I am so over all this. (I have a basejDAO project on SourceForge... that 
will take a SQL string and expose CRUD methods, that might use this).
Very Cool.

Vic

Craig R. McClanahan wrote:
> 
> On Fri, 12 Jul 2002, Struts Newsgroup wrote:
> 
> 
>>Date: Fri, 12 Jul 2002 18:40:02 -0700
>>From: Struts Newsgroup <[EMAIL PROTECTED]>
>>Reply-To: Struts Users Mailing List <[EMAIL PROTECTED]>
>>To: [EMAIL PROTECTED]
>>Subject: Re: DynaBeans, DynaClass, DynaMen
>>
>>Subject: Re: DynaBeans, DynaClass, DynaMen
>>From: "Vic C." <[EMAIL PROTECTED]>
>> ===
>>Looks a bit like
>>http://www.javaworld.com/javaworld/jw-02-2001/jw-0202-cachedrow.html
>>listing #3  of disconnected row set.
>>
>>Can we get metaData out of it so I can write "auto" updates?
>>So a DAO that has a Iterator of DynaBeans.
> 
> 
> All DynaBean implementations support metadata.  From a particular DynaBean
> instance you can say something like:
> 
>   DynaProperty descriptors[] = dynaBean.getDynaClass().getDynaProperties();
> 
> and iterate through the descriptors to see what is there, very similar to
> what you can do with standard JavaBeans by calling:
> 
>   PropertyDescriptor descriptors[] =
>     PropertyUtils.getPropertyDescriptors(javabean);
> 
> 
>>Where is DynaBean? Commons?
> 
> 
> Yep.  It's part of the commons-beanutils package.  Most recent nightly
> builds (which are also packaged with nightly builds of Struts) are at:
> 
>   http://jakarta.apache.org/builds/jakarta-commons/nightly/commons-beanutils/
> 
> The new feature discussed below will be in tomorrow's (20020713) build.
> 
> 
>>Vic
>>
> 
> 
> Craig
> 
> 
> 
>>Craig R. McClanahan wrote:
>>
>>>I implemented something a little more memory-efficient than this (doesn't
>>>require the entire result set to be in memory) in tonight's nightly build
>>>of commons-beanutils, which will therefore be available in the 20020713
>>>nightly build of Struts.  You use it something like this:
>>>
>>>  Connection conn = ...;
>>>  Statement stmt = conn.createStatement();
>>>  ResultSet rs = stmt.executeQuery("select * from customers");
>>>  Iterator rows = (new ResultSetDynaClass(rs)).iterator();
>>>  while (rows.hasNext()) {
>>>    DynaBean row = (DynaBean) rows.next();
>>>    System.out.println("Processing customer " + row.get("account_id"));
>>>    ... access this row as a DynaBean ...
>>>  }
>>>  rs.close();
>>>  stmt.close();
>>>
>>>I elected to avoid doing the type conversions, so the properties you get
>>>back will correspond to their types in the database.
>>>
>>>Craig
>>>
>>>
>>>On Fri, 12 Jul 2002 [EMAIL PROTECTED] wrote:
>>>
>>>
>>>
>>>>Date: Fri, 12 Jul 2002 13:56:38 -0400
>>>>From: [EMAIL PROTECTED]
>>>>Reply-To: Struts Users Mailing List <[EMAIL PROTECTED]>
>>>>To: [EMAIL PROTECTED]
>>>>Subject: RE: DynaBeans, DynaClass, DynaMen
>>>>
>>>>
>>>>
>>>>Here is what I am using...  Very simple and only returns strings...
>>>>
>>>>
>>>> /**
>>>>   * Converts a resultset into an ArrayList of DynaBeans
>>>>   *
>>>>   * @param resultSet SQL result set to be converted
>>>>   * @return ArrayList of DynaBeans with all columnnames converted to
>>>>   *         lowercase
>>>>   * @throws SQLException DOCUMENT ME!
>>>>   */
>>>>  private static ArrayList getDynaBeanArrayList(ResultSet resultSet)
>>>>                                         throws SQLException {
>>>>
>>>>     ResultSetMetaData metaData = resultSet.getMetaData();
>>>>     int cols = metaData.getColumnCount();
>>>>     ArrayList list = new ArrayList();
>>>>     DynaProperty[] props = new DynaProperty[cols];
>>>>     BasicDynaClass dClass = null;
>>>>
>>>>     for (int i = 1; i <= cols; i++) {
>>>>        props[i - 1] = new
>>>>DynaProperty(metaData.getColumnName(i).toLowerCase());
>>>>     }
>>>>
>>>>     try {
>>>>        dClass = new BasicDynaClass("test",
>>>>                                    Class.forName(
>>>>
>>>>"org.apache.commons.beanutils.BasicDynaBean"),
>>>>                                    props);
>>>>     } catch (Exception e) {
>>>>        e.printStackTrace();
>>>>     }
>>>>
>>>>     while (resultSet.next()) {
>>>>
>>>>        HashMap map = new HashMap(cols, 1);
>>>>
>>>>        for (int i = 1; i <= cols; i++) {
>>>>           map.put(metaData.getColumnName(i).toLowerCase(),
>>>>                   resultSet.getString(i));
>>>>        }
>>>>
>>>>        try {
>>>>
>>>>           DynaBean dbean = dClass.newInstance();
>>>>           BeanUtils.populate(dbean, map);
>>>>           list.add(dbean);
>>>>        } catch (Exception e) {
>>>>           e.printStackTrace();
>>>>           throw new SQLException("RequestUtils.getArrayList: "
>>>>                                  + e.toString());
>>>>        }
>>>>     } // End While
>>>>
>>>>     return (list);
>>>>  }
>>>>
>>>>
>>>>-----Original Message-----
>>>>From: craigmcc [mailto:[EMAIL PROTECTED]]
>>>>Sent: Friday, July 12, 2002 12:07 PM
>>>>To: struts-user
>>>>Subject: Re: DynaBeans, DynaClass, DynaMen
>>>>
>>>>
>>>>
>>>>
>>>>On Fri, 12 Jul 2002, Thorbjoern Ravn Andersen wrote:
>>>>
>>>>
>>>>
>>>>>Date: Fri, 12 Jul 2002 07:02:57 +0200
>>>>>From: Thorbjoern Ravn Andersen <[EMAIL PROTECTED]>
>>>>>Reply-To: Struts Users Mailing List <[EMAIL PROTECTED]>
>>>>>To: Struts Users Mailing List <[EMAIL PROTECTED]>
>>>>>Subject: Re: DynaBeans, DynaClass, DynaMen
>>>>>
>>>>>[EMAIL PROTECTED] skrev:
>>>>>
>>>>>
>>>>>
>>>>>>...anyone remember DynaMen?
>>>>>>
>>>>>>Anyhow...  I got a Dynabean mechanism working that builds a DynaBean
>>>>>>based on the metadata of a SQL result set, populates and array of the
>>>>>>little buggers and passes it back to me.  For displaying I have a tag
>>>>>>library that does not like a call to get('name') as the field name.
>>>>>>What is the best way to get around this?
>>>>>>
>>>>>
>>>>>I wrote an AnonyBeans package which uses BCEL to generate beans on the
>>>>>fly based on a ResultSet.  It is alpha code but works for me, and is
>>>>>usable anywhere where you need a real traditional bean, but where you
>>>>
>>>>do
>>>>
>>>>
>>>>>not want to serialize it or  use its type in Java source.
>>>>>
>>>>>Is this interesting?
>>>>>
>>>>
>>>>I think it would be  interestesting, even though it might not be
>>>>universally useful (some containers won't let you introduce new classes
>>>>at
>>>>runtime).
>>>>
>>>>I'd also be interested in a mechanism that converted a ResultSet into a
>>>>custom DynaClass, with a corresponding DynaBean for each row.  This
>>>>would
>>>>be trivially simple to do -- so simple that it probably makes a
>>>>worthwhile
>>>>addition to commons-beanutils itself if someone wanted to take this on.
>>>>
>>>>This wouldn't help you create dynamic input forms, but it would make a
>>>>completely flexible bean-like wrapper around a result set so you can use
>>>>Struts tags to display stuff.
>>>>
>>>>
>>>>
>>>>>--
>>>>> Thorbjørn Ravn Andersen                 http://biobase.dk/~tra
>>>>
>>>>Craig
>>>>
>>>>
>>>>--
>>>>To unsubscribe, e-mail:
>>>><mailto:[EMAIL PROTECTED]>
>>>>For additional commands, e-mail:
>>>><mailto:[EMAIL PROTECTED]>
>>>>
>>>>
>>>>
>>>>--
>>>>To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
>>>>For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
>>>>
>>>>
>>>
>>>--
>>>To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
>>>For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
>>>
>>
>>--
>>To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
>>For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
>>
>>
> 
> 
> --
> To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
> 


--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to