Hi Lukas,

that's it :-)

thanks.
Yes the registering and de-registering needs to be thread safe.
Could you open an issue for it? Thanks.
Btw. this needs to be done to make sure all filters are registered after
the Servlet is registered, otherwise a connection between the filters and
servlets won't work.

regards, Achim



2017-03-13 9:47 GMT+01:00 Lukas Rohner <[email protected]>:

> Hi Achim
>
> Here the debug logs before the exception is thrown:
>
> 2017-03-13 09:38:29,595 | DEBUG | (AbstractTracker) - Service available
> [javax.servlet.Servlet]
> 2017-03-13 09:38:29,595 | DEBUG | (ServletTracker) - Creating web element
> for service 415 [javax.servlet.Servlet] (org.opencastproject.oaipmh.
> server.OaiPmhServer@2eb3f91).
> 2017-03-13 09:38:29,596 | DEBUG | (WebApplication) - de-registering 9
> servlet filters
> 2017-03-13 09:38:29,596 | DEBUG | (HttpServiceProxy) - Unregistering
> filter [org.opencastproject.kernel.rest.CleanSessionsFilter@780c587e]
> 2017-03-13 09:38:29,597 | DEBUG | (JettyServerImpl) - Removing filter
> model [FilterModel{id=org.ops4j.pax.web.service.spi.model.
> FilterModel-144,urlPatterns=[*],servletNames=null,filter=
> org.opencastproject.kernel.rest.CleanSessionsFilter@
> 780c587e,filterClass=null,context=ContextModel{id=org.
> ops4j.pax.web.service.spi.model.ContextModel-17,name=,
> httpContext=org.ops4j.pax.web.extender.whiteboard.internal.
> WebApplication$2@4dc08f85,contextParams={},virtualHosts=
> {},connectors={}}}]
> 2017-03-13 09:38:29,602 | DEBUG | (JettyServerWrapper) -
> ServletContextHandler for HTTP context [org.ops4j.pax.web.extender.
> whiteboard.internal.WebApplication$2@4dc08f85] referenced [42] times.
> 2017-03-13 09:38:29,602 | DEBUG | (HttpServiceProxy) - Unregistering
> filter [org.opencastproject.kernel.filter.https.HttpsFilter@5af7452d]
> 2017-03-13 09:38:29,603 | DEBUG | (JettyServerImpl) - Removing filter
> model [FilterModel{id=org.ops4j.pax.web.service.spi.model.
> FilterModel-145,urlPatterns=[*],servletNames=null,filter=
> org.opencastproject.kernel.filter.https.HttpsFilter@
> 5af7452d,filterClass=null,context=ContextModel{id=org.
> ops4j.pax.web.service.spi.model.ContextModel-17,name=,
> httpContext=org.ops4j.pax.web.extender.whiteboard.internal.
> WebApplication$2@4dc08f85,contextParams={},virtualHosts=
> {},connectors={}}}]
> 2017-03-13 09:38:29,603 | DEBUG | (JettyServerWrapper) -
> ServletContextHandler for HTTP context [org.ops4j.pax.web.extender.
> whiteboard.internal.WebApplication$2@4dc08f85] referenced [41] times.
> 2017-03-13 09:38:29,603 | DEBUG | (HttpServiceProxy) - Unregistering
> filter [org.opencastproject.kernel.rest.JsonpFilter@5fe89572]
> 2017-03-13 09:38:29,603 | DEBUG | (AbstractTracker) - Service available
> [javax.servlet.Servlet]
> 2017-03-13 09:38:29,604 | DEBUG | (JettyServerImpl) - Removing filter
> model [FilterModel{id=org.ops4j.pax.web.service.spi.model.
> FilterModel-146,urlPatterns=[*],servletNames=null,filter=
> org.opencastproject.kernel.rest.JsonpFilter@5fe89572,
> filterClass=null,context=ContextModel{id=org.ops4j.pax.
> web.service.spi.model.ContextModel-17,name=,httpContext=org.ops4j.pax.web.
> extender.whiteboard.internal.WebApplication$2@4dc08f85,
> contextParams={},virtualHosts={},connectors={}}}]
> 2017-03-13 09:38:29,604 | DEBUG | (JettyServerWrapper) -
> ServletContextHandler for HTTP context [org.ops4j.pax.web.extender.
> whiteboard.internal.WebApplication$2@4dc08f85] referenced [40] times.
> 2017-03-13 09:38:29,604 | DEBUG | (HttpServiceProxy) - Unregistering
> filter [org.opencastproject.kernel.security.OrganizationFilter@2d379537]
> 2017-03-13 09:38:29,604 | DEBUG | (ServletTracker) - Creating web element
> for service 416 [javax.servlet.Servlet] (org.opencastproject.kernel.
> rest.RestPublisher$RestServlet@16f9ae4d).
> 2017-03-13 09:38:29,604 | DEBUG | (JettyServerImpl) - Removing filter
> model [FilterModel{id=org.ops4j.pax.web.service.spi.model.
> FilterModel-147,urlPatterns=[*],servletNames=null,filter=
> org.opencastproject.kernel.security.OrganizationFilter@
> 2d379537,filterClass=null,context=ContextModel{id=org.
> ops4j.pax.web.service.spi.model.ContextModel-17,name=,
> httpContext=org.ops4j.pax.web.extender.whiteboard.internal.
> WebApplication$2@4dc08f85,contextParams={},virtualHosts=
> {},connectors={}}}]
> 2017-03-13 09:38:29,605 | DEBUG | (JettyServerWrapper) -
> ServletContextHandler for HTTP context [org.ops4j.pax.web.extender.
> whiteboard.internal.WebApplication$2@4dc08f85] referenced [39] times.
> 2017-03-13 09:38:29,605 | DEBUG | (WebApplication) - de-registering 9
> servlet filters
> 2017-03-13 09:38:29,605 | DEBUG | (HttpServiceProxy) - Unregistering
> filter [org.opencastproject.kernel.security.SecurityFilter@4de5b748]
> 2017-03-13 09:38:29,605 | DEBUG | (JettyServerImpl) - Removing filter
> model [FilterModel{id=org.ops4j.pax.web.service.spi.model.
> FilterModel-148,urlPatterns=[*],servletNames=null,filter=
> org.opencastproject.kernel.security.SecurityFilter@
> 4de5b748,filterClass=null,context=ContextModel{id=org.
> ops4j.pax.web.service.spi.model.ContextModel-17,name=,
> httpContext=org.ops4j.pax.web.extender.whiteboard.internal.
> WebApplication$2@4dc08f85,contextParams={},virtualHosts=
> {},connectors={}}}]
> 2017-03-13 09:38:29,605 | DEBUG | (HttpServiceProxy) - Unregistering
> filter [org.opencastproject.kernel.rest.CleanSessionsFilter@780c587e]
> 2017-03-13 09:38:29,606 | DEBUG | (JettyServerWrapper) -
> ServletContextHandler for HTTP context [org.ops4j.pax.web.extender.
> whiteboard.internal.WebApplication$2@4dc08f85] referenced [38] times.
> 2017-03-13 09:38:29,606 | DEBUG | (HttpServiceProxy) - Unregistering
> filter [org.opencastproject.kernel.filter.proxy.TransparentProxyFilter@
> 70343f1b]
>
> It seems like every time when the AbstractTracker finds a new servlet to
> register it de-registers all already existing filters and registers it
> again. If in the time of de-registering the tracker again finds a new
> servlet to register it executes the de-registration again without waiting
> for the previous running task to finish. So I think de-registring should be
> tread safe.
>
> BTW I got another NullPointerException this time:
>
> 2017-03-13 09:31:55,941 | ERROR | (Felix) - Bundle
> org.ops4j.pax.web.pax-web-extender-whiteboard [298] EventDispatcher:
> Error during dispatch. (java.lang.NullPointerException)
> java.lang.NullPointerException
> at 
> org.ops4j.pax.web.service.jetty.internal.JettyServerImpl.removeFilter(JettyServerImpl.java:628)
> [299:org.ops4j.pax.web.pax-web-jetty:6.0.2]
> at org.ops4j.pax.web.service.jetty.internal.ServerControllerImpl$Started.
> removeFilter(ServerControllerImpl.java:319) [299:org.ops4j.pax.web.pax-
> web-jetty:6.0.2]
> at org.ops4j.pax.web.service.jetty.internal.ServerControllerImpl.
> removeFilter(ServerControllerImpl.java:150) [299:org.ops4j.pax.web.pax-
> web-jetty:6.0.2]
> at 
> org.ops4j.pax.web.service.internal.HttpServiceStarted.unregisterFilter(HttpServiceStarted.java:623)
> [301:org.ops4j.pax.web.pax-web-runtime:6.0.2]
> at 
> org.ops4j.pax.web.service.internal.HttpServiceProxy.unregisterFilter(HttpServiceProxy.java:241)
> [301:org.ops4j.pax.web.pax-web-runtime:6.0.2]
> at org.ops4j.pax.web.extender.whiteboard.internal.element.
> FilterWebElement.unregister(FilterWebElement.java:74)
> [298:org.ops4j.pax.web.pax-web-extender-whiteboard:6.0.2]
> at org.ops4j.pax.web.extender.whiteboard.internal.WebApplication.
> unregisterWebElement(WebApplication.java:406) [298:org.ops4j.pax.web.pax-
> web-extender-whiteboard:6.0.2]
> at org.ops4j.pax.web.extender.whiteboard.internal.
> WebApplication$$Lambda$201/1704051900.accept(Unknown Source)
> [298:org.ops4j.pax.web.pax-web-extender-whiteboard:6.0.2]
> at java.util.ArrayList.forEach(ArrayList.java:1249) [?:?]
> at org.ops4j.pax.web.extender.whiteboard.internal.
> WebApplication.addWebElement(WebApplication.java:171)
> [298:org.ops4j.pax.web.pax-web-extender-whiteboard:6.0.2]
> at org.ops4j.pax.web.extender.whiteboard.internal.tracker.
> AbstractTracker.addingService(AbstractTracker.java:154)
> [298:org.ops4j.pax.web.pax-web-extender-whiteboard:6.0.2]
> at org.ops4j.pax.web.extender.whiteboard.internal.tracker.
> AbstractTracker.addingService(AbstractTracker.java:41)
> [298:org.ops4j.pax.web.pax-web-extender-whiteboard:6.0.2]
> at 
> org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:941)
> [?:?]
> at 
> org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:870)
> [?:?]
> at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
> [?:?]
> at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229)
> [?:?]
> at org.osgi.util.tracker.ServiceTracker$Tracked.
> serviceChanged(ServiceTracker.java:901) [?:?]
> at org.apache.felix.framework.EventDispatcher.
> invokeServiceListenerCallback(EventDispatcher.java:990) [?:?]
>
> Lukas
>
>
> Am Freitag, 10. März 2017 17:27:16 UTC+1 schrieb Achim Nierbeck:
>>
>> Hi Lukas,
>>
>> a) is there anything special about your filter?
>> b) can you turn on Debug Logging and show us the stack before the
>> exception?
>>
>> regards, Achim
>>
>>
>> 2017-03-10 8:37 GMT+01:00 Lukas Rohner <[email protected]>:
>>
>>> Hi all
>>>
>>>
>>> After updating pax-web from 4.2.8 to 6.0.2 by using Karaf 4.1.0 I have
>>> problem with the whiteboard extender. I see intermittent issues with
>>> registering servlet filters. Any ideas why this happens? Maybe it's a
>>> regression.
>>>
>>>
>>> Lukas
>>>
>>>
>>> 2017-03-10 08:27:42,545 | ERROR | (Felix) - Bundle
>>> org.ops4j.pax.web.pax-web-extender-whiteboard [298] EventDispatcher:
>>> Error during dispatch. (java.lang.IllegalArgumentException: Filter [
>>> org.opencastproject.kernel.rest.CleanSessionsFilter@374df63 is not
>>> currently registered in any context)
>>>
>>> java.lang.IllegalArgumentException: Filter [
>>> org.opencastproject.kernel.rest.CleanSessionsFilter@374df63 is not
>>> currently registered in any context
>>>
>>> at 
>>> org.ops4j.pax.web.service.spi.model.ServiceModel.removeFilter(ServiceModel.java:196)
>>> [302:org.ops4j.pax.web.pax-web-spi:6.0.2]
>>>
>>> at org.ops4j.pax.web.service.internal.HttpServiceStarted.unregi
>>> sterFilter(HttpServiceStarted.java:620) [301:org.ops4j.pax.web.pax-web
>>> -runtime:6.0.2]
>>>
>>> at org.ops4j.pax.web.service.internal.HttpServiceProxy.unregist
>>> erFilter(HttpServiceProxy.java:241) [301:org.ops4j.pax.web.pax-web
>>> -runtime:6.0.2]
>>>
>>> at org.ops4j.pax.web.extender.whiteboard.internal.element.Filte
>>> rWebElement.unregister(FilterWebElement.java:74)
>>> [298:org.ops4j.pax.web.pax-web-extender-whiteboard:6.0.2]
>>>
>>> at org.ops4j.pax.web.extender.whiteboard.internal.WebApplicatio
>>> n.unregisterWebElement(WebApplication.java:406)
>>> [298:org.ops4j.pax.web.pax-web-extender-whiteboard:6.0.2]
>>>
>>> at org.ops4j.pax.web.extender.whiteboard.internal.WebApplicatio
>>> n$$Lambda$227/1119206991.accept(Unknown Source)
>>> [298:org.ops4j.pax.web.pax-web-extender-whiteboard:6.0.2]
>>>
>>> at java.util.ArrayList.forEach(ArrayList.java:1249) [?:?]
>>>
>>> at org.ops4j.pax.web.extender.whiteboard.internal.WebApplicatio
>>> n.addWebElement(WebApplication.java:171) [298:org.ops4j.pax.web.pax-web
>>> -extender-whiteboard:6.0.2]
>>>
>>> at org.ops4j.pax.web.extender.whiteboard.internal.tracker.Abstr
>>> actTracker.addingService(AbstractTracker.java:154)
>>> [298:org.ops4j.pax.web.pax-web-extender-whiteboard:6.0.2]
>>>
>>> at org.ops4j.pax.web.extender.whiteboard.internal.tracker.Abstr
>>> actTracker.addingService(AbstractTracker.java:41)
>>> [298:org.ops4j.pax.web.pax-web-extender-whiteboard:6.0.2]
>>>
>>> at 
>>> org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:941)
>>> [?:?]
>>>
>>> at 
>>> org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:870)
>>> [?:?]
>>>
>>> at 
>>> org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
>>> [?:?]
>>>
>>> at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229)
>>> [?:?]
>>>
>>> at 
>>> org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:901)
>>> [?:?]
>>>
>>> at org.apache.felix.framework.EventDispatcher.invokeServiceList
>>> enerCallback(EventDispatcher.java:990) [?:?]
>>>
>>> at 
>>> org.apache.felix.framework.EventDispatcher.fireEventImmediately(EventDispatcher.java:838)
>>> [?:?]
>>>
>>> at 
>>> org.apache.felix.framework.EventDispatcher.fireServiceEvent(EventDispatcher.java:545)
>>> [?:?]
>>>
>>> at org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:4557)
>>> [?:?]
>>>
>>> at org.apache.felix.framework.Felix.registerService(Felix.java:3549)
>>> [?:?]
>>>
>>> at 
>>> org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:348)
>>> [?:?]
>>>
>>> at 
>>> org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:322)
>>> [?:?]
>>>
>>> at 
>>> org.opencastproject.kernel.rest.RestPublisher.createEndpoint(RestPublisher.java:278)
>>> [77:matterhorn-kernel:2.2.0.SNAPSHOT]
>>>
>>> at org.opencastproject.kernel.rest.RestPublisher$JaxRsServiceTr
>>> acker.addingService(RestPublisher.java:427) [77:matterhorn-kernel:
>>> 2.2.0.SNAPSHOT]
>>>
>>> at 
>>> org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:941)
>>> [?:?]
>>>
>>> at 
>>> org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:870)
>>> [?:?]
>>>
>>> at 
>>> org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
>>> [?:?]
>>>
>>> at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229)
>>> [?:?]
>>>
>>> at 
>>> org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:901)
>>> [?:?]
>>>
>>> at org.apache.felix.framework.EventDispatcher.invokeServiceList
>>> enerCallback(EventDispatcher.java:990) [?:?]
>>>
>>> at 
>>> org.apache.felix.framework.EventDispatcher.fireEventImmediately(EventDispatcher.java:838)
>>> [?:?]
>>>
>>> at 
>>> org.apache.felix.framework.EventDispatcher.fireServiceEvent(EventDispatcher.java:545)
>>> [?:?]
>>>
>>> at org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:4557)
>>> [?:?]
>>>
>>> at org.apache.felix.framework.Felix.registerService(Felix.java:3549)
>>> [?:?]
>>>
>>> at 
>>> org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:348)
>>> [?:?]
>>>
>>> at org.apache.felix.scr.impl.manager.AbstractComponentManager$
>>> 3.register(AbstractComponentManager.java:887)
>>> [186:org.apache.felix.scr:2.0.8]
>>>
>>> at org.apache.felix.scr.impl.manager.AbstractComponentManager$
>>> 3.register(AbstractComponentManager.java:874)
>>> [186:org.apache.felix.scr:2.0.8]
>>>
>>> at org.apache.felix.scr.impl.manager.RegistrationManager.change
>>> Registration(RegistrationManager.java:132)
>>> [186:org.apache.felix.scr:2.0.8]
>>>
>>> at org.apache.felix.scr.impl.manager.AbstractComponentManager.r
>>> egisterService(AbstractComponentManager.java:941)
>>> [186:org.apache.felix.scr:2.0.8]
>>>
>>> at org.apache.felix.scr.impl.manager.AbstractComponentManager.a
>>> ctivateInternal(AbstractComponentManager.java:741)
>>> [186:org.apache.felix.scr:2.0.8]
>>>
>>> at org.apache.felix.scr.impl.manager.AbstractComponentManager.e
>>> nableInternal(AbstractComponentManager.java:675)
>>> [186:org.apache.felix.scr:2.0.8]
>>>
>>> at org.apache.felix.scr.impl.manager.AbstractComponentManager.e
>>> nable(AbstractComponentManager.java:430) [186:org.apache.felix.scr:2.0.
>>> 8]
>>>
>>> at org.apache.felix.scr.impl.manager.ConfigurableComponentHolde
>>> r.enableComponents(ConfigurableComponentHolder.java:657)
>>> [186:org.apache.felix.scr:2.0.8]
>>>
>>> at org.apache.felix.scr.impl.BundleComponentActivator.initialEn
>>> able(BundleComponentActivator.java:341) [186:org.apache.felix.scr:2.0.8]
>>>
>>> at org.apache.felix.scr.impl.Activator.loadComponents(Activator.java:390)
>>> [186:org.apache.felix.scr:2.0.8]
>>>
>>> at org.apache.felix.scr.impl.Activator.access$200(Activator.java:54)
>>> [186:org.apache.felix.scr:2.0.8]
>>>
>>> at 
>>> org.apache.felix.scr.impl.Activator$ScrExtension.start(Activator.java:265)
>>> [186:org.apache.felix.scr:2.0.8]
>>>
>>> at org.apache.felix.utils.extender.AbstractExtender.createExten
>>> sion(AbstractExtender.java:254) [186:org.apache.felix.scr:2.0.8]
>>>
>>> at 
>>> org.apache.felix.utils.extender.AbstractExtender.modifiedBundle(AbstractExtender.java:227)
>>> [186:org.apache.felix.scr:2.0.8]
>>>
>>> at 
>>> org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:482)
>>> [?:?]
>>>
>>> at 
>>> org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:415)
>>> [?:?]
>>>
>>> at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:232)
>>> [?:?]
>>>
>>> at 
>>> org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:444)
>>> [?:?]
>>>
>>> at org.apache.felix.framework.EventDispatcher.invokeBundleListe
>>> nerCallback(EventDispatcher.java:915) [?:?]
>>>
>>> at 
>>> org.apache.felix.framework.EventDispatcher.fireEventImmediately(EventDispatcher.java:834)
>>> [?:?]
>>>
>>> at 
>>> org.apache.felix.framework.EventDispatcher.fireBundleEvent(EventDispatcher.java:516)
>>> [?:?]
>>>
>>> at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4541)
>>> [?:?]
>>>
>>> at org.apache.felix.framework.Felix.startBundle(Felix.java:2172) [?:?]
>>>
>>> at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998)
>>> [?:?]
>>>
>>> at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:984)
>>> [?:?]
>>>
>>> at org.apache.karaf.features.internal.service.FeaturesServiceIm
>>> pl.startBundle(FeaturesServiceImpl.java:1281)
>>> [9:org.apache.karaf.features.core:4.1.0]
>>>
>>> at 
>>> org.apache.karaf.features.internal.service.Deployer.deploy(Deployer.java:890)
>>> [9:org.apache.karaf.features.core:4.1.0]
>>>
>>> at org.apache.karaf.features.internal.service.FeaturesServiceIm
>>> pl.doProvision(FeaturesServiceImpl.java:1170)
>>> [9:org.apache.karaf.features.core:4.1.0]
>>>
>>> at org.apache.karaf.features.internal.service.FeaturesServiceIm
>>> pl.lambda$doProvisionInThread$0(FeaturesServiceImpl.java:1069)
>>> [9:org.apache.karaf.features.core:4.1.0]
>>>
>>> at org.apache.karaf.features.internal.service.FeaturesServiceIm
>>> pl$$Lambda$12/540415842.call(Unknown Source)
>>> [9:org.apache.karaf.features.core:4.1.0]
>>>
>>> at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:?]
>>>
>>> at 
>>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
>>> [?:?]
>>>
>>> at 
>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
>>> [?:?]
>>>
>>> at java.lang.Thread.run(Thread.java:745) [?:?]
>>>
>>> --
>>> --
>>> ------------------
>>> OPS4J - http://www.ops4j.org - [email protected]
>>>
>>> ---
>>> You received this message because you are subscribed to the Google
>>> Groups "OPS4J" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>>
>>
>> --
>>
>> Apache Member
>> Apache Karaf <http://karaf.apache.org/> Committer & PMC
>> OPS4J Pax Web <http://wiki.ops4j.org/display/paxweb/Pax+Web/> Committer
>> & Project Lead
>> blog <http://notizblog.nierbeck.de/>
>> Co-Author of Apache Karaf Cookbook <http://bit.ly/1ps9rkS>
>>
>> Software Architect / Project Manager / Scrum Master
>>
>> --
> --
> ------------------
> OPS4J - http://www.ops4j.org - [email protected]
>
> ---
> You received this message because you are subscribed to the Google Groups
> "OPS4J" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>



-- 

Apache Member
Apache Karaf <http://karaf.apache.org/> Committer & PMC
OPS4J Pax Web <http://wiki.ops4j.org/display/paxweb/Pax+Web/> Committer &
Project Lead
blog <http://notizblog.nierbeck.de/>
Co-Author of Apache Karaf Cookbook <http://bit.ly/1ps9rkS>

Software Architect / Project Manager / Scrum Master

-- 
-- 
------------------
OPS4J - http://www.ops4j.org - [email protected]

--- 
You received this message because you are subscribed to the Google Groups 
"OPS4J" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to