Kristian
Stephen McConnell wrote:
kristian meier wrote:
Hi,
although the pooled lifestyle is already in the documentation, but was not completly integrated.
the attached patch fixes some issues with the pool. apparently the appliance is not assembled inside the initialize-method, so that is not the right place for initializing the pool. thus I shifted the pool initliaization to the access-method and made it lazy.
Cool - I havn't used the pool lifestyle for anything important todate - focus has been much more of the other three flavours. I'll apply the patch later today.
the configure method is still unused, I just don't know from where to get the configruration object. anyway the question for me would be:
is the pool size part of the xconfig file or part of the xtype file (as attribute similar to the lifestyle attribute) ?
The pool should be setup by the kernel and passed as a context value. I'll check into what is happening after I've taken a look at the patch.
Cheers, Steve.
hope the patch helps as it is
with best wishes Kristian
------------------------------------------------------------------------
Index: src/java/org/apache/avalon/assembly/lifestyle/impl/DefaultLifestyleService.java
===================================================================
RCS file: /home/cvspublic/avalon-sandbox/merlin/assembly/src/java/org/apache/avalon/assembly/lifestyle/impl/DefaultLifestyleService.java,v
retrieving revision 1.3
diff -u -r1.3 DefaultLifestyleService.java
--- src/java/org/apache/avalon/assembly/lifestyle/impl/DefaultLifestyleService.java 8 May 2003 03:02:39 -0000 1.3
+++ src/java/org/apache/avalon/assembly/lifestyle/impl/DefaultLifestyleService.java 17 Jun 2003 06:33:15 -0000
@@ -232,6 +232,21 @@
"Internal error while attempting to establish the transient lifestyle handler.";
throw new LifestyleRuntimeException( error, e );
}
+ } else if( policy.equals( "pooled" ) )
+ {
+ try
+ {
+ PooledLifestyleHandler pooled = new PooledLifestyleHandler();
+ pooled.enableLogging( getLogger() );
+ pooled.contextualize( context );
+ pooled.initialize();
+ return pooled;
+ } catch( Throwable e )
+ {
+ final String error =
+ "Internal error while attempting to establish the pooled lifestyle handler.";
+ throw new LifestyleRuntimeException( error, e );
+ }
} else
{
final String error =
Index: src/java/org/apache/avalon/assembly/lifestyle/impl/PooledLifestyleHandler.java
===================================================================
RCS file: /home/cvspublic/avalon-sandbox/merlin/assembly/src/java/org/apache/avalon/assembly/lifestyle/impl/PooledLifestyleHandler.java,v
retrieving revision 1.2
diff -u -r1.2 PooledLifestyleHandler.java
--- src/java/org/apache/avalon/assembly/lifestyle/impl/PooledLifestyleHandler.java 9 Jun 2003 01:11:17 -0000 1.2
+++ src/java/org/apache/avalon/assembly/lifestyle/impl/PooledLifestyleHandler.java 17 Jun 2003 06:33:15 -0000
@@ -107,7 +107,7 @@
/**
* The object pool size.
*/
- private int m_size;
+ private int m_size = 5;
/** * The class of object managed by the pool. @@ -127,9 +127,9 @@ { if( config == null ) { - throw new NullPointerException( "config" ); + throw new NullPointerException( "config" ); } - m_size = config.getAttributeAsInteger( "size", 5 ); + else m_size = config.getAttributeAsInteger( "size", 5 ); }
//==============================================================
@@ -161,7 +161,6 @@
public void initialize() throws Exception
{
super.initialize();
- m_pool = m_poolManager.getManagedPool( this, m_size );
m_appliance = (Appliance) m_context.get( "urn:assembly:appliance.target" );
ClassLoader classloader = (ClassLoader) m_context.get( "urn:avalon:classloader" );
m_class = classloader.loadClass( m_appliance.getType().getInfo().getClassname() );
@@ -190,9 +189,19 @@
*/
private Object access() throws LocatorException
{
- try
+ try
{
- Object object = m_pool.acquire();
+ if( m_pool == null )
+ {
+ synchronized( m_pool )
+ {
+ if( m_pool == null )
+ {
+ m_pool = m_poolManager.getManagedPool( this, m_size );
+ }
+ }
+ }
+ Object object = m_pool.acquire();
super.processAccessStage( object );
return object;
}
------------------------------------------------------------------------
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Index: src/java/org/apache/avalon/assembly/lifestyle/impl/DefaultLifestyleService.java
===================================================================
RCS file:
/home/cvspublic/avalon-sandbox/merlin/assembly/src/java/org/apache/avalon/assembly/lifestyle/impl/DefaultLifestyleService.java,v
retrieving revision 1.3
diff -u -r1.3 DefaultLifestyleService.java
--- src/java/org/apache/avalon/assembly/lifestyle/impl/DefaultLifestyleService.java
8 May 2003 03:02:39 -0000 1.3
+++ src/java/org/apache/avalon/assembly/lifestyle/impl/DefaultLifestyleService.java
17 Jun 2003 15:02:08 -0000
@@ -232,6 +232,21 @@
"Internal error while attempting to establish the transient
lifestyle handler.";
throw new LifestyleRuntimeException( error, e );
}
+ } else if( policy.equals( "pooled" ) )
+ {
+ try
+ {
+ PooledLifestyleHandler pooled = new PooledLifestyleHandler();
+ pooled.enableLogging( getLogger() );
+ pooled.contextualize( context );
+ pooled.initialize();
+ return pooled;
+ } catch( Throwable e )
+ {
+ final String error =
+ "Internal error while attempting to establish the pooled lifestyle
handler.";
+ throw new LifestyleRuntimeException( error, e );
+ }
} else
{
final String error =
Index: src/java/org/apache/avalon/assembly/lifestyle/impl/PooledLifestyleHandler.java
===================================================================
RCS file:
/home/cvspublic/avalon-sandbox/merlin/assembly/src/java/org/apache/avalon/assembly/lifestyle/impl/PooledLifestyleHandler.java,v
retrieving revision 1.2
diff -u -r1.2 PooledLifestyleHandler.java
--- src/java/org/apache/avalon/assembly/lifestyle/impl/PooledLifestyleHandler.java
9 Jun 2003 01:11:17 -0000 1.2
+++ src/java/org/apache/avalon/assembly/lifestyle/impl/PooledLifestyleHandler.java
17 Jun 2003 15:02:09 -0000
@@ -107,7 +107,7 @@
/**
* The object pool size.
*/
- private int m_size;
+ private int m_size = 5;
/**
* The class of object managed by the pool.
@@ -127,9 +127,9 @@
{
if( config == null )
{
- throw new NullPointerException( "config" );
+ throw new NullPointerException( "config" );
}
- m_size = config.getAttributeAsInteger( "size", 5 );
+ else m_size = config.getAttributeAsInteger( "size", 5 );
}
//==============================================================
@@ -161,7 +161,6 @@
public void initialize() throws Exception
{
super.initialize();
- m_pool = m_poolManager.getManagedPool( this, m_size );
m_appliance = (Appliance) m_context.get( "urn:assembly:appliance.target" );
ClassLoader classloader = (ClassLoader) m_context.get(
"urn:avalon:classloader" );
m_class = classloader.loadClass(
m_appliance.getType().getInfo().getClassname() );
@@ -190,9 +189,19 @@
*/
private Object access() throws LocatorException
{
- try
+ try
{
- Object object = m_pool.acquire();
+ if( m_pool == null )
+ {
+ synchronized( m_poolManager )
+ {
+ if( m_pool == null )
+ {
+ m_pool = m_poolManager.getManagedPool( this, m_size );
+ }
+ }
+ }
+ Object object = m_pool.acquire();
super.processAccessStage( object );
return object;
} --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
