One thing...

On 9 November 2012 10:44, Peter Firmstone <j...@zeus.net.au> wrote:

> Motivated by Sim's suggestions:
>
> Any objection to changing it to net.jini.io.**MarshalClassResolverSPI?
>
> This places it right where it's needed.
>
> Since all URI in a code base string will reside in one ClassLoader, all
> classes in that ClassLoader must use the same provider.  For instance an
> osgi:, maven: or httpmd: provider annotations could not mix within the same
> ClassLoader.
>

I'll have to do some checking but I don't think that's a current constraint
on the makeup of a codebase. Strictly from memory I recall codebase is a
set of URL's separated by spaces and nothing more. I'm not sure how that's
going to fit with insisting on a single provider.


>
> So in this case it would be acceptable to parse the codebase string, the
> scheme of the first URI found would be used to select a suitable provider.
>  This wouldn't prohibit the use of custom ClassLoaders like URIClassLoader
> and BundleClassLoader (an interface for OSGi ClassLoaders).
>
> Existing known types would be diverted to RMIClassLoaderSPI, via a default
> provider to avoid breaking existing code.
> Thus URL would not necessarily be required for class resolution.  Jar
> files may be downloaded separately and loaded from a local cache.
>
> The URL used in the CodeSource might also be different, a local file: or
> perhaps even null, Certificates used to represent the CodeSource for
> security purposes.  It would be the responsibility of the ClassLoader
> associated with the Service Provider to determine a codebase string
> suitable for remote code.
>
> These service providers would be part of a sub project, or implemented by
> downstream developers, not part of River directly.
>
> However there is one important omission, how do you remotely install a
> provider instance that doesn't exist locally?
>
> One method might be to append a the provider URL to the codebase string.
>
> The process would proceed as follows:
>
>   1. The scheme of the first provider would be used to select a
>      suitable provider if available.
>   2. If a suitable provider is not found locally, the last URI codebase
>      string can optionally be a URL from which the provider can be
>      retrieved.
>   3. The Provider jar must be signed and trusted (it can be signed with
>      a self signed certificate generated by the administrator, trusted
>      at the client).  If not trusted a ClassNotFoundException will be
>      thrown.
>   4. The Provider will be loaded into it's own ClassLoader instance and
>      instantiated from a no arg constructor, it isn't a remote object.
>   5. The service loader will be refreshed, the provider then selected
>      to perform class resolution.
>
> An alternative to signing a jar file for the provider, might be to
> retrieve it across an https: connection, the server is authenticated.  The
> https codebase server could be granted sufficient permission based on it's
> URL, perhaps using RemotePolicy, or using a local policy file.
>
> Are we going too far?  Thoughts?
>
> Cheers,
>
> Peter.
>
>
> Peter Firmstone wrote:
>
>> Simon IJskes - QCG wrote:
>>
>>> On 08-11-12 13:40, Peter Firmstone wrote:
>>>
>>>  Yes, but lets play around with it in skunk.  Dan's made some valid
>>>>
>>>
>>> Indeed Dan has made valid remarks, but i really dont like skunk. Tom
>>> suggested sub projects once. I did not see any benefits at that time. But i
>>> think it might be helpful right now.
>>>
>>> We could use the subprojects as 'clients' to the core, and allow
>>> requirements of these subprojects drive the modifications of the core.
>>>
>>> We can decide whatever status a subproject will have, and we do not make
>>> them heavyweight. Just an extra jar, an extra libs and an extra src in a
>>> directory together.
>>>
>>> I'm thinking about osgi, wan, internet, jmx transports etc. We treat the
>>> sub projects as first class citizens, and do proper release management on
>>> them. Just not that often.
>>>
>>> Am i still thinking too grandiose Dan?
>>>
>>> Gr. Simon
>>>
>>>
>>>  Ok, because it's small I think we can consider it, can you provide the
>> hooks to load different providers?  The non default providers themselves
>> can be a subproject.  We need to carefully consider security since we're
>> making it possible for downloaded code to resolve classes.
>>
>> My SecurityManager and policy providers were developed in skunk, then
>> merged.  URI changes were made in trunk, although this was a big change
>> semantically, the code footprint is small.  For large changes to foundation
>> code we need skunk, not everything can be bolted on or plugged in.
>>
>> Cheers,
>>
>> Peter.
>>
>>
>
>

Reply via email to