felix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Richard S. Hall" <he...@ungoverned.org>
Subject Re: [DISCUSS] Containerisms
Date Mon, 11 Oct 2010 13:38:23 GMT
  On 10/11/10 3:32, Guillaume Nodet wrote:
> What I don't get is why we don't get rid of the existing containerims in
> Felix:
>    * the reference: and inputstream: url protocol for installing bundles

There is no inputstream: URL for installing bundles. The reference: URL 
is there largely because Equinox has it and it was created specifically 
to match their containerism.

>    * the pluggable cache

We could. I'm not aware of anyone using it. But in reality, I'd like to 
find a completely different way to handle the cache. Making it pluggable 
is only good design, since it allows us to change our own implementation 
too.

>    * implicit boot delegation

This isn't really a containerism as much as it is trying to faithfully 
implement the spec. It tries to workaround stupid assumptions in the JRE.

> I suppose there are some more hidden throughout the code.

Probably, but given this list, it looks like we're doing a pretty good job.

As I said in another message, we look at everything on a case-by-case 
basis. There is no blanket answer, but typically things that break 
abstractions or encapsulation will be frowned upon.

Certainly there are places were we have container-specific behavior, but 
it is often due to leeway in the spec. In other cases, I can almost 
assure you that I discuss them with Tom Watson to make sure we can align 
such areas if possible.

-> richard

> On Fri, Oct 8, 2010 at 20:17, Richard S. Hall<heavy@ungoverned.org>  wrote:
>
>>   On 10/8/10 14:08, Guillaume Nodet wrote:
>>
>>> On Fri, Oct 8, 2010 at 18:43, Felix Meschberger<fmeschbe@gmail.com>
>>>   wrote:
>>>
>>>   Hi,
>>>> First of all: I agree with Richard in that we should at all cost prevent
>>>> containerisms.
>>>>
>>>> Second: I do not really understand what the problem is, that must be
>>>> solved with this containerism and which cannot be solved with regular
>>>> OSGi API.
>>>>
>>>>   The real problem is to be able to discover resources in the bundle class
>>> space. For example, i want to know all resources in foo/bar/**/*.xml The
>>> OSGi API does not provide any way to do that atm and a lot of libraries
>>> use
>>>   some custom things based on jars / file urls to actually iterate and
>>> discover those resources.
>>>
>>> The problem is just about a way to actually do things.  It seems in the
>>> enterprise world (JEE, middleware),  we're more keen on bending the purity
>>> a
>>> bit to the benfit of being able to achieve our goals and we're also more
>>> keen on doing that for third party libraries.
>>>
>>> It's true that if you write the whole osgi application from scratch, you
>>> don't really care about supporting third party libraries.  Unfortunately,
>>> people just won't rewrite a third party product they already use just
>>> because they want to play nicely in OSGi.  That's my use case, and it
>>> seems
>>> it doesn't fit well with Felix goals, so I guess i'll have to support a
>>> custom felix version in order to do that or only support equinox.
>>>
>>> I think I'll revert my commit as if the plan is to ditch it in the next
>>> felix version, there's really no point in even using such a hack from my
>>> pov.
>>>
>> Which is precisely the point from my perspective. Not only do you want the
>> hack, but you want it maintained forever. That's precisely what I think we
>> should avoid.
>>
>> If you are keen on having your own custom version of Felix, we can always
>> start a new subproject so you can work on one that you think is better. It
>> doesn't bother me to have two framework impls...as I've said many times, the
>> framework is just a subproject like any other. Just create a fork and call
>> it something completely different so there is no confusion.
>>
>> ->  richard
>>
>>
>>
>>>   Third: For us outsiders of the specification process it is very hard to
>>>> understand what insiders are talking of with respect to upcoming
>>>> specifications (I only learned 5 minutes ago, that there is a public
>>>> draft for 4.3). This issue must probably be solved by OSGi...
>>>>
>>>> Regards
>>>> Felix
>>>>
>>>> On 08.10.2010 16:37, Guillaume Nodet wrote:
>>>>
>>>>> I was planning to start a discussion around that, so let's do that now.
>>>>>
>>>>> I'm not convinced we should remove this hack when classpath scanning
is
>>>>> implemented, mostly because even if then ultimately try to solve the
>>>>> same
>>>>> problem, they will certainly do it in a different way.  What I mean is
>>>>>
>>>> that
>>>>
>>>>> AFAIK, the classpath scanning stuff will result in a new api on the
>>>>>
>>>> bundle
>>>>
>>>>> or bundleContext to iterate through resources, which means that in order
>>>>>
>>>> to
>>>>
>>>>> support existing libraries, you kinda have to rewrite the whole thing
in
>>>>> order to accomodate those apis (especially if they are written so that
>>>>>
>>>> they
>>>>
>>>>> work outside of osgi).
>>>>> I think the hack i've written allows a smoother integration of those
>>>>> libraries, with the drawback that you know it can break in certain
>>>>> conditions.
>>>>>
>>>>> Also, your comment says "Do not make containerisms public."
>>>>> In that case, it's not really public because the public face of the
>>>>> Felix
>>>>> Framework is the OSGi api.
>>>>> I guess the question comes down to wether we want Felix to remain pure
>>>>> (without containerisms) or make it easier for people to use it (by
>>>>>
>>>> bending
>>>>
>>>>> the edges when it makes sense to allow people to deploy their existing
>>>>> libraries without rewriting the whole thing).
>>>>> Imho, Felix is not a research prototype, nor supposed to be the
>>>>> cleaneest
>>>>> reference implementation of OSGi, so adapting to the users makes sense
>>>>>
>>>> imho,
>>>>
>>>>> provided that it's done conciensouly by the user by activating a flag
or
>>>>> accessing a non public api (we fall in that case here imho).
>>>>>
>>>>> Thoughts?
>>>>>
>>>>> On Fri, Oct 8, 2010 at 16:22,<rickhall@apache.org>   wrote:
>>>>>
>>>>>   Author: rickhall
>>>>>> Date: Fri Oct  8 14:22:39 2010
>>>>>> New Revision: 1005843
>>>>>>
>>>>>> URL: http://svn.apache.org/viewvc?rev=1005843&view=rev
>>>>>> Log:
>>>>>> Do not make containerisms public. (FELIX-2645)
>>>>>>
>>>>>> Modified:
>>>>>>
>>>>>>
>>>>>>   felix/trunk/framework/src/main/java/org/apache/felix/framework/ExtensionManager.java
>>>>>>   felix/trunk/framework/src/main/java/org/apache/felix/framework/ModuleImpl.java
>>>>>>   felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlersBundleURLConnection.java
>>>>>>   felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/ContentDirectoryContent.java
>>>>>>   felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/DirectoryContent.java
>>>>>>   felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/JarContent.java
>>>>>>   felix/trunk/framework/src/main/java/org/apache/felix/framework/resolver/Content.java
>>>>>>   felix/trunk/framework/src/main/java/org/apache/felix/framework/resolver/Module.java
>>>>> Modified:
>>>>>> felix/trunk/framework/src/main/java/org/apache/felix/framework/ExtensionManager.java
>>>>> URL:
>>>>>>
>>>> http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/ExtensionManager.java?rev=1005843&r1=1005842&r2=1005843&view=diff
>>>>
>>>>>> ==============================================================================
>>>>> ---
>>>>>> felix/trunk/framework/src/main/java/org/apache/felix/framework/ExtensionManager.java
>>>>> (original)
>>>>>> +++
>>>>>>
>>>>>> felix/trunk/framework/src/main/java/org/apache/felix/framework/ExtensionManager.java
>>>>> Fri Oct  8 14:22:39 2010
>>>>>> @@ -610,6 +610,7 @@ class ExtensionManager extends URLStream
>>>>>>          return null;
>>>>>>      }
>>>>>>
>>>>>> +    // TODO: REMOVE - Remove when class path scanning is implemented.
>>>>>>      public URL getEntryAsURL(String name)
>>>>>>      {
>>>>>>          return null;
>>>>>> @@ -763,6 +764,7 @@ class ExtensionManager extends URLStream
>>>>>>              return
>>>>>> getClass().getClassLoader().getResourceAsStream(urlPath);
>>>>>>          }
>>>>>>
>>>>>> +        // TODO: REMOVE - Remove when class path scanning is
>>>>>>
>>>>> implemented.
>>>>>          public URL getLocalURL(int index, String urlPath)
>>>>>>          {
>>>>>>              return getClass().getClassLoader().getResource(urlPath);
>>>>>>
>>>>>> Modified:
>>>>>>
>>>>>> felix/trunk/framework/src/main/java/org/apache/felix/framework/ModuleImpl.java
>>>>> URL:
>>>>>>
>>>> http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/ModuleImpl.java?rev=1005843&r1=1005842&r2=1005843&view=diff
>>>>
>>>>>> ==============================================================================
>>>>> ---
>>>>>> felix/trunk/framework/src/main/java/org/apache/felix/framework/ModuleImpl.java
>>>>> (original)
>>>>>> +++
>>>>>>
>>>>>> felix/trunk/framework/src/main/java/org/apache/felix/framework/ModuleImpl.java
>>>>> Fri Oct  8 14:22:39 2010
>>>>>> @@ -1091,6 +1091,7 @@ public class ModuleImpl implements Modul
>>>>>>          return getContentPath()[index - 1].getEntryAsStream(urlPath);
>>>>>>      }
>>>>>>
>>>>>> +    // TODO: REMOVE - Remove when class path scanning is implemented.
>>>>>>      public URL getLocalURL(int index, String urlPath)
>>>>>>      {
>>>>>>          if (urlPath.startsWith("/"))
>>>>>>
>>>>>> Modified:
>>>>>>
>>>>>> felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlersBundleURLConnection.java
>>>>> URL:
>>>>>>
>>>> http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlersBundleURLConnection.java?rev=1005843&r1=1005842&r2=1005843&view=diff
>>>>
>>>>>> ==============================================================================
>>>>> ---
>>>>>> felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlersBundleURLConnection.java
>>>>> (original)
>>>>>> +++
>>>>>>
>>>>>> felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlersBundleURLConnection.java
>>>>> Fri Oct  8 14:22:39 2010
>>>>>> @@ -28,7 +28,7 @@ import org.apache.felix.framework.resolv
>>>>>>
>>>>>>   import org.apache.felix.framework.util.Util;
>>>>>>
>>>>>> -public class URLHandlersBundleURLConnection extends URLConnection
>>>>>> +class URLHandlersBundleURLConnection extends URLConnection
>>>>>>   {
>>>>>>      private Felix m_framework;
>>>>>>      private Module m_targetModule;
>>>>>> @@ -201,7 +201,8 @@ public class URLHandlersBundleURLConnect
>>>>>>       *
>>>>>>       * @return the local URL
>>>>>>       */
>>>>>> -    public URL getLocalURL()
>>>>>> +    // TODO: REMOVE - Remove when class path scanning is implemented.
>>>>>> +    URL getLocalURL()
>>>>>>      {
>>>>>>          if ((m_targetModule == null) || (m_classPathIdx<   0))
>>>>>>          {
>>>>>>
>>>>>> Modified:
>>>>>>
>>>>>> felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/ContentDirectoryContent.java
>>>>> URL:
>>>>>>
>>>> http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/ContentDirectoryContent.java?rev=1005843&r1=1005842&r2=1005843&view=diff
>>>>
>>>>>> ==============================================================================
>>>>> ---
>>>>>> felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/ContentDirectoryContent.java
>>>>> (original)
>>>>>> +++
>>>>>>
>>>>>> felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/ContentDirectoryContent.java
>>>>> Fri Oct  8 14:22:39 2010
>>>>>> @@ -82,6 +82,7 @@ public class ContentDirectoryContent imp
>>>>>>          return m_content.getEntryAsStream(m_rootPath + name);
>>>>>>      }
>>>>>>
>>>>>> +    // TODO: REMOVE - Remove when class path scanning is implemented.
>>>>>>      public URL getEntryAsURL(String name)
>>>>>>      {
>>>>>>          return m_content.getEntryAsURL(m_rootPath + name);
>>>>>>
>>>>>> Modified:
>>>>>>
>>>>>> felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/DirectoryContent.java
>>>>> URL:
>>>>>>
>>>> http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/DirectoryContent.java?rev=1005843&r1=1005842&r2=1005843&view=diff
>>>>
>>>>>> ==============================================================================
>>>>> ---
>>>>>> felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/DirectoryContent.java
>>>>> (original)
>>>>>> +++
>>>>>>
>>>>>> felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/DirectoryContent.java
>>>>> Fri Oct  8 14:22:39 2010
>>>>>> @@ -133,6 +133,7 @@ public class DirectoryContent implements
>>>>>>          return new FileInputStream(new File(m_dir, name));
>>>>>>      }
>>>>>>
>>>>>> +    // TODO: REMOVE - Remove when class path scanning is implemented.
>>>>>>      public URL getEntryAsURL(String name)
>>>>>>      {
>>>>>>          if ((name.length()>   0)&&   (name.charAt(0)
== '/'))
>>>>>>
>>>>>> Modified:
>>>>>>
>>>>>> felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/JarContent.java
>>>>> URL:
>>>>>>
>>>> http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/JarContent.java?rev=1005843&r1=1005842&r2=1005843&view=diff
>>>>
>>>>>> ==============================================================================
>>>>> ---
>>>>>> felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/JarContent.java
>>>>> (original)
>>>>>> +++
>>>>>>
>>>>>> felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/JarContent.java
>>>>> Fri Oct  8 14:22:39 2010
>>>>>> @@ -192,6 +192,7 @@ public class JarContent implements Conte
>>>>>>          return is;
>>>>>>      }
>>>>>>
>>>>>> +    // TODO: REMOVE - Remove when class path scanning is implemented.
>>>>>>      public URL getEntryAsURL(String name)
>>>>>>      {
>>>>>>          try
>>>>>>
>>>>>> Modified:
>>>>>>
>>>>>> felix/trunk/framework/src/main/java/org/apache/felix/framework/resolver/Content.java
>>>>> URL:
>>>>>>
>>>> http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/resolver/Content.java?rev=1005843&r1=1005842&r2=1005843&view=diff
>>>>
>>>>>> ==============================================================================
>>>>> ---
>>>>>> felix/trunk/framework/src/main/java/org/apache/felix/framework/resolver/Content.java
>>>>> (original)
>>>>>> +++
>>>>>>
>>>>>> felix/trunk/framework/src/main/java/org/apache/felix/framework/resolver/Content.java
>>>>> Fri Oct  8 14:22:39 2010
>>>>>> @@ -120,5 +120,6 @@ public interface Content
>>>>>>       * @return A URL using a standard protocol such as file, jar
>>>>>>       *           or null if not possible.
>>>>>>       */
>>>>>> +    // TODO: REMOVE - Remove when class path scanning is implemented.
>>>>>>      URL getEntryAsURL(String name);
>>>>>>   }
>>>>>> \ No newline at end of file
>>>>>>
>>>>>> Modified:
>>>>>>
>>>>>> felix/trunk/framework/src/main/java/org/apache/felix/framework/resolver/Module.java
>>>>> URL:
>>>>>>
>>>> http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/resolver/Module.java?rev=1005843&r1=1005842&r2=1005843&view=diff
>>>>
>>>>>> ==============================================================================
>>>>> ---
>>>>>> felix/trunk/framework/src/main/java/org/apache/felix/framework/resolver/Module.java
>>>>> (original)
>>>>>> +++
>>>>>>
>>>>>> felix/trunk/framework/src/main/java/org/apache/felix/framework/resolver/Module.java
>>>>> Fri Oct  8 14:22:39 2010
>>>>>> @@ -72,5 +72,6 @@ public interface Module
>>>>>>          throws IOException;
>>>>>>      InputStream getInputStream(int index, String urlPath)
>>>>>>          throws IOException;
>>>>>> +    // TODO: REMOVE - Remove when class path scanning is implemented.
>>>>>>      URL getLocalURL(int index, String urlPath);
>>>>>>   }
>>>>>> \ No newline at end of file
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>
>

Mime
View raw message