Vinay Chandran wrote:
http://java.sun.com/j2se/1.4.1/docs/guide/beans/spec/beancontextTOC.fm.html

Has anyone gone through the above javabeans specs and thought about its relevance to us (Avalon)?

played with it a little a while ago.


If you're feeling like sacrificing proper IoC and SoC, passive component apis, clean encapsulation, security, an api that is not a mess, that does not tie you to any gui concept (IIRC it has supportsGUI(), needsGUI() etc etc), does not have dumbly stated contracts (like "implementation of interface X must synchronize globally against static object Y") that fall apart in a multi-classloader world, bloated collections-api-incorporating interface definitions, then....

...it is a compelling replacement for the use of avalon (or pico, or similar) inside a single-classloader, single-vendor environment, especially if you're building a GUI. And it allows you to do useful things like hierarchy synchronization IIRC and everything is exposed through the beans-style event api.

It goes a little something like:

class MyBean
  extends SomeAbstractImplementationThatYouHaveToWriteYourself
  implements SomeInterfaceIDontRememberNameOf
{
        setContext( BeanContext bc )
        {
                if(m_bc != null)
                        fireBeanContextChangeEvent(bc);

                m_bc = bc;
        }

        void myMethod()
        {
                checkBeanContextAvailable();

                // do stuff
        }

        void fireBeanContextChangeEvent( BeanContext bc )
        {
                // loop over property change and
                // vetoing listeners and send them the
                // old and new values
        }
        void checkBeanContextAvailable()
                throws IllegalStateException
        {
                // you really want to check setContext()
                // has been called and stuff is available,
                // because you really can't be sure with
                // the BC
        }
}

class MyOtherBean
  extends SomeAbstractImplementationThatYouHaveToWriteYourself
  implements SomeInterfaceIDontRememberNameOf
{
        // ...

        void doStuff()
        {
                checkBeanContextAvailable();
                setup();
        }

        void setup()
        {
                if(setup)
                        return;

                Iterator it = m_bc.iterator();
                while( it.hasNext() )
                {
                        Object bean = it.next();
                        if(bean instanceof MyBean)
                                m_myBean = bean;

                        // and something like that for all
                        // dependencies
                }
        }
}

// in your app
BeanContext bc = new BeanContextImplementation();
bc.add( new MyBean() );
bc.add( new MyOtherBean() );


Not very clean, is it? No dependency management, no object creation policies, no security, no transparency (if you use beancontext its difficult to code a setup where your clients don't).


cheers,

- Leo



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



Reply via email to