You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2008/01/17 15:51:14 UTC
svn commit: r612835 - in /servicemix/smx4/nmr/trunk:
jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/
jbi/deployer/src/main/resources/META-INF/spring/ preferences/
preferences/src/main/java/org/apache/servicemix/preferences/
Author: gnodet
Date: Thu Jan 17 06:50:21 2008
New Revision: 612835
URL: http://svn.apache.org/viewvc?rev=612835&view=rev
Log:
Auto start / state persistence of JBI components and SAs
Modified:
servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ComponentImpl.java
servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/Deployer.java
servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ServiceAssemblyImpl.java
servicemix/smx4/nmr/trunk/jbi/deployer/src/main/resources/META-INF/spring/servicemix-jbi-deployer.xml
servicemix/smx4/nmr/trunk/preferences/pom.xml
servicemix/smx4/nmr/trunk/preferences/src/main/java/org/apache/servicemix/preferences/PreferencesServiceFactoryImpl.java
Modified: servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ComponentImpl.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ComponentImpl.java?rev=612835&r1=612834&r2=612835&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ComponentImpl.java (original)
+++ servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ComponentImpl.java Thu Jan 17 06:50:21 2008
@@ -17,12 +17,12 @@
package org.apache.servicemix.jbi.deployer.impl;
import javax.jbi.JBIException;
-import javax.jbi.messaging.MessageExchange;
-import javax.jbi.servicedesc.ServiceEndpoint;
+import javax.jbi.component.ComponentContext;
import javax.jbi.component.ComponentLifeCycle;
import javax.jbi.component.ServiceUnitManager;
-import javax.jbi.component.ComponentContext;
import javax.jbi.management.LifeCycleMBean;
+import javax.jbi.messaging.MessageExchange;
+import javax.jbi.servicedesc.ServiceEndpoint;
import javax.management.ObjectName;
import org.w3c.dom.Document;
@@ -30,6 +30,10 @@
import org.apache.servicemix.jbi.deployer.Component;
import org.apache.servicemix.jbi.deployer.descriptor.ComponentDesc;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.osgi.service.prefs.BackingStoreException;
+import org.osgi.service.prefs.Preferences;
/**
* Created by IntelliJ IDEA.
@@ -40,6 +44,10 @@
*/
public class ComponentImpl implements Component {
+ private static final Log LOGGER = LogFactory.getLog(ComponentImpl.class);
+
+ private static final String STATE = "state";
+
protected enum State {
Unknown,
Initialized,
@@ -50,12 +58,18 @@
private ComponentDesc componentDesc;
private javax.jbi.component.Component component;
-
private State state = State.Unknown;
+ private Preferences prefs;
+ private State runningState;
- public ComponentImpl(ComponentDesc componentDesc, javax.jbi.component.Component component) {
+ public ComponentImpl(ComponentDesc componentDesc,
+ javax.jbi.component.Component component,
+ Preferences prefs,
+ boolean autoStart) {
this.componentDesc = componentDesc;
this.component = new ComponentWrapper(component);
+ this.prefs = prefs;
+ this.runningState = State.valueOf(this.prefs.get(STATE, (autoStart ? State.Started : State.Initialized).name()));
}
public String getName() {
@@ -77,12 +91,14 @@
public void start() throws JBIException {
component.getLifeCycle().start();
state = State.Started;
+ saveState();
}
public void stop() throws JBIException {
if (state == State.Started) {
component.getLifeCycle().stop();
state = State.Stopped;
+ saveState();
}
}
@@ -93,6 +109,16 @@
if (state == State.Stopped) {
component.getLifeCycle().shutDown();
state = State.Shutdown;
+ saveState();
+ }
+ }
+
+ private void saveState() {
+ this.prefs.put(STATE, state.name());
+ try {
+ this.prefs.flush();
+ } catch (BackingStoreException e) {
+ LOGGER.warn("Unable to persist state", e);
}
}
@@ -155,6 +181,18 @@
Thread.currentThread().setContextClassLoader(lifeCycle.getClass().getClassLoader());
lifeCycle.init(context);
state = State.Initialized;
+ if (runningState == State.Started) {
+ start();
+ state = State.Started;
+ } else if (runningState == State.Stopped) {
+ start();
+ state = State.Started;
+ stop();
+ state = State.Stopped;
+ } else if (runningState == State.Shutdown) {
+ shutDown();
+ state = State.Shutdown;
+ }
} finally {
Thread.currentThread().setContextClassLoader(cl);
}
Modified: servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/Deployer.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/Deployer.java?rev=612835&r1=612834&r2=612835&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/Deployer.java (original)
+++ servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/Deployer.java Thu Jan 17 06:50:21 2008
@@ -19,7 +19,6 @@
import java.io.File;
import java.net.URL;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Dictionary;
import java.util.Hashtable;
import java.util.List;
@@ -45,6 +44,8 @@
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.prefs.Preferences;
+import org.osgi.service.prefs.PreferencesService;
import org.springframework.osgi.util.BundleDelegatingClassLoader;
import org.springframework.osgi.util.OsgiServiceReferenceUtils;
import org.springframework.osgi.util.OsgiServiceUtils;
@@ -73,6 +74,10 @@
private File jbiRootDir;
+ private PreferencesService preferencesService;
+
+ private boolean autoStart = true;
+
public Deployer() throws JBIException{
sharedLibraries = new ConcurrentHashMap<String, SharedLibraryImpl>();
serviceAssemblies = new ConcurrentHashMap<String, ServiceAssemblyImpl>();
@@ -83,6 +88,22 @@
jbiRootDir.mkdirs();
}
+ public PreferencesService getPreferencesService() {
+ return preferencesService;
+ }
+
+ public void setPreferencesService(PreferencesService preferencesService) {
+ this.preferencesService = preferencesService;
+ }
+
+ public boolean isAutoStart() {
+ return autoStart;
+ }
+
+ public void setAutoStart(boolean autoStart) {
+ this.autoStart = autoStart;
+ }
+
@Override
protected boolean match(Bundle bundle) {
LOGGER.debug("Checking bundle: '" + OsgiStringUtils.nullSafeNameAndSymName(bundle) + "'");
@@ -150,9 +171,10 @@
ClassLoader classLoader = createComponentClassLoader(componentDesc, bundle);
Thread.currentThread().setContextClassLoader(classLoader);
// Instanciate component
+ Preferences prefs = preferencesService.getUserPreferences(componentDesc.getIdentification().getName());
Class clazz = classLoader.loadClass(componentDesc.getComponentClassName());
javax.jbi.component.Component innerComponent = (javax.jbi.component.Component) clazz.newInstance();
- ComponentImpl component = new ComponentImpl(componentDesc, innerComponent);
+ ComponentImpl component = new ComponentImpl(componentDesc, innerComponent, prefs, autoStart);
// populate props from the component meta-data
Dictionary<String, String> props = new Hashtable<String, String>();
props.put(NAME, componentDesc.getIdentification().getName());
@@ -199,7 +221,8 @@
sus.add(su);
}
// Now create the SA and initialize it
- ServiceAssemblyImpl sa = new ServiceAssemblyImpl(serviceAssembyDesc, sus);
+ Preferences prefs = preferencesService.getUserPreferences(serviceAssembyDesc.getIdentification().getName());
+ ServiceAssemblyImpl sa = new ServiceAssemblyImpl(serviceAssembyDesc, sus, prefs, autoStart);
sa.init();
// populate props from the component meta-data
Dictionary<String, String> props = new Hashtable<String, String>();
Modified: servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ServiceAssemblyImpl.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ServiceAssemblyImpl.java?rev=612835&r1=612834&r2=612835&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ServiceAssemblyImpl.java (original)
+++ servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ServiceAssemblyImpl.java Thu Jan 17 06:50:21 2008
@@ -27,13 +27,17 @@
import org.apache.servicemix.jbi.deployer.ServiceAssembly;
import org.apache.servicemix.jbi.deployer.ServiceUnit;
import org.apache.servicemix.jbi.deployer.descriptor.ServiceAssemblyDesc;
+import org.osgi.service.prefs.Preferences;
+import org.osgi.service.prefs.BackingStoreException;
/**
* ServiceAssembly object
*/
public class ServiceAssemblyImpl implements ServiceAssembly {
- private static final Log Logger = LogFactory.getLog(ServiceAssemblyImpl.class);
+ private static final Log LOGGER = LogFactory.getLog(ServiceAssemblyImpl.class);
+
+ private static final String STATE = "state";
protected enum State {
Unknown,
@@ -49,9 +53,18 @@
private State state = State.Unknown;
- public ServiceAssemblyImpl(ServiceAssemblyDesc serviceAssemblyDesc, List<ServiceUnitImpl> serviceUnits) {
+ private Preferences prefs;
+
+ private State runningState;
+
+ public ServiceAssemblyImpl(ServiceAssemblyDesc serviceAssemblyDesc,
+ List<ServiceUnitImpl> serviceUnits,
+ Preferences prefs,
+ boolean autoStart) {
this.serviceAssemblyDesc = serviceAssemblyDesc;
this.serviceUnits = serviceUnits;
+ this.prefs = prefs;
+ this.runningState = State.valueOf(this.prefs.get(STATE, (autoStart ? State.Started : State.Initialized).name()));
}
public String getName() {
@@ -82,19 +95,39 @@
public void init() throws JBIException {
transition(State.Initialized);
- }
-
- public void shutDown() throws JBIException {
- transition(State.Shutdown);
- }
+ if (runningState == State.Started) {
+ transition(State.Started);
+ } else if (runningState == State.Stopped) {
+ transition(State.Started);
+ transition(State.Stopped);
+ } else if (runningState == State.Shutdown) {
+ transition(State.Shutdown);
+ }
+ }
public void start() throws JBIException {
transition(State.Started);
+ saveState();
}
public void stop() throws JBIException {
transition(State.Stopped);
+ saveState();
}
+
+ public void shutDown() throws JBIException {
+ transition(State.Shutdown);
+ saveState();
+ }
+
+ private void saveState() {
+ this.prefs.put(STATE, state.name());
+ try {
+ this.prefs.flush();
+ } catch (BackingStoreException e) {
+ LOGGER.warn("Unable to persist state", e);
+ }
+ }
protected void transition(State to) throws JBIException {
// TODO: reject invalid transitions, for example Started -> Shutdown
Modified: servicemix/smx4/nmr/trunk/jbi/deployer/src/main/resources/META-INF/spring/servicemix-jbi-deployer.xml
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/jbi/deployer/src/main/resources/META-INF/spring/servicemix-jbi-deployer.xml?rev=612835&r1=612834&r2=612835&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/jbi/deployer/src/main/resources/META-INF/spring/servicemix-jbi-deployer.xml (original)
+++ servicemix/smx4/nmr/trunk/jbi/deployer/src/main/resources/META-INF/spring/servicemix-jbi-deployer.xml Thu Jan 17 06:50:21 2008
@@ -31,6 +31,8 @@
<!-- JBI Deployer -->
<bean id="deployer" class="org.apache.servicemix.jbi.deployer.impl.Deployer">
+ <property name="preferencesService" ref="preferencesService" />
+ <property name="autoStart" value="true" />
</bean>
<!-- Deployment listener -->
@@ -38,6 +40,10 @@
<!-- JBI Handler -->
<bean id="jbiHandler" class="org.apache.servicemix.jbi.deployer.handler.URLHandler" />
+
+ <!-- Preferences Service -->
+ <osgi:reference id="preferencesService"
+ interface="org.osgi.service.prefs.PreferencesService" />
<osgi:service ref="jbiHandler" interface="org.osgi.service.url.URLStreamHandlerService">
<osgi:service-properties>
Modified: servicemix/smx4/nmr/trunk/preferences/pom.xml
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/preferences/pom.xml?rev=612835&r1=612834&r2=612835&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/preferences/pom.xml (original)
+++ servicemix/smx4/nmr/trunk/preferences/pom.xml Thu Jan 17 06:50:21 2008
@@ -24,7 +24,7 @@
<parent>
<groupId>org.apache.servicemix.nmr</groupId>
- <artifactId>nmr</artifactId>
+ <artifactId>nmr-parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
Modified: servicemix/smx4/nmr/trunk/preferences/src/main/java/org/apache/servicemix/preferences/PreferencesServiceFactoryImpl.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/preferences/src/main/java/org/apache/servicemix/preferences/PreferencesServiceFactoryImpl.java?rev=612835&r1=612834&r2=612835&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/preferences/src/main/java/org/apache/servicemix/preferences/PreferencesServiceFactoryImpl.java (original)
+++ servicemix/smx4/nmr/trunk/preferences/src/main/java/org/apache/servicemix/preferences/PreferencesServiceFactoryImpl.java Thu Jan 17 06:50:21 2008
@@ -66,7 +66,7 @@
public synchronized Object getService(Bundle bundle, ServiceRegistration serviceRegistration) {
checkInit();
- return preferences.node("/" + bundle.getBundleId());
+ return new PreferencesServiceImpl((AbstractPreferencesImpl) preferences.node("/" + bundle.getBundleId()));
}
public synchronized void ungetService(Bundle bundle, ServiceRegistration serviceRegistration, Object o) {