You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@felix.apache.org by itay hindy <it...@gmail.com> on 2013/01/01 09:10:42 UTC

Re: Class loading issues for embedded felix within tomcat

Thanks Richard, I followed your advice and make it works.
Now I have a new Issue:

I try to use *bundle.update() *and I get next exception:
*Caused by: java.net.MalformedURLException: Unknown protocol: obr
*
When I run felix *not *embedded from tomcat everything works.

I looked into it and the problem seems to be that when running embedded
felix within tomcat the URLHandlersStreamHandlerProxy class is not used.

The next line:
*return new URL(context, "obr:...", handler)*
for embedded felix just tries to create url while for stand alone felix it
uses the URLHandlersStreamHandlerProxy.

Any Idea how to config it?

On Thu, Dec 27, 2012 at 4:08 PM, Richard S. Hall <he...@ungoverned.org>wrote:

> On 12/27/12 07:25, itay hindy wrote:
>
>> Hi All,
>>
>> I have a question about running embedded felix within tomcat.
>>
>> I had follow the instructions at
>> http://felix.apache.org/site/**apache-felix-framework-**
>> launching-and-embedding.html<http://felix.apache.org/site/apache-felix-framework-launching-and-embedding.html>
>>
>> I manage to run felix within tomcat, however I have a problem with  class
>> loaders.
>>
>> Here is the scenario:
>> 1 - My host application needs to use the RepositoryAdmin service
>> from org.apache.felix.**bundlerepository-1.6.6.jar bundle
>> 2 - I add the org.apache.felix.**bundlerepository-1.6.6.jar to my class
>> path
>> so I can access its interfaces
>> 3 - I install this bundle on my host application activator code
>>       URL url =
>>   this.servletContext.**getResource("/WEB-INF/lib/org.**
>> apache.felix.bundlerepository-**1.6.6.jar");
>>      Bundle bundle = context.installBundle(url.**toExternalForm());
>>      bundle.start();
>> 4 - I have created ServiceTracker for the RepositoryAdmin service
>> 5 - In the ServiceTracker the next bold line fails with class cast
>> exception
>> public Object addingService(ServiceReference reference) {
>>                  Object serviceObject = super.addingService(reference)**;
>>              try {
>>                      *repositoryAdmin = (RepositoryAdmin)**
>> serviceObject*;
>>
>> } catch (Exception e) {
>> e.printStackTrace();
>> }
>>                  return repositoryAdmin;
>>              }
>>
>> The reason seems to be because RepositoryAdmin interface classloader
>>  comes
>> from org.apache.catalina.loader.**WebappClassLoader and the
>> actual RepositoryAdminImpl  object (the *serviceObject*) is coming from
>> BundleWiringImpl$**BundleClassLoaderJava5
>>
>
> Yes, of course. The bundle doesn't have access to your outer repository
> classes and your host doesn't have access to the bundle's repository
> classes.
>
> You will need to try to export the repository packages from your host app
> via the system bundle. Of course, this will only work if the repository
> bundle properly imports AND exports the repository packages. Even if it
> does, it is tricky and might not work if there are any "uses" constraint
> issues, but you could try. If that doesn't work, you could look into boot
> delegating the packages from your class path, but that is a last resort.
>
> -> richard
>
>
>
>
>
>> Any Idea?
>>
>> Regards,
>> Itay Hindy
>>
>>
>
> ------------------------------**------------------------------**---------
> To unsubscribe, e-mail: users-unsubscribe@felix.**apache.org<us...@felix.apache.org>
> For additional commands, e-mail: users-help@felix.apache.org
>
>


-- 
Regards,

Itay Hindy
Software Solutions
+972-54-5935042
linkedin: http://www.linkedin.com/in/itayhindy

Re: Class loading issues for embedded felix within tomcat

Posted by Karl Pauls <ka...@gmail.com>.
Hm, on second thought - how do you call update on the bundle?

regards,

Karl



On Thu, Jan 3, 2013 at 3:54 PM, Karl Pauls <ka...@gmail.com> wrote:

> Yes, it should be possible to run more than one war with felix inside side
> by side without disabling url handlers. 4.0.3 had a bug in this area which
> should be fixed in trunk. I'll have a look why it doesn't find the obr
> urlhandler in the second instance.
>
> regards,
>
> Karl
>
>
> On Thu, Jan 3, 2013 at 2:50 PM, itay hindy <it...@gmail.com> wrote:
>
>> Hi Karl,
>>
>> Attached you can found a sample war that demonstrate the problem. Putting
>> this war (test1.war) to tomcat webapps works. Adding it again (with
>> different name of course, test2 for example. *btw the only different
>> between the wars must be the felix.cache.rootdir property that need to be
>> change inside WEB-INF/framework.properties*) cause the problem.
>> Some notes/questions:
>>
>> *1 - Most important: Is it possible to run multiple wars each with
>> embedded Felix within? also each will have felix.service.urlhandlers=true?
>> *
>> 2 - there is not much in the war, just the next relevant lines:
>>     public void start(BundleContext context) throws Exception{
>>
>>      URL url =
>>  this.servletContext.getResource("/WEB-INF/lib/org.apache.felix.bundlerepository-1.6.6.jar");
>>      Bundle bundle = context.installBundle(url.toExternalForm());
>>      bundle.start();
>>     }
>> 3 - The version of felix framework is 4.0.3 (last stable). When you put
>> the war in tomcat webapps every thing works. Adding another copy of the war
>> to tomcat webapps gives the next error:
>> ERROR: Unable to start system bundle. (java.lang.Error: factory already
>> defined)
>> java.lang.Error: factory already defined
>>         at java.net.URL.setURLStreamHandlerFactory(URL.java:1077)
>>         at
>> org.apache.felix.framework.URLHandlers.<init>(URLHandlers.java:178)
>>         at
>> org.apache.felix.framework.URLHandlers.registerFrameworkInstance(URLHandlers.java:559)
>>         at
>> org.apache.felix.framework.URLHandlersActivator.start(URLHandlersActivator.java:71)
>>         at
>> org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:645)
>>         at
>> org.apache.felix.framework.Felix$SystemBundleActivator.start(Felix.java:4475)
>>         at
>> org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:645)
>>         at org.apache.felix.framework.Felix.init(Felix.java:767)
>>         at org.apache.felix.framework.Felix.start(Felix.java:816)
>>         at
>> com.wl.tomcat.http.bridge.FrameworkService.start(FrameworkService.java:25)
>>         at
>> com.wl.tomcat.http.bridge.StartupListener.contextInitialized(StartupListener.java:14)
>>         at
>> org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4791)
>>         at
>> org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5285)
>>         at
>> org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
>>         at
>> org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
>>         at
>> org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
>>         at
>> org.apache.catalina.core.StandardHost.addChild(StandardHost.java:618)
>>         at
>> org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:963)
>>         at
>> org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1600)
>>         at
>> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
>>         at
>> java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
>>         at java.util.concurrent.FutureTask.run(FutureTask.java:138)
>>         at
>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>>         at
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>>         at java.lang.Thread.run(Thread.java:662)
>> java.lang.RuntimeException: Unable to start system bundle.
>>         at org.apache.felix.framework.Felix.init(Felix.java:774)
>>         at org.apache.felix.framework.Felix.start(Felix.java:816)
>>         at
>> com.wl.tomcat.http.bridge.FrameworkService.start(FrameworkService.java:25)
>>         at
>> com.wl.tomcat.http.bridge.StartupListener.contextInitialized(StartupListener.java:14)
>>         at
>> org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4791)
>>         at
>> org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5285)
>>         at
>> org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
>>         at
>> org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
>>         at
>> org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
>>         at
>> org.apache.catalina.core.StandardHost.addChild(StandardHost.java:618)
>>         at
>> org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:963)
>>         at
>> org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1600)
>>         at
>> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
>>         at
>> java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
>>         at java.util.concurrent.FutureTask.run(FutureTask.java:138)
>>         at
>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>>         at
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>>         at java.lang.Thread.run(Thread.java:662)
>>  Probably because in URLHandlers
>>
>> try
>>  {
>>  URL.setURLStreamHandlerFactory(currentFactory);
>>    }
>>   catch (Exception ex)
>>   {
>>    // Ignore, this is a best effort (maybe log it or something)
>>   }
>>
>>  and in URL.setURLStreamHandlerFactory
>> if (factory != null) {
>>  throw new Error("factory already defined");
>> }
>>
>> 4 - When changing felix framework to 4.0.2 no errors but when trying
>> later to use bundle.update (not in the attached example war) I get the next
>> error: *Unable to update the bundle. (java.net.MalformedURLException:
>> Unknown protocol: obr. *This is because inside URLHandlers class the
>> m_streamHandlerFactory field is different between the first and second war
>> 5 - Version 4.1.0-SNAPSHOTS gives same error as 4.0.2
>> 6 - Attached also the java sources in the zip.
>>
>> Thanks a lot
>>
>> On Thu, Jan 3, 2013 at 11:00 AM, Karl Pauls <ka...@gmail.com> wrote:
>>
>>> Can you make a simple example of this available to me?
>>>
>>> regards,
>>>
>>> Karl
>>>
>>>
>>> On Wed, Jan 2, 2013 at 9:21 AM, itay hindy <it...@gmail.com> wrote:
>>>
>>> > Sorry, I had some issues and I was not clear enough.
>>> >
>>> > Let me summarize:
>>> > 1 - I manage to run the war with the embedded felix and everything
>>> works
>>> > great.
>>> > 2 - I had to run the below lines in order that the ProxyServlet will
>>> pass
>>> > requests to my bundle that use a servlet
>>> > *     //need it for the dispatcher to work*
>>> > *    url =
>>> >
>>> >
>>>  this.servletContext.getResource("/WEB-INF/lib/org.apache.felix.http.bridge-2.2.0.jar");
>>> > *
>>> > *    bundle = context.installBundle(url.toExternalForm());*
>>> > *    bundle.start(); *
>>> > 3 - As I said everything works great with one war running in tomcat.
>>> When I
>>> > try to use 2 wars side by side I get the below exception:
>>> > ERROR: Bundle org.apache.felix.http.bridge [2] Error starting
>>> >
>>> jndi:/localhost/itay/qa/WEB-INF/lib/org.apache.felix.http.bridge-2.2.0.jar
>>> > (org.osgi.framework.BundleException: Activator start error in bundle
>>> > org.apache.felix.http.bridge [2].)
>>> > java.lang.LinkageError: loader constraint violation: when resolving
>>> > overridden method
>>> >
>>> >
>>> "org.apache.felix.http.base.internal.listener.AbstractListenerManager.addingService(Lorg/osgi/framework/ServiceReference;)Ljava/lang/Object;"
>>> > the class lo
>>> > ader (instance of
>>> > org/apache/felix/framework/BundleWiringImpl$BundleClassLoaderJava5) of
>>> the
>>> > current class,
>>> > org/apache/felix/http/base/internal/listener/AbstractListenerManager,
>>> and
>>> > its superclass loader (instance of org/apache/catalina/loa
>>> > der/WebappClassLoader), have different Class objects for the type
>>> > org/osgi/framework/ServiceReference used in the signature
>>> >         at
>>> >
>>> >
>>> org.apache.felix.http.base.internal.HttpServiceController.<init>(HttpServiceController.java:76)
>>> >
>>> > Thanks
>>> >
>>> >
>>> > On Tue, Jan 1, 2013 at 4:23 PM, Richard S. Hall <heavy@ungoverned.org
>>> > >wrote:
>>> >
>>> > > On 1/1/13 06:12, itay hindy wrote:
>>> > >
>>> > >> Ignore my last mail, I figure it out. It was because of activators
>>> > order.
>>> > >>
>>> > >> Another question, I manage now to run the war that used the embedded
>>> > >> felix.
>>> > >> I try to execute http requests but fail on the the ProxyServlet. The
>>> > >> DispatcherTracker has not been initialize so
>>> > this.tracker.getDispatcher()
>>> > >> returns null.
>>> > >>
>>> > >> How can I activate it?
>>> > >>
>>> > >
>>> > > Sorry, I don't know what you are talking about.
>>> > >
>>> > > -> richard
>>> > >
>>> > >
>>> > >> Thanks in advance
>>> > >>
>>> > >> On Tue, Jan 1, 2013 at 10:10 AM, itay hindy <it...@gmail.com>
>>> > wrote:
>>> > >>
>>> > >>  Thanks Richard, I followed your advice and make it works.
>>> > >>> Now I have a new Issue:
>>> > >>>
>>> > >>> I try to use *bundle.update() *and I get next exception:
>>> > >>> *Caused by: java.net.**MalformedURLException: Unknown protocol: obr
>>> > >>> *
>>> > >>> When I run felix *not *embedded from tomcat everything works.
>>> > >>>
>>> > >>>
>>> > >>> I looked into it and the problem seems to be that when running
>>> embedded
>>> > >>> felix within tomcat the URLHandlersStreamHandlerProxy class is not
>>> > used.
>>> > >>>
>>> > >>> The next line:
>>> > >>> *return new URL(context, "obr:...", handler)*
>>> > >>>
>>> > >>> for embedded felix just tries to create url while for stand alone
>>> felix
>>> > >>> it
>>> > >>> uses the URLHandlersStreamHandlerProxy.
>>> > >>>
>>> > >>> Any Idea how to config it?
>>> > >>>
>>> > >>> On Thu, Dec 27, 2012 at 4:08 PM, Richard S. Hall <
>>> heavy@ungoverned.org
>>> > >>> >wrote:
>>> > >>>
>>> > >>>  On 12/27/12 07:25, itay hindy wrote:
>>> > >>>>
>>> > >>>>  Hi All,
>>> > >>>>>
>>> > >>>>> I have a question about running embedded felix within tomcat.
>>> > >>>>>
>>> > >>>>> I had follow the instructions at
>>> > >>>>> http://felix.apache.org/site/****apache-felix-framework-**<
>>> > http://felix.apache.org/site/**apache-felix-framework-**>
>>> > >>>>> launching-and-embedding.html<h**ttp://felix.apache.org/site/**
>>> > >>>>> apache-felix-framework-**launching-and-embedding.html<
>>> >
>>> http://felix.apache.org/site/apache-felix-framework-launching-and-embedding.html
>>> > >
>>> > >>>>> >
>>> > >>>>>
>>> > >>>>>
>>> > >>>>> I manage to run felix within tomcat, however I have a problem
>>> with
>>> > >>>>>  class
>>> > >>>>> loaders.
>>> > >>>>>
>>> > >>>>> Here is the scenario:
>>> > >>>>> 1 - My host application needs to use the RepositoryAdmin service
>>> > >>>>> from org.apache.felix.****bundlerepository-1.6.6.jar bundle
>>> > >>>>> 2 - I add the org.apache.felix.****bundlerepository-1.6.6.jar to
>>> my
>>> > >>>>> class
>>> > >>>>>
>>> > >>>>> path
>>> > >>>>> so I can access its interfaces
>>> > >>>>> 3 - I install this bundle on my host application activator code
>>> > >>>>>        URL url =
>>> > >>>>>    this.servletContext.****getResource("/WEB-INF/lib/org.****
>>> > >>>>> apache.felix.bundlerepository-****1.6.6.jar");
>>> > >>>>>       Bundle bundle =
>>> > context.installBundle(url.****toExternalForm());
>>> > >>>>>
>>> > >>>>>       bundle.start();
>>> > >>>>> 4 - I have created ServiceTracker for the RepositoryAdmin service
>>> > >>>>> 5 - In the ServiceTracker the next bold line fails with class
>>> cast
>>> > >>>>> exception
>>> > >>>>> public Object addingService(ServiceReference reference) {
>>> > >>>>>                   Object serviceObject =
>>> > super.addingService(reference)
>>> > >>>>> ****
>>> > >>>>> ;
>>> > >>>>>               try {
>>> > >>>>>                       *repositoryAdmin = (RepositoryAdmin)**
>>> > >>>>>
>>> > >>>>> serviceObject*;
>>> > >>>>>
>>> > >>>>> } catch (Exception e) {
>>> > >>>>> e.printStackTrace();
>>> > >>>>> }
>>> > >>>>>                   return repositoryAdmin;
>>> > >>>>>               }
>>> > >>>>>
>>> > >>>>> The reason seems to be because RepositoryAdmin interface
>>> classloader
>>> > >>>>>   comes
>>> > >>>>> from org.apache.catalina.loader.****WebappClassLoader and the
>>> > >>>>>
>>> > >>>>> actual RepositoryAdminImpl  object (the *serviceObject*) is
>>> coming
>>> > from
>>> > >>>>> BundleWiringImpl$****BundleClassLoaderJava5
>>> > >>>>>
>>> > >>>>>  Yes, of course. The bundle doesn't have access to your outer
>>> > >>>> repository
>>> > >>>> classes and your host doesn't have access to the bundle's
>>> repository
>>> > >>>> classes.
>>> > >>>>
>>> > >>>> You will need to try to export the repository packages from your
>>> host
>>> > >>>> app
>>> > >>>> via the system bundle. Of course, this will only work if the
>>> > repository
>>> > >>>> bundle properly imports AND exports the repository packages. Even
>>> if
>>> > it
>>> > >>>> does, it is tricky and might not work if there are any "uses"
>>> > constraint
>>> > >>>> issues, but you could try. If that doesn't work, you could look
>>> into
>>> > >>>> boot
>>> > >>>> delegating the packages from your class path, but that is a last
>>> > resort.
>>> > >>>>
>>> > >>>> -> richard
>>> > >>>>
>>> > >>>>
>>> > >>>>
>>> > >>>>
>>> > >>>>
>>> > >>>>  Any Idea?
>>> > >>>>>
>>> > >>>>> Regards,
>>> > >>>>> Itay Hindy
>>> > >>>>>
>>> > >>>>>
>>> > >>>>>  ------------------------------****----------------------------**
>>> > >>>> --**---------
>>> > >>>> To unsubscribe, e-mail: users-unsubscribe@felix.**apac**he.org<
>>> > http://apache.org>
>>> > >>>> <users-unsubscribe@**felix.apache.org<
>>> > users-unsubscribe@felix.apache.org>
>>> > >>>> >
>>> > >>>>
>>> > >>>> For additional commands, e-mail: users-help@felix.apache.org
>>> > >>>>
>>> > >>>>
>>> > >>>>
>>> > >>> --
>>> > >>> Regards,
>>> > >>>
>>> > >>> Itay Hindy
>>> > >>> Software Solutions
>>> > >>> +972-54-5935042
>>> > >>> linkedin: http://www.linkedin.com/in/**itayhindy<
>>> > http://www.linkedin.com/in/itayhindy>
>>> > >>>
>>> > >>>
>>> > >>
>>> > >>
>>> > >
>>> > >
>>> ------------------------------**------------------------------**---------
>>> > > To unsubscribe, e-mail: users-unsubscribe@felix.**apache.org<
>>> > users-unsubscribe@felix.apache.org>
>>> > > For additional commands, e-mail: users-help@felix.apache.org
>>> > >
>>> > >
>>> >
>>> >
>>> > --
>>> > Regards,
>>> >
>>> > Itay Hindy
>>> > Software Solutions
>>> > +972-54-5935042
>>> > linkedin: http://www.linkedin.com/in/itayhindy
>>> >
>>>
>>>
>>>
>>> --
>>> Karl Pauls
>>> karlpauls@gmail.com
>>> http://twitter.com/karlpauls
>>> http://www.linkedin.com/in/karlpauls
>>> https://profiles.google.com/karlpauls
>>>
>>
>>
>>
>> --
>> Regards,
>>
>> Itay Hindy
>> Software Solutions
>> +972-54-5935042
>> linkedin: http://www.linkedin.com/in/itayhindy
>>
>
>
>
> --
> Karl Pauls
> karlpauls@gmail.com
> http://twitter.com/karlpauls
> http://www.linkedin.com/in/karlpauls
> https://profiles.google.com/karlpauls
>



-- 
Karl Pauls
karlpauls@gmail.com
http://twitter.com/karlpauls
http://www.linkedin.com/in/karlpauls
https://profiles.google.com/karlpauls

Re: Class loading issues for embedded felix within tomcat

Posted by Karl Pauls <ka...@gmail.com>.
Yes, it should be possible to run more than one war with felix inside side
by side without disabling url handlers. 4.0.3 had a bug in this area which
should be fixed in trunk. I'll have a look why it doesn't find the obr
urlhandler in the second instance.

regards,

Karl


On Thu, Jan 3, 2013 at 2:50 PM, itay hindy <it...@gmail.com> wrote:

> Hi Karl,
>
> Attached you can found a sample war that demonstrate the problem. Putting
> this war (test1.war) to tomcat webapps works. Adding it again (with
> different name of course, test2 for example. *btw the only different
> between the wars must be the felix.cache.rootdir property that need to be
> change inside WEB-INF/framework.properties*) cause the problem.
> Some notes/questions:
>
> *1 - Most important: Is it possible to run multiple wars each with
> embedded Felix within? also each will have felix.service.urlhandlers=true?
> *
> 2 - there is not much in the war, just the next relevant lines:
>     public void start(BundleContext context) throws Exception{
>
>      URL url =
>  this.servletContext.getResource("/WEB-INF/lib/org.apache.felix.bundlerepository-1.6.6.jar");
>      Bundle bundle = context.installBundle(url.toExternalForm());
>      bundle.start();
>     }
> 3 - The version of felix framework is 4.0.3 (last stable). When you put
> the war in tomcat webapps every thing works. Adding another copy of the war
> to tomcat webapps gives the next error:
> ERROR: Unable to start system bundle. (java.lang.Error: factory already
> defined)
> java.lang.Error: factory already defined
>         at java.net.URL.setURLStreamHandlerFactory(URL.java:1077)
>         at
> org.apache.felix.framework.URLHandlers.<init>(URLHandlers.java:178)
>         at
> org.apache.felix.framework.URLHandlers.registerFrameworkInstance(URLHandlers.java:559)
>         at
> org.apache.felix.framework.URLHandlersActivator.start(URLHandlersActivator.java:71)
>         at
> org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:645)
>         at
> org.apache.felix.framework.Felix$SystemBundleActivator.start(Felix.java:4475)
>         at
> org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:645)
>         at org.apache.felix.framework.Felix.init(Felix.java:767)
>         at org.apache.felix.framework.Felix.start(Felix.java:816)
>         at
> com.wl.tomcat.http.bridge.FrameworkService.start(FrameworkService.java:25)
>         at
> com.wl.tomcat.http.bridge.StartupListener.contextInitialized(StartupListener.java:14)
>         at
> org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4791)
>         at
> org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5285)
>         at
> org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
>         at
> org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
>         at
> org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
>         at
> org.apache.catalina.core.StandardHost.addChild(StandardHost.java:618)
>         at
> org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:963)
>         at
> org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1600)
>         at
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
>         at
> java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
>         at java.util.concurrent.FutureTask.run(FutureTask.java:138)
>         at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>         at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>         at java.lang.Thread.run(Thread.java:662)
> java.lang.RuntimeException: Unable to start system bundle.
>         at org.apache.felix.framework.Felix.init(Felix.java:774)
>         at org.apache.felix.framework.Felix.start(Felix.java:816)
>         at
> com.wl.tomcat.http.bridge.FrameworkService.start(FrameworkService.java:25)
>         at
> com.wl.tomcat.http.bridge.StartupListener.contextInitialized(StartupListener.java:14)
>         at
> org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4791)
>         at
> org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5285)
>         at
> org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
>         at
> org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
>         at
> org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
>         at
> org.apache.catalina.core.StandardHost.addChild(StandardHost.java:618)
>         at
> org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:963)
>         at
> org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1600)
>         at
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
>         at
> java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
>         at java.util.concurrent.FutureTask.run(FutureTask.java:138)
>         at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>         at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>         at java.lang.Thread.run(Thread.java:662)
>  Probably because in URLHandlers
>
> try
>  {
>  URL.setURLStreamHandlerFactory(currentFactory);
>    }
>   catch (Exception ex)
>   {
>    // Ignore, this is a best effort (maybe log it or something)
>   }
>
>  and in URL.setURLStreamHandlerFactory
> if (factory != null) {
>  throw new Error("factory already defined");
> }
>
> 4 - When changing felix framework to 4.0.2 no errors but when trying later
> to use bundle.update (not in the attached example war) I get the next
> error: *Unable to update the bundle. (java.net.MalformedURLException:
> Unknown protocol: obr. *This is because inside URLHandlers class the
> m_streamHandlerFactory field is different between the first and second war
> 5 - Version 4.1.0-SNAPSHOTS gives same error as 4.0.2
> 6 - Attached also the java sources in the zip.
>
> Thanks a lot
>
> On Thu, Jan 3, 2013 at 11:00 AM, Karl Pauls <ka...@gmail.com> wrote:
>
>> Can you make a simple example of this available to me?
>>
>> regards,
>>
>> Karl
>>
>>
>> On Wed, Jan 2, 2013 at 9:21 AM, itay hindy <it...@gmail.com> wrote:
>>
>> > Sorry, I had some issues and I was not clear enough.
>> >
>> > Let me summarize:
>> > 1 - I manage to run the war with the embedded felix and everything works
>> > great.
>> > 2 - I had to run the below lines in order that the ProxyServlet will
>> pass
>> > requests to my bundle that use a servlet
>> > *     //need it for the dispatcher to work*
>> > *    url =
>> >
>> >
>>  this.servletContext.getResource("/WEB-INF/lib/org.apache.felix.http.bridge-2.2.0.jar");
>> > *
>> > *    bundle = context.installBundle(url.toExternalForm());*
>> > *    bundle.start(); *
>> > 3 - As I said everything works great with one war running in tomcat.
>> When I
>> > try to use 2 wars side by side I get the below exception:
>> > ERROR: Bundle org.apache.felix.http.bridge [2] Error starting
>> >
>> jndi:/localhost/itay/qa/WEB-INF/lib/org.apache.felix.http.bridge-2.2.0.jar
>> > (org.osgi.framework.BundleException: Activator start error in bundle
>> > org.apache.felix.http.bridge [2].)
>> > java.lang.LinkageError: loader constraint violation: when resolving
>> > overridden method
>> >
>> >
>> "org.apache.felix.http.base.internal.listener.AbstractListenerManager.addingService(Lorg/osgi/framework/ServiceReference;)Ljava/lang/Object;"
>> > the class lo
>> > ader (instance of
>> > org/apache/felix/framework/BundleWiringImpl$BundleClassLoaderJava5) of
>> the
>> > current class,
>> > org/apache/felix/http/base/internal/listener/AbstractListenerManager,
>> and
>> > its superclass loader (instance of org/apache/catalina/loa
>> > der/WebappClassLoader), have different Class objects for the type
>> > org/osgi/framework/ServiceReference used in the signature
>> >         at
>> >
>> >
>> org.apache.felix.http.base.internal.HttpServiceController.<init>(HttpServiceController.java:76)
>> >
>> > Thanks
>> >
>> >
>> > On Tue, Jan 1, 2013 at 4:23 PM, Richard S. Hall <heavy@ungoverned.org
>> > >wrote:
>> >
>> > > On 1/1/13 06:12, itay hindy wrote:
>> > >
>> > >> Ignore my last mail, I figure it out. It was because of activators
>> > order.
>> > >>
>> > >> Another question, I manage now to run the war that used the embedded
>> > >> felix.
>> > >> I try to execute http requests but fail on the the ProxyServlet. The
>> > >> DispatcherTracker has not been initialize so
>> > this.tracker.getDispatcher()
>> > >> returns null.
>> > >>
>> > >> How can I activate it?
>> > >>
>> > >
>> > > Sorry, I don't know what you are talking about.
>> > >
>> > > -> richard
>> > >
>> > >
>> > >> Thanks in advance
>> > >>
>> > >> On Tue, Jan 1, 2013 at 10:10 AM, itay hindy <it...@gmail.com>
>> > wrote:
>> > >>
>> > >>  Thanks Richard, I followed your advice and make it works.
>> > >>> Now I have a new Issue:
>> > >>>
>> > >>> I try to use *bundle.update() *and I get next exception:
>> > >>> *Caused by: java.net.**MalformedURLException: Unknown protocol: obr
>> > >>> *
>> > >>> When I run felix *not *embedded from tomcat everything works.
>> > >>>
>> > >>>
>> > >>> I looked into it and the problem seems to be that when running
>> embedded
>> > >>> felix within tomcat the URLHandlersStreamHandlerProxy class is not
>> > used.
>> > >>>
>> > >>> The next line:
>> > >>> *return new URL(context, "obr:...", handler)*
>> > >>>
>> > >>> for embedded felix just tries to create url while for stand alone
>> felix
>> > >>> it
>> > >>> uses the URLHandlersStreamHandlerProxy.
>> > >>>
>> > >>> Any Idea how to config it?
>> > >>>
>> > >>> On Thu, Dec 27, 2012 at 4:08 PM, Richard S. Hall <
>> heavy@ungoverned.org
>> > >>> >wrote:
>> > >>>
>> > >>>  On 12/27/12 07:25, itay hindy wrote:
>> > >>>>
>> > >>>>  Hi All,
>> > >>>>>
>> > >>>>> I have a question about running embedded felix within tomcat.
>> > >>>>>
>> > >>>>> I had follow the instructions at
>> > >>>>> http://felix.apache.org/site/****apache-felix-framework-**<
>> > http://felix.apache.org/site/**apache-felix-framework-**>
>> > >>>>> launching-and-embedding.html<h**ttp://felix.apache.org/site/**
>> > >>>>> apache-felix-framework-**launching-and-embedding.html<
>> >
>> http://felix.apache.org/site/apache-felix-framework-launching-and-embedding.html
>> > >
>> > >>>>> >
>> > >>>>>
>> > >>>>>
>> > >>>>> I manage to run felix within tomcat, however I have a problem with
>> > >>>>>  class
>> > >>>>> loaders.
>> > >>>>>
>> > >>>>> Here is the scenario:
>> > >>>>> 1 - My host application needs to use the RepositoryAdmin service
>> > >>>>> from org.apache.felix.****bundlerepository-1.6.6.jar bundle
>> > >>>>> 2 - I add the org.apache.felix.****bundlerepository-1.6.6.jar to
>> my
>> > >>>>> class
>> > >>>>>
>> > >>>>> path
>> > >>>>> so I can access its interfaces
>> > >>>>> 3 - I install this bundle on my host application activator code
>> > >>>>>        URL url =
>> > >>>>>    this.servletContext.****getResource("/WEB-INF/lib/org.****
>> > >>>>> apache.felix.bundlerepository-****1.6.6.jar");
>> > >>>>>       Bundle bundle =
>> > context.installBundle(url.****toExternalForm());
>> > >>>>>
>> > >>>>>       bundle.start();
>> > >>>>> 4 - I have created ServiceTracker for the RepositoryAdmin service
>> > >>>>> 5 - In the ServiceTracker the next bold line fails with class cast
>> > >>>>> exception
>> > >>>>> public Object addingService(ServiceReference reference) {
>> > >>>>>                   Object serviceObject =
>> > super.addingService(reference)
>> > >>>>> ****
>> > >>>>> ;
>> > >>>>>               try {
>> > >>>>>                       *repositoryAdmin = (RepositoryAdmin)**
>> > >>>>>
>> > >>>>> serviceObject*;
>> > >>>>>
>> > >>>>> } catch (Exception e) {
>> > >>>>> e.printStackTrace();
>> > >>>>> }
>> > >>>>>                   return repositoryAdmin;
>> > >>>>>               }
>> > >>>>>
>> > >>>>> The reason seems to be because RepositoryAdmin interface
>> classloader
>> > >>>>>   comes
>> > >>>>> from org.apache.catalina.loader.****WebappClassLoader and the
>> > >>>>>
>> > >>>>> actual RepositoryAdminImpl  object (the *serviceObject*) is coming
>> > from
>> > >>>>> BundleWiringImpl$****BundleClassLoaderJava5
>> > >>>>>
>> > >>>>>  Yes, of course. The bundle doesn't have access to your outer
>> > >>>> repository
>> > >>>> classes and your host doesn't have access to the bundle's
>> repository
>> > >>>> classes.
>> > >>>>
>> > >>>> You will need to try to export the repository packages from your
>> host
>> > >>>> app
>> > >>>> via the system bundle. Of course, this will only work if the
>> > repository
>> > >>>> bundle properly imports AND exports the repository packages. Even
>> if
>> > it
>> > >>>> does, it is tricky and might not work if there are any "uses"
>> > constraint
>> > >>>> issues, but you could try. If that doesn't work, you could look
>> into
>> > >>>> boot
>> > >>>> delegating the packages from your class path, but that is a last
>> > resort.
>> > >>>>
>> > >>>> -> richard
>> > >>>>
>> > >>>>
>> > >>>>
>> > >>>>
>> > >>>>
>> > >>>>  Any Idea?
>> > >>>>>
>> > >>>>> Regards,
>> > >>>>> Itay Hindy
>> > >>>>>
>> > >>>>>
>> > >>>>>  ------------------------------****----------------------------**
>> > >>>> --**---------
>> > >>>> To unsubscribe, e-mail: users-unsubscribe@felix.**apac**he.org<
>> > http://apache.org>
>> > >>>> <users-unsubscribe@**felix.apache.org<
>> > users-unsubscribe@felix.apache.org>
>> > >>>> >
>> > >>>>
>> > >>>> For additional commands, e-mail: users-help@felix.apache.org
>> > >>>>
>> > >>>>
>> > >>>>
>> > >>> --
>> > >>> Regards,
>> > >>>
>> > >>> Itay Hindy
>> > >>> Software Solutions
>> > >>> +972-54-5935042
>> > >>> linkedin: http://www.linkedin.com/in/**itayhindy<
>> > http://www.linkedin.com/in/itayhindy>
>> > >>>
>> > >>>
>> > >>
>> > >>
>> > >
>> > >
>> ------------------------------**------------------------------**---------
>> > > To unsubscribe, e-mail: users-unsubscribe@felix.**apache.org<
>> > users-unsubscribe@felix.apache.org>
>> > > For additional commands, e-mail: users-help@felix.apache.org
>> > >
>> > >
>> >
>> >
>> > --
>> > Regards,
>> >
>> > Itay Hindy
>> > Software Solutions
>> > +972-54-5935042
>> > linkedin: http://www.linkedin.com/in/itayhindy
>> >
>>
>>
>>
>> --
>> Karl Pauls
>> karlpauls@gmail.com
>> http://twitter.com/karlpauls
>> http://www.linkedin.com/in/karlpauls
>> https://profiles.google.com/karlpauls
>>
>
>
>
> --
> Regards,
>
> Itay Hindy
> Software Solutions
> +972-54-5935042
> linkedin: http://www.linkedin.com/in/itayhindy
>



-- 
Karl Pauls
karlpauls@gmail.com
http://twitter.com/karlpauls
http://www.linkedin.com/in/karlpauls
https://profiles.google.com/karlpauls

Re: Class loading issues for embedded felix within tomcat

Posted by Karl Pauls <ka...@gmail.com>.
Can you make a simple example of this available to me?

regards,

Karl


On Wed, Jan 2, 2013 at 9:21 AM, itay hindy <it...@gmail.com> wrote:

> Sorry, I had some issues and I was not clear enough.
>
> Let me summarize:
> 1 - I manage to run the war with the embedded felix and everything works
> great.
> 2 - I had to run the below lines in order that the ProxyServlet will pass
> requests to my bundle that use a servlet
> *     //need it for the dispatcher to work*
> *    url =
>
>  this.servletContext.getResource("/WEB-INF/lib/org.apache.felix.http.bridge-2.2.0.jar");
> *
> *    bundle = context.installBundle(url.toExternalForm());*
> *    bundle.start(); *
> 3 - As I said everything works great with one war running in tomcat. When I
> try to use 2 wars side by side I get the below exception:
> ERROR: Bundle org.apache.felix.http.bridge [2] Error starting
> jndi:/localhost/itay/qa/WEB-INF/lib/org.apache.felix.http.bridge-2.2.0.jar
> (org.osgi.framework.BundleException: Activator start error in bundle
> org.apache.felix.http.bridge [2].)
> java.lang.LinkageError: loader constraint violation: when resolving
> overridden method
>
> "org.apache.felix.http.base.internal.listener.AbstractListenerManager.addingService(Lorg/osgi/framework/ServiceReference;)Ljava/lang/Object;"
> the class lo
> ader (instance of
> org/apache/felix/framework/BundleWiringImpl$BundleClassLoaderJava5) of the
> current class,
> org/apache/felix/http/base/internal/listener/AbstractListenerManager, and
> its superclass loader (instance of org/apache/catalina/loa
> der/WebappClassLoader), have different Class objects for the type
> org/osgi/framework/ServiceReference used in the signature
>         at
>
> org.apache.felix.http.base.internal.HttpServiceController.<init>(HttpServiceController.java:76)
>
> Thanks
>
>
> On Tue, Jan 1, 2013 at 4:23 PM, Richard S. Hall <heavy@ungoverned.org
> >wrote:
>
> > On 1/1/13 06:12, itay hindy wrote:
> >
> >> Ignore my last mail, I figure it out. It was because of activators
> order.
> >>
> >> Another question, I manage now to run the war that used the embedded
> >> felix.
> >> I try to execute http requests but fail on the the ProxyServlet. The
> >> DispatcherTracker has not been initialize so
> this.tracker.getDispatcher()
> >> returns null.
> >>
> >> How can I activate it?
> >>
> >
> > Sorry, I don't know what you are talking about.
> >
> > -> richard
> >
> >
> >> Thanks in advance
> >>
> >> On Tue, Jan 1, 2013 at 10:10 AM, itay hindy <it...@gmail.com>
> wrote:
> >>
> >>  Thanks Richard, I followed your advice and make it works.
> >>> Now I have a new Issue:
> >>>
> >>> I try to use *bundle.update() *and I get next exception:
> >>> *Caused by: java.net.**MalformedURLException: Unknown protocol: obr
> >>> *
> >>> When I run felix *not *embedded from tomcat everything works.
> >>>
> >>>
> >>> I looked into it and the problem seems to be that when running embedded
> >>> felix within tomcat the URLHandlersStreamHandlerProxy class is not
> used.
> >>>
> >>> The next line:
> >>> *return new URL(context, "obr:...", handler)*
> >>>
> >>> for embedded felix just tries to create url while for stand alone felix
> >>> it
> >>> uses the URLHandlersStreamHandlerProxy.
> >>>
> >>> Any Idea how to config it?
> >>>
> >>> On Thu, Dec 27, 2012 at 4:08 PM, Richard S. Hall <heavy@ungoverned.org
> >>> >wrote:
> >>>
> >>>  On 12/27/12 07:25, itay hindy wrote:
> >>>>
> >>>>  Hi All,
> >>>>>
> >>>>> I have a question about running embedded felix within tomcat.
> >>>>>
> >>>>> I had follow the instructions at
> >>>>> http://felix.apache.org/site/****apache-felix-framework-**<
> http://felix.apache.org/site/**apache-felix-framework-**>
> >>>>> launching-and-embedding.html<h**ttp://felix.apache.org/site/**
> >>>>> apache-felix-framework-**launching-and-embedding.html<
> http://felix.apache.org/site/apache-felix-framework-launching-and-embedding.html
> >
> >>>>> >
> >>>>>
> >>>>>
> >>>>> I manage to run felix within tomcat, however I have a problem with
> >>>>>  class
> >>>>> loaders.
> >>>>>
> >>>>> Here is the scenario:
> >>>>> 1 - My host application needs to use the RepositoryAdmin service
> >>>>> from org.apache.felix.****bundlerepository-1.6.6.jar bundle
> >>>>> 2 - I add the org.apache.felix.****bundlerepository-1.6.6.jar to my
> >>>>> class
> >>>>>
> >>>>> path
> >>>>> so I can access its interfaces
> >>>>> 3 - I install this bundle on my host application activator code
> >>>>>        URL url =
> >>>>>    this.servletContext.****getResource("/WEB-INF/lib/org.****
> >>>>> apache.felix.bundlerepository-****1.6.6.jar");
> >>>>>       Bundle bundle =
> context.installBundle(url.****toExternalForm());
> >>>>>
> >>>>>       bundle.start();
> >>>>> 4 - I have created ServiceTracker for the RepositoryAdmin service
> >>>>> 5 - In the ServiceTracker the next bold line fails with class cast
> >>>>> exception
> >>>>> public Object addingService(ServiceReference reference) {
> >>>>>                   Object serviceObject =
> super.addingService(reference)
> >>>>> ****
> >>>>> ;
> >>>>>               try {
> >>>>>                       *repositoryAdmin = (RepositoryAdmin)**
> >>>>>
> >>>>> serviceObject*;
> >>>>>
> >>>>> } catch (Exception e) {
> >>>>> e.printStackTrace();
> >>>>> }
> >>>>>                   return repositoryAdmin;
> >>>>>               }
> >>>>>
> >>>>> The reason seems to be because RepositoryAdmin interface classloader
> >>>>>   comes
> >>>>> from org.apache.catalina.loader.****WebappClassLoader and the
> >>>>>
> >>>>> actual RepositoryAdminImpl  object (the *serviceObject*) is coming
> from
> >>>>> BundleWiringImpl$****BundleClassLoaderJava5
> >>>>>
> >>>>>  Yes, of course. The bundle doesn't have access to your outer
> >>>> repository
> >>>> classes and your host doesn't have access to the bundle's repository
> >>>> classes.
> >>>>
> >>>> You will need to try to export the repository packages from your host
> >>>> app
> >>>> via the system bundle. Of course, this will only work if the
> repository
> >>>> bundle properly imports AND exports the repository packages. Even if
> it
> >>>> does, it is tricky and might not work if there are any "uses"
> constraint
> >>>> issues, but you could try. If that doesn't work, you could look into
> >>>> boot
> >>>> delegating the packages from your class path, but that is a last
> resort.
> >>>>
> >>>> -> richard
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>  Any Idea?
> >>>>>
> >>>>> Regards,
> >>>>> Itay Hindy
> >>>>>
> >>>>>
> >>>>>  ------------------------------****----------------------------**
> >>>> --**---------
> >>>> To unsubscribe, e-mail: users-unsubscribe@felix.**apac**he.org<
> http://apache.org>
> >>>> <users-unsubscribe@**felix.apache.org<
> users-unsubscribe@felix.apache.org>
> >>>> >
> >>>>
> >>>> For additional commands, e-mail: users-help@felix.apache.org
> >>>>
> >>>>
> >>>>
> >>> --
> >>> Regards,
> >>>
> >>> Itay Hindy
> >>> Software Solutions
> >>> +972-54-5935042
> >>> linkedin: http://www.linkedin.com/in/**itayhindy<
> http://www.linkedin.com/in/itayhindy>
> >>>
> >>>
> >>
> >>
> >
> > ------------------------------**------------------------------**---------
> > To unsubscribe, e-mail: users-unsubscribe@felix.**apache.org<
> users-unsubscribe@felix.apache.org>
> > For additional commands, e-mail: users-help@felix.apache.org
> >
> >
>
>
> --
> Regards,
>
> Itay Hindy
> Software Solutions
> +972-54-5935042
> linkedin: http://www.linkedin.com/in/itayhindy
>



-- 
Karl Pauls
karlpauls@gmail.com
http://twitter.com/karlpauls
http://www.linkedin.com/in/karlpauls
https://profiles.google.com/karlpauls

Re: Class loading issues for embedded felix within tomcat

Posted by itay hindy <it...@gmail.com>.
Sorry, I had some issues and I was not clear enough.

Let me summarize:
1 - I manage to run the war with the embedded felix and everything works
great.
2 - I had to run the below lines in order that the ProxyServlet will pass
requests to my bundle that use a servlet
*     //need it for the dispatcher to work*
*    url =
 this.servletContext.getResource("/WEB-INF/lib/org.apache.felix.http.bridge-2.2.0.jar");
*
*    bundle = context.installBundle(url.toExternalForm());*
*    bundle.start(); *
3 - As I said everything works great with one war running in tomcat. When I
try to use 2 wars side by side I get the below exception:
ERROR: Bundle org.apache.felix.http.bridge [2] Error starting
jndi:/localhost/itay/qa/WEB-INF/lib/org.apache.felix.http.bridge-2.2.0.jar
(org.osgi.framework.BundleException: Activator start error in bundle
org.apache.felix.http.bridge [2].)
java.lang.LinkageError: loader constraint violation: when resolving
overridden method
"org.apache.felix.http.base.internal.listener.AbstractListenerManager.addingService(Lorg/osgi/framework/ServiceReference;)Ljava/lang/Object;"
the class lo
ader (instance of
org/apache/felix/framework/BundleWiringImpl$BundleClassLoaderJava5) of the
current class,
org/apache/felix/http/base/internal/listener/AbstractListenerManager, and
its superclass loader (instance of org/apache/catalina/loa
der/WebappClassLoader), have different Class objects for the type
org/osgi/framework/ServiceReference used in the signature
        at
org.apache.felix.http.base.internal.HttpServiceController.<init>(HttpServiceController.java:76)

Thanks


On Tue, Jan 1, 2013 at 4:23 PM, Richard S. Hall <he...@ungoverned.org>wrote:

> On 1/1/13 06:12, itay hindy wrote:
>
>> Ignore my last mail, I figure it out. It was because of activators order.
>>
>> Another question, I manage now to run the war that used the embedded
>> felix.
>> I try to execute http requests but fail on the the ProxyServlet. The
>> DispatcherTracker has not been initialize so this.tracker.getDispatcher()
>> returns null.
>>
>> How can I activate it?
>>
>
> Sorry, I don't know what you are talking about.
>
> -> richard
>
>
>> Thanks in advance
>>
>> On Tue, Jan 1, 2013 at 10:10 AM, itay hindy <it...@gmail.com> wrote:
>>
>>  Thanks Richard, I followed your advice and make it works.
>>> Now I have a new Issue:
>>>
>>> I try to use *bundle.update() *and I get next exception:
>>> *Caused by: java.net.**MalformedURLException: Unknown protocol: obr
>>> *
>>> When I run felix *not *embedded from tomcat everything works.
>>>
>>>
>>> I looked into it and the problem seems to be that when running embedded
>>> felix within tomcat the URLHandlersStreamHandlerProxy class is not used.
>>>
>>> The next line:
>>> *return new URL(context, "obr:...", handler)*
>>>
>>> for embedded felix just tries to create url while for stand alone felix
>>> it
>>> uses the URLHandlersStreamHandlerProxy.
>>>
>>> Any Idea how to config it?
>>>
>>> On Thu, Dec 27, 2012 at 4:08 PM, Richard S. Hall <heavy@ungoverned.org
>>> >wrote:
>>>
>>>  On 12/27/12 07:25, itay hindy wrote:
>>>>
>>>>  Hi All,
>>>>>
>>>>> I have a question about running embedded felix within tomcat.
>>>>>
>>>>> I had follow the instructions at
>>>>> http://felix.apache.org/site/****apache-felix-framework-**<http://felix.apache.org/site/**apache-felix-framework-**>
>>>>> launching-and-embedding.html<h**ttp://felix.apache.org/site/**
>>>>> apache-felix-framework-**launching-and-embedding.html<http://felix.apache.org/site/apache-felix-framework-launching-and-embedding.html>
>>>>> >
>>>>>
>>>>>
>>>>> I manage to run felix within tomcat, however I have a problem with
>>>>>  class
>>>>> loaders.
>>>>>
>>>>> Here is the scenario:
>>>>> 1 - My host application needs to use the RepositoryAdmin service
>>>>> from org.apache.felix.****bundlerepository-1.6.6.jar bundle
>>>>> 2 - I add the org.apache.felix.****bundlerepository-1.6.6.jar to my
>>>>> class
>>>>>
>>>>> path
>>>>> so I can access its interfaces
>>>>> 3 - I install this bundle on my host application activator code
>>>>>        URL url =
>>>>>    this.servletContext.****getResource("/WEB-INF/lib/org.****
>>>>> apache.felix.bundlerepository-****1.6.6.jar");
>>>>>       Bundle bundle = context.installBundle(url.****toExternalForm());
>>>>>
>>>>>       bundle.start();
>>>>> 4 - I have created ServiceTracker for the RepositoryAdmin service
>>>>> 5 - In the ServiceTracker the next bold line fails with class cast
>>>>> exception
>>>>> public Object addingService(ServiceReference reference) {
>>>>>                   Object serviceObject = super.addingService(reference)
>>>>> ****
>>>>> ;
>>>>>               try {
>>>>>                       *repositoryAdmin = (RepositoryAdmin)**
>>>>>
>>>>> serviceObject*;
>>>>>
>>>>> } catch (Exception e) {
>>>>> e.printStackTrace();
>>>>> }
>>>>>                   return repositoryAdmin;
>>>>>               }
>>>>>
>>>>> The reason seems to be because RepositoryAdmin interface classloader
>>>>>   comes
>>>>> from org.apache.catalina.loader.****WebappClassLoader and the
>>>>>
>>>>> actual RepositoryAdminImpl  object (the *serviceObject*) is coming from
>>>>> BundleWiringImpl$****BundleClassLoaderJava5
>>>>>
>>>>>  Yes, of course. The bundle doesn't have access to your outer
>>>> repository
>>>> classes and your host doesn't have access to the bundle's repository
>>>> classes.
>>>>
>>>> You will need to try to export the repository packages from your host
>>>> app
>>>> via the system bundle. Of course, this will only work if the repository
>>>> bundle properly imports AND exports the repository packages. Even if it
>>>> does, it is tricky and might not work if there are any "uses" constraint
>>>> issues, but you could try. If that doesn't work, you could look into
>>>> boot
>>>> delegating the packages from your class path, but that is a last resort.
>>>>
>>>> -> richard
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>  Any Idea?
>>>>>
>>>>> Regards,
>>>>> Itay Hindy
>>>>>
>>>>>
>>>>>  ------------------------------****----------------------------**
>>>> --**---------
>>>> To unsubscribe, e-mail: users-unsubscribe@felix.**apac**he.org<http://apache.org>
>>>> <us...@felix.apache.org>
>>>> >
>>>>
>>>> For additional commands, e-mail: users-help@felix.apache.org
>>>>
>>>>
>>>>
>>> --
>>> Regards,
>>>
>>> Itay Hindy
>>> Software Solutions
>>> +972-54-5935042
>>> linkedin: http://www.linkedin.com/in/**itayhindy<http://www.linkedin.com/in/itayhindy>
>>>
>>>
>>
>>
>
> ------------------------------**------------------------------**---------
> To unsubscribe, e-mail: users-unsubscribe@felix.**apache.org<us...@felix.apache.org>
> For additional commands, e-mail: users-help@felix.apache.org
>
>


-- 
Regards,

Itay Hindy
Software Solutions
+972-54-5935042
linkedin: http://www.linkedin.com/in/itayhindy

Re: Class loading issues for embedded felix within tomcat

Posted by "Richard S. Hall" <he...@ungoverned.org>.
On 1/1/13 06:12, itay hindy wrote:
> Ignore my last mail, I figure it out. It was because of activators order.
>
> Another question, I manage now to run the war that used the embedded felix.
> I try to execute http requests but fail on the the ProxyServlet. The
> DispatcherTracker has not been initialize so this.tracker.getDispatcher()
> returns null.
>
> How can I activate it?

Sorry, I don't know what you are talking about.

-> richard

>
> Thanks in advance
>
> On Tue, Jan 1, 2013 at 10:10 AM, itay hindy <it...@gmail.com> wrote:
>
>> Thanks Richard, I followed your advice and make it works.
>> Now I have a new Issue:
>>
>> I try to use *bundle.update() *and I get next exception:
>> *Caused by: java.net.MalformedURLException: Unknown protocol: obr
>> *
>> When I run felix *not *embedded from tomcat everything works.
>>
>> I looked into it and the problem seems to be that when running embedded
>> felix within tomcat the URLHandlersStreamHandlerProxy class is not used.
>>
>> The next line:
>> *return new URL(context, "obr:...", handler)*
>> for embedded felix just tries to create url while for stand alone felix it
>> uses the URLHandlersStreamHandlerProxy.
>>
>> Any Idea how to config it?
>>
>> On Thu, Dec 27, 2012 at 4:08 PM, Richard S. Hall <he...@ungoverned.org>wrote:
>>
>>> On 12/27/12 07:25, itay hindy wrote:
>>>
>>>> Hi All,
>>>>
>>>> I have a question about running embedded felix within tomcat.
>>>>
>>>> I had follow the instructions at
>>>> http://felix.apache.org/site/**apache-felix-framework-**
>>>> launching-and-embedding.html<http://felix.apache.org/site/apache-felix-framework-launching-and-embedding.html>
>>>>
>>>> I manage to run felix within tomcat, however I have a problem with  class
>>>> loaders.
>>>>
>>>> Here is the scenario:
>>>> 1 - My host application needs to use the RepositoryAdmin service
>>>> from org.apache.felix.**bundlerepository-1.6.6.jar bundle
>>>> 2 - I add the org.apache.felix.**bundlerepository-1.6.6.jar to my class
>>>> path
>>>> so I can access its interfaces
>>>> 3 - I install this bundle on my host application activator code
>>>>        URL url =
>>>>    this.servletContext.**getResource("/WEB-INF/lib/org.**
>>>> apache.felix.bundlerepository-**1.6.6.jar");
>>>>       Bundle bundle = context.installBundle(url.**toExternalForm());
>>>>       bundle.start();
>>>> 4 - I have created ServiceTracker for the RepositoryAdmin service
>>>> 5 - In the ServiceTracker the next bold line fails with class cast
>>>> exception
>>>> public Object addingService(ServiceReference reference) {
>>>>                   Object serviceObject = super.addingService(reference)**
>>>> ;
>>>>               try {
>>>>                       *repositoryAdmin = (RepositoryAdmin)**
>>>> serviceObject*;
>>>>
>>>> } catch (Exception e) {
>>>> e.printStackTrace();
>>>> }
>>>>                   return repositoryAdmin;
>>>>               }
>>>>
>>>> The reason seems to be because RepositoryAdmin interface classloader
>>>>   comes
>>>> from org.apache.catalina.loader.**WebappClassLoader and the
>>>> actual RepositoryAdminImpl  object (the *serviceObject*) is coming from
>>>> BundleWiringImpl$**BundleClassLoaderJava5
>>>>
>>> Yes, of course. The bundle doesn't have access to your outer repository
>>> classes and your host doesn't have access to the bundle's repository
>>> classes.
>>>
>>> You will need to try to export the repository packages from your host app
>>> via the system bundle. Of course, this will only work if the repository
>>> bundle properly imports AND exports the repository packages. Even if it
>>> does, it is tricky and might not work if there are any "uses" constraint
>>> issues, but you could try. If that doesn't work, you could look into boot
>>> delegating the packages from your class path, but that is a last resort.
>>>
>>> -> richard
>>>
>>>
>>>
>>>
>>>
>>>> Any Idea?
>>>>
>>>> Regards,
>>>> Itay Hindy
>>>>
>>>>
>>> ------------------------------**------------------------------**---------
>>> To unsubscribe, e-mail: users-unsubscribe@felix.**apache.org<us...@felix.apache.org>
>>> For additional commands, e-mail: users-help@felix.apache.org
>>>
>>>
>>
>> --
>> Regards,
>>
>> Itay Hindy
>> Software Solutions
>> +972-54-5935042
>> linkedin: http://www.linkedin.com/in/itayhindy
>>
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
For additional commands, e-mail: users-help@felix.apache.org


Re: Class loading issues for embedded felix within tomcat

Posted by itay hindy <it...@gmail.com>.
Ignore my last mail, I figure it out. It was because of activators order.

Another question, I manage now to run the war that used the embedded felix.
I try to execute http requests but fail on the the ProxyServlet. The
DispatcherTracker has not been initialize so this.tracker.getDispatcher()
returns null.

How can I activate it?

Thanks in advance

On Tue, Jan 1, 2013 at 10:10 AM, itay hindy <it...@gmail.com> wrote:

> Thanks Richard, I followed your advice and make it works.
> Now I have a new Issue:
>
> I try to use *bundle.update() *and I get next exception:
> *Caused by: java.net.MalformedURLException: Unknown protocol: obr
> *
> When I run felix *not *embedded from tomcat everything works.
>
> I looked into it and the problem seems to be that when running embedded
> felix within tomcat the URLHandlersStreamHandlerProxy class is not used.
>
> The next line:
> *return new URL(context, "obr:...", handler)*
> for embedded felix just tries to create url while for stand alone felix it
> uses the URLHandlersStreamHandlerProxy.
>
> Any Idea how to config it?
>
> On Thu, Dec 27, 2012 at 4:08 PM, Richard S. Hall <he...@ungoverned.org>wrote:
>
>> On 12/27/12 07:25, itay hindy wrote:
>>
>>> Hi All,
>>>
>>> I have a question about running embedded felix within tomcat.
>>>
>>> I had follow the instructions at
>>> http://felix.apache.org/site/**apache-felix-framework-**
>>> launching-and-embedding.html<http://felix.apache.org/site/apache-felix-framework-launching-and-embedding.html>
>>>
>>> I manage to run felix within tomcat, however I have a problem with  class
>>> loaders.
>>>
>>> Here is the scenario:
>>> 1 - My host application needs to use the RepositoryAdmin service
>>> from org.apache.felix.**bundlerepository-1.6.6.jar bundle
>>> 2 - I add the org.apache.felix.**bundlerepository-1.6.6.jar to my class
>>> path
>>> so I can access its interfaces
>>> 3 - I install this bundle on my host application activator code
>>>       URL url =
>>>   this.servletContext.**getResource("/WEB-INF/lib/org.**
>>> apache.felix.bundlerepository-**1.6.6.jar");
>>>      Bundle bundle = context.installBundle(url.**toExternalForm());
>>>      bundle.start();
>>> 4 - I have created ServiceTracker for the RepositoryAdmin service
>>> 5 - In the ServiceTracker the next bold line fails with class cast
>>> exception
>>> public Object addingService(ServiceReference reference) {
>>>                  Object serviceObject = super.addingService(reference)**
>>> ;
>>>              try {
>>>                      *repositoryAdmin = (RepositoryAdmin)**
>>> serviceObject*;
>>>
>>> } catch (Exception e) {
>>> e.printStackTrace();
>>> }
>>>                  return repositoryAdmin;
>>>              }
>>>
>>> The reason seems to be because RepositoryAdmin interface classloader
>>>  comes
>>> from org.apache.catalina.loader.**WebappClassLoader and the
>>> actual RepositoryAdminImpl  object (the *serviceObject*) is coming from
>>> BundleWiringImpl$**BundleClassLoaderJava5
>>>
>>
>> Yes, of course. The bundle doesn't have access to your outer repository
>> classes and your host doesn't have access to the bundle's repository
>> classes.
>>
>> You will need to try to export the repository packages from your host app
>> via the system bundle. Of course, this will only work if the repository
>> bundle properly imports AND exports the repository packages. Even if it
>> does, it is tricky and might not work if there are any "uses" constraint
>> issues, but you could try. If that doesn't work, you could look into boot
>> delegating the packages from your class path, but that is a last resort.
>>
>> -> richard
>>
>>
>>
>>
>>
>>> Any Idea?
>>>
>>> Regards,
>>> Itay Hindy
>>>
>>>
>>
>> ------------------------------**------------------------------**---------
>> To unsubscribe, e-mail: users-unsubscribe@felix.**apache.org<us...@felix.apache.org>
>> For additional commands, e-mail: users-help@felix.apache.org
>>
>>
>
>
> --
> Regards,
>
> Itay Hindy
> Software Solutions
> +972-54-5935042
> linkedin: http://www.linkedin.com/in/itayhindy
>



-- 
Regards,

Itay Hindy
Software Solutions
+972-54-5935042
linkedin: http://www.linkedin.com/in/itayhindy