Ok, I think I'm totally making a mess of this conversation. So, if you bare with me, let's go back to the original issue as stated by my colleague Miguel who listed this bit of code:
Felix.m_secureAction.addURLToURLClassLoader(Felix.m_secureAction.createURL( Felix.m_secureAction.createURL(null, "http:", extensionManager),"http://felix.extensions:9/", extensionManager), Felix.class.getClassLoader()); This, code adds an url to the parent (URLClassLoader) which loaded felix. If I may ask a question instead of making poor assumptions: What is that for? - Ray On Fri, Oct 26, 2012 at 10:04 AM, Karl Pauls <karlpa...@gmail.com> wrote: > On Fri, Oct 26, 2012 at 3:47 PM, Raymond Auge <raymond.a...@liferay.com> > wrote: > > So, finally, so everyone is a little more clear on the proposal it might > > look like this (but not preclude the existing behaviour, being controlled > > by properties as suggested earlier) > > > > e.g. 2 > > - classloader[a] loads felix[a] > > - felix[a] searches in classloader[a] for "felix" extensions > > - felix[a] contains a OSGi bundle (classloader[b]) which loads felix[b] > > - felix[b] is configured to use extension classloader[b1] > > - felix[b] searches classloader[b1] for "felix" extensions > > I don't think that really captures the problem. Either I'm missing > something or you are :-). > > We don't search any classloader for extensions. > > Your scenario makes me think we are barking up the wrong tree. Is all > you are talking about that you want to delegate down org.apache.felix > packages from the classloader of the outer framework into the bundle > of the inner felix and that is not working as felix assumes that the > classloader that loads it is the one it should use to delegate system > bundle classloads to? I.e., the inner felix in the bundle would get > access to classes in the classloader of the outer felix? > > If so, than this is a know problem. Iirc, Richard and I discussed it a > couple of times but never ended up doing something about it. The > current solution would be to make sure your inner bundle _does_ > include the org.apache.felix packages and _does not_ import them. It > might be worthwhile to add a mechanism that allows to give us the > classloader to use and it would look somewhat like what you are > proposing but it doesn't have much todo with extensions. > > regards, > > Karl > > > Thanks for your time, > > - Ray > > > > On Fri, Oct 26, 2012 at 9:27 AM, Felix Meschberger <fmesc...@adobe.com > >wrote: > > > >> Hi > >> > >> Am 26.10.2012 um 15:21 schrieb Raymond Auge: > >> > >> > On Fri, Oct 26, 2012 at 8:52 AM, Felix Meschberger < > fmesc...@adobe.com > >> >wrote: > >> > > >> >> Hi, > >> >> > >> >> Am 25.10.2012 um 17:15 schrieb Raymond Auge: > >> >> > >> >>> Hello All, > >> >>> > >> >>> I'd like to bump this issue as it appears to be a problem not only > with > >> >>> Felix, but also with Equinox and I'd like to clarify the issue. > >> >>> > >> >>> It appears that even though an OSGi framework can be embedded, it > does > >> >> not > >> >>> appear there is any protection from the case where it is embedded > >> within > >> >>> another OSGi container. > >> >>> > >> >>> For instance, while Miguel has highlighted the issue down to a very > >> >>> specific error, the problem just seems to be that an embedded > framework > >> >>> sees, and loads the extension bundles deployed to a higher level > >> >> container, > >> >>> at least it does if the developer does not use very strict > classloader > >> >>> isolation such as themselves delegating to an isolated container. > >> >>> > >> >>> We can certainly do that (and as of right now it looks like we have > no > >> >>> choice). > >> >>> > >> >>> However, it wouldn't be a terribly difficult problem to solve. > >> >>> > >> >>> I'd like to propose that a small feature be added which allows for > the > >> >>> extension mechanism to be defined as: > >> >>> > >> >>> a) using a specific classpath (as a property, from which we could > >> create > >> >> a > >> >>> URLClassLoader) > >> >>> b) pass an actual ClassLoader object during init as part of the > >> >>> configuration map associated with a extension loader property. > >> >>> > >> >>> In both cases (which would not be the default of course), the > >> classLoader > >> >>> in question would be used to load framework extensions. > >> >> > >> >> That's exactly what we do in the Sling Launchpad Base module to > >> >> encapsulate the framework from the environment (our experience is > >> deploying > >> >> the Sling's OSGi framework as a web application in an OSGi-based > servlet > >> >> container). > >> >> > >> > > >> > Right, and we've created such a wrapper to work around the current > issue > >> > ourselves. > >> > > >> > However, I'm just wondering if the intention of the Framework API was > to > >> > allow for this type of isolation (at least in theory)? And if so, > perhaps > >> > we could accommodate for it directly without having to write this > extra > >> > code. > >> > > >> > The problem caused by such a wrapper, is that we can no longer > directly > >> > access the OSGI apis from within the current application (which is > >> > emmbedding the framework). We'll end up having to front the APIs we > want > >> to > >> > access using a reflection layer which is very sad. > >> > >> Yes, you have to deploy shared API outside of the framework and > explicitly > >> configure the wrapper to let this api through the wrapper's wall. > >> > >> Regards > >> Felix > >> > >> > > >> > Thank you for thoughts, > >> > - Ray > >> > > >> > > >> >> > >> >> Regards > >> >> Felix > >> >> > >> >>> > >> >>> If we (Miguel and I) implemented this, would it be > >> acceptable/considered? > >> >>> > >> >>> Note, that I will be proposing the same concept to the equinox > project > >> >> and > >> >>> making a similar offer to implement the addition. > >> >>> > >> >>> Sincerely, > >> >>> - Ray > >> >>> > >> >>> On Tue, Oct 2, 2012 at 5:28 AM, Miguel Angel Pastor Olivar < > >> >>> miguelinl...@gmail.com> wrote: > >> >>> > >> >>>> Karl, > >> >>>> > >> >>>> I have created this ticket: > >> >>>> https://issues.apache.org/jira/browse/FELIX-3696 > >> >>>> > >> >>>> Let me know if I can help in some way. > >> >>>> > >> >>>> Thx!! > >> >>>> > >> >>>> On 2 October 2012 10:05, Karl Pauls <karlpa...@gmail.com> wrote: > >> >>>> > >> >>>>> On Tue, Oct 2, 2012 at 9:47 AM, Miguel Angel Pastor Olivar > >> >>>>> <miguelinl...@gmail.com> wrote: > >> >>>>>> Ok, > >> >>>>>> > >> >>>>>> First of all sorry for not being too explicit. I will try to give > >> some > >> >>>>> more > >> >>>>>> details: > >> >>>>>> > >> >>>>>> > >> >>>>>> - I am embedding Apache Felix (and Equinox because I would like > to > >> >>>>>> switch depending on the application server I am running on). > >> >>>>>> - > >> >>>>>> - The xalan ExtensionHandler executes something like this: > >> >>>>>> ObjectFactory.findProviderClass(className, > >> >>>>>> ObjectFactory.findClassLoader(), true) > >> >>>>>> - The className has the format "java:....PortletBridge" ( I am > >> >>>>> embedding > >> >>>>>> the OSGI container into Liferay portal :) ) > >> >>>>>> - The extension manager have already added the extension loader > to > >> >>>> the > >> >>>>>> classloader > >> >>>>>> > >> >>>>>> > >> >>>>>> > >> >>>>> > >> >>>> > >> >> > >> > Felix.m_secureAction.addURLToURLClassLoader(Felix.m_secureAction.createURL(Felix.m_secureAction.createURL(null, > >> >>>>>> "http:", extensionManager),"http://felix.extensions:9/", > >> >>>>> extensionManager), > >> >>>>>> Felix.class.getClassLoader()); > >> >>>>>> > >> >>>>>> - When resolving the "java:xxxxxx....PortletBridge" the previous > >> >>>>> loader > >> >>>>>> added by the ExtensionManager cause an unhandled error. > >> >>>>> > >> >>>>> Well, it shouldn't do that I guess - maybe you could create a jira > >> >>>>> issue as a bug report against the framework and give me some more > >> >>>>> information like stack trace of the error etc. and I can see > whether > >> >>>>> we can fix that. > >> >>>>> > >> >>>>>> In addition; when trying to embed the container inside JBoss 7+ > the > >> >>>>>> extension manager fails to load because it is not being loaded > by an > >> >>>>>> instance of the URLClassloader (it is not really a problem) > >> >>>>> > >> >>>>> Yeah, that makes sense and is working as designed. If we can't add > >> >>>>> ourself to a urlclassloader we just don't provide extension bundle > >> >>>>> support but should continue to work correctly. > >> >>>>> > >> >>>>>> As I have said in the previous mail, isolating the the framework > >> into > >> >>>> its > >> >>>>>> own classloader is working but it is trickier. > >> >>>>> > >> >>>>> If you don't need extension bundle support you shouldn't have to > do > >> >>>>> that then. Your real problems seems to be a bug in the extension > >> >>>>> manager that prevents it from working with your third-party > library > >> >>>>> even so it likely should. Please create a bug report and lets try > to > >> >>>>> fix the bug. > >> >>>>> > >> >>>>> regards, > >> >>>>> > >> >>>>> Karl > >> >>>>> > >> >>>>>> So this was the reason of asking you guys! > >> >>>>>> > >> >>>>>> Thx a lot! > >> >>>>>> > >> >>>>>> On 2 October 2012 09:20, Karl Pauls <karlpa...@gmail.com> wrote: > >> >>>>>> > >> >>>>>>>> I am using Apache Felix as the internal OSGI container inside a > >> >>>>> webapp. > >> >>>>>>> The > >> >>>>>>>> extension bundle manager adds the extension loader to the > >> >>>> classloader > >> >>>>>>> which > >> >>>>>>>> is causing me many headaches because some thirty-part > libraries. > >> >>>>>>> > >> >>>>>>> What is the problem exactly? If you don't have any extension > >> bundles, > >> >>>>>>> why would this cause problems (let alone with third-party libs)? > >> >>>>>>> > >> >>>>>>>> My first solution was to isolate the embedded container into > its > >> own > >> >>>>>>>> classloader but I think this approach adds too much complexity. > >> >>>>>>>> > >> >>>>>>>> Should be possible to make the Extension Bundle manager to be > >> >>>>>>> configurable? > >> >>>>>>>> I mean, disabling it could cause some other problems to the > >> >>>> framework? > >> >>>>>>> > >> >>>>>>> Again, it might help if you let us know what your problem is > with > >> it > >> >>>>>>> in the first place. That said, I'm not against adding a switch > to > >> >>>>>>> disable it but it is somewhat tricky.... > >> >>>>>>> > >> >>>>>>> > >> >>>>>>> regards, > >> >>>>>>> > >> >>>>>>> Karl > >> >>>>>>> > >> >>>>>>>> Cheers, > >> >>>>>>>> > >> >>>>>>>> Migue > >> >>>>>>>> > >> >>>>>>>> -- > >> >>>>>>>> Un saludo, > >> >>>>>>>> > >> >>>>>>>> Migue > >> >>>>>>>> > >> >>>>>>>> http://migue.github.com > >> >>>>>>> > >> >>>>>>> > >> >>>>>>> > >> >>>>>>> -- > >> >>>>>>> Karl Pauls > >> >>>>>>> karlpa...@gmail.com > >> >>>>>>> http://twitter.com/karlpauls > >> >>>>>>> http://www.linkedin.com/in/karlpauls > >> >>>>>>> https://profiles.google.com/karlpauls > >> >>>>>>> > >> >>>>>> > >> >>>>>> > >> >>>>>> > >> >>>>>> -- > >> >>>>>> Un saludo, > >> >>>>>> > >> >>>>>> Migue > >> >>>>>> > >> >>>>>> http://migue.github.com > >> >>>>> > >> >>>>> > >> >>>>> > >> >>>>> -- > >> >>>>> Karl Pauls > >> >>>>> karlpa...@gmail.com > >> >>>>> http://twitter.com/karlpauls > >> >>>>> http://www.linkedin.com/in/karlpauls > >> >>>>> https://profiles.google.com/karlpauls > >> >>>>> > >> >>>> > >> >>>> > >> >>>> > >> >>>> -- > >> >>>> Un saludo, > >> >>>> > >> >>>> Migue > >> >>>> > >> >>>> http://migue.github.com > >> >>>> > >> >>> > >> >>> > >> >>> > >> >>> -- > >> >>> *Raymond Augé* <http://www.liferay.com/web/raymond.auge/profile> > >> >>> <http://twitter.com/#!/rotty3000> | Senior Software Architect | > >> >> *Liferay, > >> >>> Inc.* <http://www.liferay.com> <https://twitter.com/#!/liferay> > >> >>> > >> >>> --- > >> >>> > >> >>> 24-25 October 2012 |* Liferay **Spain Symposium* | > >> >>> liferay.com/spain2012<http://www.liferay.com/spain2012> > >> >>> > >> >>> 16 November 2012 |* Liferay **Italy Symposium* | > >> >>> liferay.com/italy2012<http://www.liferay.com/italy2012> > >> >> > >> >> > >> > > >> > > >> > -- > >> > *Raymond Augé* <http://www.liferay.com/web/raymond.auge/profile> > >> > <http://twitter.com/#!/rotty3000> | Senior Software Architect | > >> *Liferay, > >> > Inc.* <http://www.liferay.com> <https://twitter.com/#!/liferay> > >> > > >> > --- > >> > > >> > 24-25 October 2012 |* Liferay **Spain Symposium* | > >> > liferay.com/spain2012<http://www.liferay.com/spain2012> > >> > > >> > 16 November 2012 |* Liferay **Italy Symposium* | > >> > liferay.com/italy2012<http://www.liferay.com/italy2012> > >> > >> > > > > -- > Karl Pauls > karlpa...@gmail.com > http://twitter.com/karlpauls > http://www.linkedin.com/in/karlpauls > https://profiles.google.com/karlpauls > -- *Raymond Augé* <http://www.liferay.com/web/raymond.auge/profile> <http://twitter.com/#!/rotty3000> | Senior Software Architect | *Liferay, Inc.* <http://www.liferay.com> <https://twitter.com/#!/liferay> --- 24-25 October 2012 |* Liferay **Spain Symposium* | liferay.com/spain2012<http://www.liferay.com/spain2012> 16 November 2012 |* Liferay **Italy Symposium* | liferay.com/italy2012<http://www.liferay.com/italy2012>