I am really happy you guys worked out a solution that would not create 
containerisms. I just worked with SQL and have seen what happens when 
implementations try to lock you in. I would hate to see OSGi go in that 
direction.

Kind regards,

        Peter Kriens







On 9 okt 2010, at 22:22, Guillaume Nodet wrote:

> I'm not necessarily talking about JEE here, but on all the projects i've
> worked on, implementing a standard does not always mean you can't innovate
> and go beyond what the standard provides.   When you develop an application,
> it's nice to adhere to a standard for a lot of reasons, but as a developer,
> if you need to use a specific feature of the container you'll deploy to be
> able to finish your project, you'll just do it.  You know you'll be locked
> into that container or product, but usually, it does not matter so much as i
> have hardly seen people switching any product they use when you have
> evaluated, tested an environment.  And even if you need to, if the feature
> you need is outside the spec, you'll try another workaround if you have to
> switch.
> 
> Karl, you took the example of the security framework, but the implementation
> is pretty much tied to the framework, so not maintaining that in the
> same project and having no public api has imho more drawbacks than
> advantages, because any change in the framework (given there's no public api
> really beyong the osgi api) can pretty much brake the security project.  In
> that case, you need to adapt the security and/or the framework to make that
> work again.   Of course, it makes Rick work easier because the framework can
> be refactored at will, while it makes your life harder.
> 
> Felix, I don't think the OSGi specs purity is twisted by JEE considerations.
> It's just that the whole JEE world bring new important use cases that
> haven't been addressed in the past (annotation scanning, classpath scanning,
> load time weaving, etc...)  Those are problems the mobile environment
> usually don't have afaik.  Some of the solutions enable more use cases
> (registry hooks, resolver hooks, virtual bundles, etc...).
> 
> Anyway, it's just my view and I have no problem to agree we disagree on it
> ...
> 
> On Sat, Oct 9, 2010 at 15:08, Felix Meschberger <[email protected]> wrote:
> 
>> Hi,
>> 
>> On 08.10.2010 20:08, Guillaume Nodet wrote:
>>> On Fri, Oct 8, 2010 at 18:43, Felix Meschberger <[email protected]>
>> 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.
>> 
>> I wonder how you would be able scan the class space by pure ClassLoader
>> API, unless you check for the class loader being an URLClassLoader and
>> access the configured URLs....
>> 
>> But then: How about the Bundle.findeEntries ?
>> 
>>> 
>>> 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.
>> 
>> Yeah, and I would be so undiplomatic to say, that this is at the heart
>> of today's J2EE mess ....
>> 
>> IMHO you can bend the purity once, but you then will bend it twice,
>> three times, etc. Until end up in a complete mess ...
>> 
>> My intepretation is that the J2EE world has realized this stituation,
>> starts embracing OSGi and along the lines of "getting stuff done by
>> bending purity if required" now starts and tries to do the same to the
>> OSGi specs. I am not really happy with this development ....
>> 
>> But this is diverting this discussion ...
>> 
>> Regards
>> Felix
>> 
>>> 
>>> 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.
>>> 
>>> 
>>>> 
>>>> 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, <[email protected]> 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
>>>>>> 
>>>>>> 
>>>>>> 
>>>>> 
>>>>> 
>>>> 
>>> 
>>> 
>>> 
>> 
> 
> 
> 
> -- 
> Cheers,
> Guillaume Nodet
> ------------------------
> Blog: http://gnodet.blogspot.com/
> ------------------------
> Open Source SOA
> http://fusesource.com

Reply via email to