Hi John,

I'll answer your questions inline:

regards, Achim

2011/5/5 John Hawksley <john.hawks...@gmail.com>:
> Hi folks,
>
> Apologies if this has already been answered.  I've been back through the
> previous two quarters' messages and I didn't find anything pertinent.
>

np, feedback and questions are always welcome.

> I'm having a play with the Pax Web War Extender, and I have got it working
> with a WAB.  The WAB contains just a couple of JSP pages at this point, as
> well as a bundle activator, which registers a servlet via the Whiteboard
> extender:
>
>         Dictionary<String, String> props = new Hashtable<String, String>();
>         props.put( "alias", "/testservlet" );
>         props.put( "servlet-name", "My Servlet" );
>         sr = context.getBundleContext().registerService(
> Servlet.class.getName(), servlet, props );
>
> When this line is executed, Pax raises an IllegalArgumentException:
>
>         ERROR: Bundle org.ops4j.pax.web.pax-web-extender-whiteboard [12]
> EventDispatcher: Error during dispatch. (java.lang.IllegalStateException:
> Http context already used. Context params can be set only before first
> usage)
> java.lang.IllegalStateException: Http context already used. Context params
> can be set only before first usage
>
> I'll include the full trace at the end, in case it's useful.  The JSP works,
> despite the exception, but the servlet doesn't.
>
> My working theory is that the WAR extender creates an HttpContext and uses
> this to serve the JSPs.  When I then try to register my servlet, the
> Whiteboard is using the same context.

Your absolutely right here. The War extender creates the HttpContext
and therefore it is already blocked.

>
> Am I doing something wrong?  Is it possible to use both the extender and the
> whiteboard at the same time?

no your not.
The War extender usually does all you need for you, it's main purpose
is to server WARs and WABs which are WARs with an OSGI Manifest Header
but no Activator, :-)

the War extender actually looks for a web.xml in the deployed bundles
and starts those as WABs. So basically you don't need to use the
Whiteboard extender
since the War Extender uses the same mechanism inside.

>
> I have the following Pax bundles deployed in the latest Felix:
>
> OPS4J Pax Web - Extender - WAR (1.0.3)
> OPS4J Pax Web - Extender - Whiteboard (1.0.3)
> OPS4J Pax Web - Jetty Bundle (1.0.3)
> OPS4J Pax Web - Jsp Support (1.0.3)
> OPS4J Pax Web - Service SPI (1.0.3)

If you don't have any other Whiteboard using bundles you  might ignore
the WhiteBoard one.

If you are looking for a good OSGi Runtime with Pax-Web support I
suggest you take a look at Apache Karaf, it already brings all these
Bundles plus additional ones along. You also have special osgi shell
commands for the war extender with Karaf in 2.2.x (2.2.1 is going to
be release within the next week) does have the ability to list all
webapp contexts with war:list
With the next major release of Karaf 3.0 which is SNAPSHOT right now,
you'll get the ability to stop and start certain webapp contexts.

>
> Many thanks everyone, any advice would be appreciated.  Apologies if gmail
> has screwed up the formatting.
>
> -John
>
> ----------------8<---------------
>
> ERROR: Bundle org.ops4j.pax.web.pax-web-extender-whiteboard [12]
> EventDispatcher: Error during dispatch. (java.lang.IllegalStateException:
> Http context already used. Context params can be set only before first
> usage)
> java.lang.IllegalStateException: Http context already used. Context params
> can be set only before first usage
>     at
> org.ops4j.pax.web.service.internal.HttpServiceStarted.setContextParam(HttpServiceStarted.java:353)
>     at
> org.ops4j.pax.web.service.internal.HttpServiceProxy.setContextParam(HttpServiceProxy.java:174)
>     at
> org.ops4j.pax.web.extender.whiteboard.internal.WebApplication.registerHttpContext(WebApplication.java:180)
>     at
> org.ops4j.pax.web.extender.whiteboard.internal.WebApplication.setHttpContextMapping(WebApplication.java:147)
>     at
> org.ops4j.pax.web.extender.whiteboard.internal.ExtenderContext.getWebApplication(ExtenderContext.java:68)
>     at
> org.ops4j.pax.web.extender.whiteboard.internal.tracker.AbstractTracker.addingService(AbstractTracker.java:135)
>     at
> org.ops4j.pax.web.extender.whiteboard.internal.tracker.ServletTracker.addingService(ServletTracker.java:42)
>     at
> org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:896)
>     at
> org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:261)
>     at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:233)
>     at
> org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:840)
>     at
> org.apache.felix.framework.util.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:871)
>     at
> org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:733)
>     at
> org.apache.felix.framework.util.EventDispatcher.fireServiceEvent(EventDispatcher.java:662)
>     at org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:3894)
>     at org.apache.felix.framework.Felix.access$000(Felix.java:79)
>     at org.apache.felix.framework.Felix$2.serviceChanged(Felix.java:722)
>     at
> org.apache.felix.framework.ServiceRegistry.registerService(ServiceRegistry.java:107)
>     at org.apache.felix.framework.Felix.registerService(Felix.java:2983)
>     at
> org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:310)
>     at
> org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:284)
>     at dam.ui.web.test.TestClass.activate(TestClass.java:50)
>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>     at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>     at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>     at java.lang.reflect.Method.invoke(Method.java:597)
>     at
> org.apache.felix.scr.impl.helper.BaseMethod.invokeMethod(BaseMethod.java:227)
>     at
> org.apache.felix.scr.impl.helper.BaseMethod.access$500(BaseMethod.java:38)
>     at
> org.apache.felix.scr.impl.helper.BaseMethod$Resolved.invoke(BaseMethod.java:591)
>     at
> org.apache.felix.scr.impl.helper.BaseMethod.invoke(BaseMethod.java:472)
>     at
> org.apache.felix.scr.impl.helper.ActivateMethod.invoke(ActivateMethod.java:146)
>     at
> org.apache.felix.scr.impl.manager.ImmediateComponentManager.createImplementationObject(ImmediateComponentManager.java:226)
>     at
> org.apache.felix.scr.impl.manager.ImmediateComponentManager.createComponent(ImmediateComponentManager.java:118)
>     at
> org.apache.felix.scr.impl.manager.AbstractComponentManager$Unsatisfied.activate(AbstractComponentManager.java:1013)
>     at
> org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:333)
>     at
> org.apache.felix.scr.impl.manager.AbstractComponentManager.enable(AbstractComponentManager.java:157)
>     at
> org.apache.felix.scr.impl.config.ImmediateComponentHolder.enableComponents(ImmediateComponentHolder.java:313)
>     at
> org.apache.felix.scr.impl.BundleComponentActivator.loadDescriptor(BundleComponentActivator.java:253)
>     at
> org.apache.felix.scr.impl.BundleComponentActivator.initialize(BundleComponentActivator.java:147)
>     at
> org.apache.felix.scr.impl.BundleComponentActivator.<init>(BundleComponentActivator.java:111)
>     at
> org.apache.felix.scr.impl.Activator.loadComponents(Activator.java:274)
>     at org.apache.felix.scr.impl.Activator.bundleChanged(Activator.java:192)
>     at
> org.apache.felix.framework.util.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:807)
>     at
> org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:729)
>     at
> org.apache.felix.framework.util.EventDispatcher.fireBundleEvent(EventDispatcher.java:610)
>     at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:3883)
>     at org.apache.felix.framework.Felix.startBundle(Felix.java:1797)
>     at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1173)
>     at
> org.apache.felix.framework.StartLevelImpl.run(StartLevelImpl.java:264)
>     at java.lang.Thread.run(Thread.java:680)
>
>
> --
> John Hawksley
> john.hawks...@gmail.com
>
> _______________________________________________
> general mailing list
> general@lists.ops4j.org
> http://lists.ops4j.org/mailman/listinfo/general
>
>



-- 
--
*Achim Nierbeck*


Apache Karaf <http://karaf.apache.org/> Committer & PMC
OPS4J Pax Web <http://wiki.ops4j.org/display/paxweb/Pax+Web/>
Committer & Project Lead

_______________________________________________
general mailing list
general@lists.ops4j.org
http://lists.ops4j.org/mailman/listinfo/general

Reply via email to