Jim,
FYI,

<vendor>
The Secant EES/EJB Container does provide CMP and does do "tuned updates".
"Tuned updates" is the default behavior for our Container but this behavior
may be controlled on an individual Bean basis.
</vendor>

DaveTillman
[EMAIL PROTECTED]
Director Professional Services
Secant Technologies
www.secant.com


----- Original Message -----
From: Jim Frentress <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Tuesday, August 17, 1999 10:48 AM
Subject: Re: Tuned Updates & BMP


> i'm probably missing something but why not simply keep an array of
> persisting attributes as they mutate. in ejbStore, when the array has
> members, generate the statement from them.
>
> as a side note, there are huge performance and scalability issues with
> containers that do not tune their updates. most of these issues are a
result
> of the underlying pstore's logging of large datatypes (image, text, etc.)
>
> i know of just one container that tunes updates. can anyone enumerate a
list
> of containers that do tune updates?
>
> > -----Original Message-----
> > From: James Cook [SMTP:[EMAIL PROTECTED]]
> > Sent: Tuesday, August 17, 1999 7:15 AM
> > To:   [EMAIL PROTECTED]
> > Subject:      Tuned Updates & BMP
> >
> > To borrow a phrase from Jim Frentress:
> > Tuned Update - the process of persisting only the EJB fields that have
> > changed.
> >
> > I suppose most well-behaved containers will use tuned updates within
their
> > CMP infrastructure. My current container does, and it helps a great deal
> > to
> > eliminate the concurrency issues associated with one user wiping out a
> > change made by a previous user.
> >
> > This, of course, does nothing to assist me in BMP. I have to manage this
> > concurrency issue myself. My EJB structure follows the segregated design
> > fundamentals discussed in earlier threads. All of my EJB's extend an EJB
> > superclass. Would it make sense to use reflection and a hashtable in
this
> > superclass to store the pre-write state of an EJB? When a write occurs,
I
> > can then compare the current attributes against the hash to determine
what
> > fields to write.
> >
> > I had a similar mechanism in my RMI objects, although it stored any
> > attributes with a getter:
> >     /** Analyzes the current object and stores the current state of the
> >      *  object in a hashtable. The hashtable will store all attributes
> >      *  of the instance class and its ancestors. Only attributes with a
> >      *  corresponding getXXX() method (and no parameters) will be
> >      *  stored.
> >      */
> >     public void mirror() {
> >         hash.clear();
> >
> >         Class myClass = this.getClass();
> >         Method[] methods = myClass.getMethods();
> >
> >         for (int i = 0; i < methods.length; i++) {
> >             Method method = methods[i];
> >             String  name        = method.getName();
> >             Class[] parameters  = method.getParameterTypes();
> >             if (name.startsWith("get") && parameters.length == 0) {
> >                 Class returnType = method.getReturnType();
> >                 try {
> >                     Object o = method.invoke(this, null);
> >                     if (o != null) hash.put(name, o);
> >                 }
> >                 catch (InvocationTargetException itx) {/*shouldn't ever
> > happen*/}
> >                 catch (IllegalAccessException iax) {/*shouldn't ever
> > happen*
> > /}
> >             }
> >         }
> >     }
> >
> > I then could get a list of attributes that changed by using:
> >
> >     /** Returns whether the named method is modified. Useful for
detecting
> >      *  a change to a specific attribute. If the attribute has changed
> >      *  a Vector is returned that contains the previous and current
> > values:
> >      *
> >      *      [0] - The value of the attribute stored in the hash
> >      *      [1] - The class instance's current value for the attribute
> >      *
> >      *  If no changes are detected the return value will be null.
> >      */
> >     public boolean isModified(String methodName, final Object[] values)
{
> >         values[0] = null;   values[1] = null;
> >         Class myClass = this.getClass();
> >         Method[] methods = myClass.getMethods();
> >         Object o1= hash.get(methodName);
> >         for (int i = 0; i < methods.length; i++) {
> >             String name = methods[i].getName();
> >             if (name.equalsIgnoreCase(methodName)) {
> >                 Object o2 = null;
> >                 try {
> >                     o2 = methods[i].invoke(this, null);
> >                 }
> >                 catch (InvocationTargetException itx2) {}
> >                 catch (IllegalAccessException iax2) {}
> >                 if (o1 == null) {
> >                     if (o2 != null) {
> >                         values[1] = o2;
> >                         return true;
> >                     }
> >                     continue;
> >                 }
> >                 if (!o1.equals(o2)) {
> >                     log("Is modified on method: " + name);
> >                     log("Stored value: " + o1 + ", Instance value: " +
> > o2);
> >                     values[0] = o1;
> >                     values[1] = o2;
> >                     return true;
> >                 }
> >             }
> >         }
> >         return false;
> >     }
> >
> > Basically, you would call mirror() in the ejbLoad() method, and use the
> > isModified() to determine which fields you add to your update query in
the
> > ejbStore() method.
> >
> > Has anyone come across this situation?
> >
> > jim
> >
> >
==========================================================================
> > =
> > To unsubscribe, send email to [EMAIL PROTECTED] and include in the
> > body
> > of the message "signoff EJB-INTEREST".  For general help, send email to
> > [EMAIL PROTECTED] and include in the body of the message "help".
>
>
===========================================================================
> To unsubscribe, send email to [EMAIL PROTECTED] and include in the
body
> of the message "signoff EJB-INTEREST".  For general help, send email to
> [EMAIL PROTECTED] and include in the body of the message "help".
>
>

===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff EJB-INTEREST".  For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".

Reply via email to