colus 2002/07/22 06:26:23 Modified: src/java/org/apache/avalon/phoenix/components/kernel DefaultKernel.java Log: Lock startup and shutdown of application. Is it right implementation for PR8647? PR: 8647 Revision Changes Path 1.74 +69 -58 jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/kernel/DefaultKernel.java Index: DefaultKernel.java =================================================================== RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/kernel/DefaultKernel.java,v retrieving revision 1.73 retrieving revision 1.74 diff -u -r1.73 -r1.74 --- DefaultKernel.java 14 Jul 2002 05:41:05 -0000 1.73 +++ DefaultKernel.java 22 Jul 2002 13:26:23 -0000 1.74 @@ -125,69 +125,80 @@ private void startup( final SarEntry entry ) throws Exception { - final String name = entry.getMetaData().getName(); - - Application application = entry.getApplication(); - if( null == application ) - { - try - { - final Application newApp = new DefaultApplication(); - final Logger childLogger = getLogger().getChildLogger( name ); - ContainerUtil.enableLogging( newApp, childLogger ); - - final ApplicationContext context = createApplicationContext( entry ); - newApp.setApplicationContext( context ); - - ContainerUtil.initialize( newApp ); - ContainerUtil.start( newApp ); - - entry.setApplication( newApp ); - application = newApp; - } - catch( final Throwable t ) - { - //Initialization failed so clean entry - //so invalid instance is not used - entry.setApplication( null ); - - final String message = - REZ.getString( "kernel.error.entry.initialize", - entry.getMetaData().getName() ); - throw new CascadingException( message, t ); - } - - // manage application - try - { - m_applicationManager.register( name, - application, - new Class[]{ApplicationMBean.class} ); - } - catch( final Throwable t ) - { - final String message = - REZ.getString( "kernel.error.entry.manage", name ); - throw new CascadingException( message, t ); - } - } + //lock for application startup and shutdown + synchronized ( entry ) + { + final String name = entry.getMetaData().getName(); + + Application application = entry.getApplication(); + if( null == application ) + { + try + { + final Application newApp = new DefaultApplication(); + final Logger childLogger = + getLogger().getChildLogger( name ); + ContainerUtil.enableLogging( newApp, childLogger ); + + final ApplicationContext context = + createApplicationContext( entry ); + newApp.setApplicationContext( context ); + + ContainerUtil.initialize( newApp ); + ContainerUtil.start( newApp ); + + entry.setApplication( newApp ); + application = newApp; + } + catch( final Throwable t ) + { + //Initialization failed so clean entry + //so invalid instance is not used + entry.setApplication( null ); + + final String message = + REZ.getString( "kernel.error.entry.initialize", + entry.getMetaData().getName() ); + throw new CascadingException( message, t ); + } + + // manage application + try + { + m_applicationManager.register( name, + application, + new Class[]{ApplicationMBean.class} ); + } + catch( final Throwable t ) + { + final String message = + REZ.getString( "kernel.error.entry.manage", name ); + throw new CascadingException( message, t ); + } + } + } } private void shutdown( final SarEntry entry ) throws Exception { - final Application application = entry.getApplication(); - if( null != application ) - { - entry.setApplication( null ); - ContainerUtil.shutdown( application ); - } - else - { - final String message = - REZ.getString( "kernel.error.entry.nostop", entry.getMetaData().getName() ); - getLogger().warn( message ); - } + //lock for application startup and shutdown + synchronized ( entry ) + { + final Application application = entry.getApplication(); + if( null != application ) + { + entry.setApplication( null ); + ContainerUtil.shutdown( application ); + } + else + { + final String message = + REZ.getString( "kernel.error.entry.nostop", + entry.getMetaData().getName() ); + getLogger().warn( message ); + } + } } public void addApplication( final SarMetaData metaData,
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>