hi stephan,

I don't know exactly your use case, but...

why don't you just keep the datasource, I assume it won't change anyway. so
just close the connection in recycle() and release the data source in
dispose() (i.e. implement Disposable). in your processSomethingXY()s get the
connection by using a private method, which stores/retrives the current
connection; when the current connection is null, get it from the data
source, otherwise return it.

> -----Urspr�ngliche Nachricht-----
> Von: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] Auftrag
> von Stephan Coboos
> Gesendet: Dienstag, 10. Februar 2004 11:07
> An: [EMAIL PROTECTED]
> Betreff: Re: How to initialize a component coming from the pool?
>
>
> Jorg Heymans wrote:
>
> > Looking a bit better at the docs that was not the best advice from my
> > part sorry.
> >
> > I am assuming that you want to use myComponent throughout your whole
> > component, hence the need to only look it up once when it comes from
> > the pool. But what is so special about myComponent that you want a
> > fresh one every time?
> >
> >
> Think about a SQL connection which should shared between two or more
> methods in the component. After usage of the component the connection
> must returned to the pool. Next time I will get the component from the
> pool I need another connection object from the pool.
>
> I'm appending a part of a message which I had posted in the avalon
> mailing list about this problem:
>
> public class AnotherComponent   implements Serviceable,
> AnotherInterface, Recyclable, Initializable
> {
>    private ServiceManager m_ServiceManager;
>    private ComponentDatasource ds;
>    private Connection con;
>
>    public void processSomething()
>    {
>       Connection con = this.con;
>
>        // Do something here with con...
>        // but do not close!
>    }
>
>
>    public void processSomething2()
>    {         Connection con = this.con;
>
>        // Do something here with con...
>        // but do not close!
>    }
>
>    public void initialize() {
>
>     this.ds = ... // Getting the datasource from the serviceManager
>        this.con = this.ds.getConnection();            }
>
>    public void recycle() {
>
>      // Here close the connection and return them to the pool
>      this.con.close();
>
>      // Release the datasource
>      this.serviceManager.release(ds);
>    }
>
>    public void service( ServiceManager man )
>    {
>        m_ServiceManager = man;
>    }
> }
>
> Please have a look into the code above. In the method initialize() I'am
> creating the datasource and the connection. The connection will be used
> by the two methods processSomething() and processSomething2(). I dont
> want to create a new connection or close it in each method. After the
> component will not be longer in use, I'am returning it into the pool and
> therefore the method recycle() will be called which closes the
> connection and releases the datsource. But what happens if I get the
> component the next time from the pool? Where is the initialization
> process to get the datasource and connection called? In intialize()? I
> think not because initialize() will be called only once at instanciation
> time and after that never more. So where to put the initialization code
> if I have a pooled component?
>
> Thank you.
>
> Regards
> Stephan
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>


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

Reply via email to