Hi Gareth,

this is just a quick answer to parts of you're questions. I'm at the
office right now so no much time ;)

Pax Web doesn't only support the HTTP Service and the HTTP WhiteBoard Pattern
it's also the reference Implantation for a wab :-)

So you might just deploy your std. Wars or wabs into your OSGi run-time
I'd suggest to use Apache Karaf since this is a real good OSGi server
with out of the box support
of Pax web.

I know I didn't get down to your initial question, but I'll see to it
later today or maybe tomorrow.
Always depends on time :-)

Regards, Achim

2011/7/26 Gareth Collins <gareth.o.coll...@gmail.com>:
> Hello Achim,
>
> Thank you very much! In couldn't figure out what I was doing wrong!
>
> I have a couple of follow-ups if you don't mind.
>
> When I set up two servlets (one with a HttpContext, one without -> I
> wanted to see if I could forward a request from one servlet to another
> with filters using OSGi), I am getting the following exception:
>
> 17:44:21,278 | DEBUG | lixDispatchQueue | pax-web-extender-whiteboard
>    | ?                                   ? | 106 -
> org.ops4j.pax.web.pax-web-extender-whiteboard - 1.0.4 | FrameworkEve
> nt ERRORjava.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)[62:org.ops4j.pax.web.pax-web-runtime:1.0.4]
>
> What could cause this? Here is my code:
>
>        @Override
>        public void start(BundleContext context) throws Exception {
>                Hashtable<String,String> props = new 
> Hashtable<String,String>();
>
>            props.put(ExtenderConstants.PROPERTY_HTTP_CONTEXT_ID, 
> "myServiceContext");
>            this.contextRegistration =
> context.registerService(HttpContext.class.getName(), new
> MyHttpContext(), props);
>            props = new Hashtable<String,String>();
>            props.put(ExtenderConstants.PROPERTY_ALIAS, "/myservice");
>            props.put(ExtenderConstants.PROPERTY_SERVLET_NAMES,"My Servlet");
>            props.put(ExtenderConstants.PROPERTY_HTTP_CONTEXT_ID, 
> "myServiceContext");
>
>            this.registration =
> context.registerService(Servlet.class.getName(), new MyServlet(),
> props);
>
>            props = new Hashtable<String,String>();
>            props.put(ExtenderConstants.PROPERTY_SERVLET_NAMES,"Forward 
> Servlet");
>            props.put(ExtenderConstants.PROPERTY_ALIAS, "/forwardservlet");
>>> Exception called here>>          this.forwardRegistration = 
>>> context.registerService(Servlet.class.getName(), new ForwardServlet(), 
>>> props);
>        }
>
> Anything obvious I am doing wrong?
>
> As a final question on OSGi and http, I understand that in OSGi 4.2
> support for web application bundles (which I understand PAX implements
> for the major OSGi implementations?). Given this fact is there any
> advantage to not use wab and stick with the base OSGi Http Service (+
> PAX extensions)? From my research (I could be looking in the wrong
> place), it doesn't appear that the base OSGi Http Service is used
> widely (e.g. I haven't been able to find a serious security
> implementation done using the HttpContext, just very basic examples).
>
> Again, thank you for very much for your help!
>
> regards,
> Gareth
>
>
>
> On Mon, Jul 25, 2011 at 5:38 PM, Achim Nierbeck <bcanh...@googlemail.com> 
> wrote:
>> Hi Gareth,
>>
>> sorry that it took me so long to answer.
>> But I also am making it short :-)
>>
>> You are absolutely right you need to register Servlet and Context
>> within the same bundle. The Whiteboard extension doesn't behave any
>> different
>> then the HTTP Service. The only difference and this really helps is
>> that you just register you're own Servlet-Service where the whiteboard
>> extension jumps in and does all the rest for you.
>> With the classical HTTP Service you have to do all the work by yourself.
>>
>> Regards, Achim
>>
>>
>> Am 23.07.2011 05:25, schrieb Gareth Collins:
>>>
>>> Hello,
>>> I am trying to understand how to use the PAX Web Whiteboard correctly.
>>> I was hoping, with the whiteboard pattern, I could completely separate
>>> my code for auth (HttpContext) from my Servlet. I am currently using
>>> PAX web 1.0.4 (which comes packaged with Karaf 2.2.2).
>>>
>>> So to test out the whiteboard pattern I created two bundles, each with
>>> two java files:
>>>
>>> - Bundle1
>>>     + Activator.java - The activator start method:
>>>
>>> @Override
>>> public void start(BundleContext context) throws Exception {
>>>     Hashtable<String,Object>  props = new Hashtable<String,Object>();
>>>     props.put(ExtenderConstants.PROPERTY_HTTP_CONTEXT_ID, "myContext");
>>>     this.registration =
>>> context.registerService(HttpContext.class.getName(), new
>>> MyHttpContext(), props);
>>> }
>>>     + MyHttpContext.java
>>>
>>> - Bundle2
>>>     + Activator.java - The activator start method:
>>>
>>> @Override
>>> public void start(BundleContext context) throws Exception {
>>>     Hashtable<String,Object>  props = new Hashtable<String,Object>();
>>>     props.put(ExtenderConstants.PROPERTY_ALIAS, "/myservice");
>>>     props.put(ExtenderConstants.PROPERTY_SERVLET_NAMES,"My Great
>>> Servlet");
>>>     props.put(ExtenderConstants.PROPERTY_HTTP_CONTEXT_ID, "myContext");
>>>     this.registration =
>>> context.registerService(Servlet.class.getName(), new MyHttpServlet(),
>>> props);
>>> }
>>>
>>>     + MyHttpServlet.java
>>>
>>> When I try and run these two bundles in pax/karaf and access the web
>>> page (http://localhost:8181/myservice), it doesn't work. I see in the
>>> log the following:
>>>
>>> 15:51:56,778 | DEBUG |  /profileservice | ServerModel
>>>     | eb.service.spi.model.ServerModel  296 | 61 -
>>> org.ops4j.pax.web.pax-web-spi - 1.0.4 | Path [/myservice] does not
>>> match any context
>>>
>>> I went back to the pax web whiteboard example and noticed that in the
>>> example both the sample Servlet and sample HttpContext were defined in
>>> the one bundle, so I changed my code to register MyHttpServlet and
>>> MyHttpContext in one bundle...and it worked (the handleSecurity for
>>> the context was called before running service on the Servlet)!
>>>
>>> So, given my testing, it appears that I need to register the servlet
>>> and context together in the one bundle. Is that correct...or have I
>>> misunderstood something (which is very possible as I am new to this
>>> :))?
>>>
>>> If anyone could provide any guidance, it would be a big help.
>>>
>>> thanks in advance,
>>> Gareth
>>>
>>> _______________________________________________
>>> 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
>> blog<http://notizblog.nierbeck.de/>
>>
>>
>> _______________________________________________
>> general mailing list
>> general@lists.ops4j.org
>> http://lists.ops4j.org/mailman/listinfo/general
>>
>
> _______________________________________________
> 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
blog <http://notizblog.nierbeck.de/>

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

Reply via email to