Bug 386446: support JSR250 lifecycles in Plexus (optional)
diff --git a/org.eclipse.sisu.plexus/src/org/codehaus/plexus/ContainerConfiguration.java b/org.eclipse.sisu.plexus/src/org/codehaus/plexus/ContainerConfiguration.java
index 521cb96..56d0121 100644
--- a/org.eclipse.sisu.plexus/src/org/codehaus/plexus/ContainerConfiguration.java
+++ b/org.eclipse.sisu.plexus/src/org/codehaus/plexus/ContainerConfiguration.java
@@ -58,4 +58,8 @@
ContainerConfiguration setContextComponent( Context context );
Context getContextComponent();
+
+ ContainerConfiguration setJSR250Lifecycle( boolean on );
+
+ boolean getJSR250Lifecycle();
}
diff --git a/org.eclipse.sisu.plexus/src/org/codehaus/plexus/DefaultContainerConfiguration.java b/org.eclipse.sisu.plexus/src/org/codehaus/plexus/DefaultContainerConfiguration.java
index 2f1390d..4c514e6 100644
--- a/org.eclipse.sisu.plexus/src/org/codehaus/plexus/DefaultContainerConfiguration.java
+++ b/org.eclipse.sisu.plexus/src/org/codehaus/plexus/DefaultContainerConfiguration.java
@@ -44,6 +44,8 @@
private Context contextComponent;
+ private boolean jsr250Lifecycle;
+
// ----------------------------------------------------------------------
// Public methods
// ----------------------------------------------------------------------
@@ -155,4 +157,15 @@
{
return contextComponent;
}
+
+ public ContainerConfiguration setJSR250Lifecycle( final boolean jsr250Lifecycle )
+ {
+ this.jsr250Lifecycle = jsr250Lifecycle;
+ return this;
+ }
+
+ public boolean getJSR250Lifecycle()
+ {
+ return jsr250Lifecycle;
+ }
}
diff --git a/org.eclipse.sisu.plexus/src/org/codehaus/plexus/DefaultPlexusContainer.java b/org.eclipse.sisu.plexus/src/org/codehaus/plexus/DefaultPlexusContainer.java
index 8be8d0c..54224e9 100644
--- a/org.eclipse.sisu.plexus/src/org/codehaus/plexus/DefaultPlexusContainer.java
+++ b/org.eclipse.sisu.plexus/src/org/codehaus/plexus/DefaultPlexusContainer.java
@@ -44,6 +44,7 @@
import org.codehaus.plexus.logging.LoggerManager;
import org.codehaus.plexus.logging.console.ConsoleLoggerManager;
import org.eclipse.sisu.bean.BeanManager;
+import org.eclipse.sisu.bean.LifecycleManager;
import org.eclipse.sisu.inject.DefaultBeanLocator;
import org.eclipse.sisu.inject.DefaultRankingFunction;
import org.eclipse.sisu.inject.DeferredClass;
@@ -185,8 +186,9 @@
scanning = parseScanningOption( configuration.getClassPathScanning() );
plexusBeanLocator = new DefaultPlexusBeanLocator( qualifiedBeanLocator, componentVisibility );
+ final BeanManager jsr250Lifecycle = configuration.getJSR250Lifecycle() ? new LifecycleManager() : null;
plexusBeanManager = new PlexusLifecycleManager( Providers.of( context ), loggerManagerProvider, //
- new SLF4JLoggerFactoryProvider() ); // SLF4J (optional)
+ new SLF4JLoggerFactoryProvider(), jsr250Lifecycle );
realmIds.add( containerRealm.getId() );
setLookupRealm( containerRealm );
diff --git a/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusLifecycleManager.java b/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusLifecycleManager.java
index f77ad70..99de24f 100644
--- a/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusLifecycleManager.java
+++ b/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusLifecycleManager.java
@@ -64,17 +64,22 @@
private final Provider<?> slf4jLoggerFactoryProvider;
+ private final BeanManager delegate;
+
// ----------------------------------------------------------------------
// Constructors
// ----------------------------------------------------------------------
public PlexusLifecycleManager( final Provider<Context> plexusContextProvider,
final Provider<LoggerManager> plexusLoggerManagerProvider,
- final Provider<?> slf4jLoggerFactoryProvider )
+ final Provider<?> slf4jLoggerFactoryProvider, //
+ final BeanManager delegate )
{
this.plexusContextProvider = plexusContextProvider;
this.plexusLoggerManagerProvider = plexusLoggerManagerProvider;
this.slf4jLoggerFactoryProvider = slf4jLoggerFactoryProvider;
+
+ this.delegate = delegate;
}
// ----------------------------------------------------------------------
@@ -95,7 +100,7 @@
return true;
}
}
- return false;
+ return null != delegate ? delegate.manage( clazz ) : false;
}
@SuppressWarnings( "rawtypes" )
@@ -124,7 +129,7 @@
}
};
}
- return null;
+ return null != delegate ? delegate.manage( property ) : null;
}
public boolean manage( final Object bean )
@@ -141,7 +146,7 @@
{
schedule( bean );
}
- return true;
+ return null != delegate ? delegate.manage( bean ) : true;
}
public boolean unmanage( final Object bean )
@@ -154,7 +159,7 @@
{
dispose( (Disposable) bean );
}
- return true;
+ return null != delegate ? delegate.unmanage( bean ) : true;
}
public boolean unmanage()
@@ -167,7 +172,7 @@
{
dispose( bean );
}
- return true;
+ return null != delegate ? delegate.unmanage() : true;
}
// ----------------------------------------------------------------------
diff --git a/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusSpaceModule.java b/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusSpaceModule.java
index 91432c6..2a81cc4 100644
--- a/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusSpaceModule.java
+++ b/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusSpaceModule.java
@@ -66,7 +66,7 @@
final BeanManager manager = new PlexusLifecycleManager( binder.getProvider( Context.class ), //
binder.getProvider( LoggerManager.class ), //
- slf4jLoggerFactoryProvider ); // SLF4J (optional)
+ slf4jLoggerFactoryProvider, null );
binder.bind( BeanManager.class ).toInstance( manager );