What if you want inject some configuration on the HttpContext such as JAAS supporting. I don't know if I can turn off the servlet's activator which will register a default servlet to use in these case.

On 1/12/11 2:14 PM, Guillaume Nodet wrote:
If you want to control the full location of the endpoint, you'd just use the
jetty component i'd think.
Using the servlet is more when you don't care so much but you prefer have a
single root for all services and reusing the existing web container.

On Tue, Jan 11, 2011 at 17:26, Willem Jiang<[email protected]>  wrote:

Yes, we can let the camel-servlet register a servlet in its activator with
default value.
What if the customer wants to deploy two servlets with different context
path and different HttpContext, I don't think camel-servlet can do this kind
of job.



On 1/12/11 8:52 AM, Guillaume Nodet wrote:

Maybe I'm wrong, but the camelHttpTransportServlet and servlet look
generic,
so maybe they can be done by the component itself when deployed in osgi ?

On Tue, Jan 11, 2011 at 16:40, Willem Jiang<[email protected]>
  wrote:

  It's hard to determine what kind of HttpContext and servlet name, alien
can
be used for the CamelServlet.
So I did some work on the CAMEL-3485 to help user to bind the Servlet
with
CamelServlet by looking the CamelServletService from the service registry
like this.

     <osgi:reference id="camelHttpTransportServlet"
interface="org.apache.camel.component.servlet.CamelServletService"/>

   <bean id="servlet"
class="org.apache.camel.component.servlet.ServletComponent">
      <property name = "camelServletService"
ref="camelHttpTransportServlet"
/>
   </bean>

   <bean id="servletProcessor"
class="org.apache.camel.itest.osgi.servlet.ServletProcessor" />

   <camelContext xmlns="http://camel.apache.org/schema/spring";>
     <camel:route>
       <camel:from uri="servlet:///hello"/>
       <camel:process ref="servletProcessor"/>
     </camel:route>
   </camelContext>

Willem

Guillaume Nodet wrote:
Just raised https://issues.apache.org/jira/browse/CAMEL-3490 for that

On Mon, Jan 3, 2011 at 18:22, Guillaume Nodet<[email protected]>   wrote:

On Mon, Jan 3, 2011 at 17:55, Charles Moulliard<[email protected]>

wrote:

What you suggest (component=servlet) is by example what has been done in
this project of camel -->   org.apache.camel.component.paxlogging ?


Yes, the same way as for paxlogging camel component.

  Question:  Is there a way to check that pax-web has well registered the
servlet defined in the web.xml file and deployed as a jar in hot deploy
directory ?


If we were to rely on the osgi http service instead of pax-web, it
would be a bit more portable.
Just adding an osgi activator to camel-servlet would work fine for
that imho, as the activator could register both the servlet in the
osgi http service and the component resolver.

Btw, this discussion is much more related to camel than karaf ;-)

  On 03/01/11 17:33, Guillaume Nodet wrote:


I think it should work, it may be a class loader issue.
I think you have two solutions overall:
   * either you create you own jetty server using camel-jetty and you
set up the jetty server yourself
   * you can use a wab packaging
   * or you want to reuse the osgi http service and you need to set up
a servlet and configure the security on the servlet
For the later, the packaging does not have to be a war, but if you
don't use a war, you'll have to write the code that will do the
security and will register the servlet in the osgi http service.
I think the easiest is using a wab, you just need to make sure you
don't include the camel-servlet component or any camel jar into the
war.
Actually, if should start with an exploded war and a simple web.xml to
make sure you don't include any code in the war itself.  I guess the
trick is to expose the component so that other camel will find it.  It
can be done by registering a ComponentResolver with a property
(component=servlet) that would always register the same servlet
component instance.

On Mon, Jan 3, 2011 at 17:01, Charles Moulliard<[email protected]>
  wrote:


I don't think that packaging camel-servlet in a war will work. Even
if
we create a jar (=WAB, WAB) containing a web.xml with description of
servlet

    <servlet>
        <servlet-name>CamelServlet</servlet-name>
        <display-name>Camel Http Transport Servlet</display-name>
        <servlet-class>
org.apache.camel.component.servlet.CamelHttpTransportServlet
        </servlet-class>
        <init-param>
          <param-name>matchOnUriPrefix</param-name>
          <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>

    </servlet>

Caused by: java.lang.IllegalArgumentException: Cannot find the
deployed servlet, please configure the ServletComponent or configure
a
org.apache.camel.component.servlet.CamelHttpTransportServlet servlet
in web.xml
        at

org.apache.camel.component.servlet.ServletComponent.getCamelServlet(ServletComponent.java:55)

         at

org.apache.camel.component.servlet.ServletComponent.connect(ServletComponent.java:109)

         at

org.apache.camel.component.http.HttpEndpoint.connect(HttpEndpoint.java:148)

        at

org.apache.camel.component.http.HttpConsumer.doStart(HttpConsumer.java:52)

        at
org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:65)
        at
org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:52)
        at

org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:52)

        at

org.apache.camel.impl.DefaultCamelContext.startServices(DefaultCamelContext.java:1484)

         at

org.apache.camel.impl.DefaultCamelContext.doStartOrResumeRouteConsumers(DefaultCamelContext.java:1750)

         at

org.apache.camel.impl.DefaultCamelContext.doStartRouteConsumers(DefaultCamelContext.java:1703)

         at

org.apache.camel.impl.DefaultCamelContext.safelyStartRouteServices(DefaultCamelContext.java:1629)

         at

org.apache.camel.impl.DefaultCamelContext.doStartOrResumeRoutes(DefaultCamelContext.java:1419)

         at

org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:1314)

         at

org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:1213)

         at

org.apache.camel.spring.SpringCamelContext.doStart(SpringCamelContext.java:164)

         at
org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:65)
        at
org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:52)
        at

org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:1191)

         at

org.apache.camel.spring.SpringCamelContext.maybeStart(SpringCamelContext.java:203)

         at

org.apache.camel.spring.SpringCamelContext.onApplicationEvent(SpringCamelContext.java:101)



it will not be possible for camel to find the CamelHttpServlet

Regards,

Charles Moulliard

Sr. Principal Solution Architect - FuseSource
Apache Committer

Blog : http://cmoulliard.blogspot.com
Twitter : http://twitter.com/cmoulliard
Linkedin : http://www.linkedin.com/in/charlesmoulliard
Skype: cmoulliard



On Mon, Dec 20, 2010 at 3:06 PM, Achim Nierbeck<

[email protected]>

  wrote:


Just one more comment from me, a OSGi-War (aka wab) can also be used

:)

Totally forgot to mention that when Charles asked me directly, and I
didn't
have a real good answer ;)

2010/12/20 Guillaume Nodet<[email protected]>

  On Mon, Dec 20, 2010 at 14:42, Charles Moulliard<

[email protected]>

wrote:


Hi,

I would like to start a discussion around the following point as
it
does


not


seem obvious to find an answer. To authenticate a HTTP user with

camel

on
Karaf we can use the component camel-jetty and camel-servlet.
Jetty

+


JAAS +


camel can be easily configured using Spring beans +
securityHandler
with
camel but this does not seem the case with camel-servlet.

The component camel-servlet does not accept as parameter a

handler(s)

for
Jetty. This is normal as camel can be deployed in different
Application
Servers which are not build with Jetty. So what alternative(s)

exist

to
configure camel-servlet with Jetty + JAAS on Karaf ? Using

jetty.xml

(in


etc


folder) but how to link camel servlet with jetty security handler
?

  Unless I'm wrong, when you use camel-servlet, you're responsible
for
setting up the CamelHttpTransportServlet servlet.
In OSGi, it could be done either using a standard web application
(deployed using the war support), or directly using the OSGi HTTP
service.  In the former case, you'd have to configure the web.xml

for

security.  In the latter case, you need to use the OSGi HTTP service
api to properly configure the security bits (by implementing
org.osgi.service.http.HttpContext interface).

I agree we could have an example of showing the last way in camel .
Configuring the war for security isn't specific to OSGi or Camel

fwiw.


  Regards,

Charles



--
Cheers,
Guillaume Nodet
------------------------
Blog: http://gnodet.blogspot.com/
------------------------
Open Source SOA
http://fusesource.com







--
Cheers,
Guillaume Nodet
------------------------
Blog: http://gnodet.blogspot.com/
------------------------
Open Source SOA
http://fusesource.com


--
Willem
----------------------------------
FuseSource
Web: http://www.fusesource.com
Blog:    http://willemjiang.blogspot.com (English)
         http://jnn.javaeye.com (Chinese)
Twitter: willemjiang






--
Willem
----------------------------------
FuseSource
Web: http://www.fusesource.com
Blog:    http://willemjiang.blogspot.com (English)
         http://jnn.javaeye.com (Chinese)
Twitter: willemjiang






--
Willem
----------------------------------
FuseSource
Web: http://www.fusesource.com
Blog:    http://willemjiang.blogspot.com (English)
         http://jnn.javaeye.com (Chinese)
Twitter: willemjiang

Reply via email to