[ 
https://issues.apache.org/jira/browse/RIVER-436?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Michal Kleczek updated RIVER-436:
---------------------------------

    Attachment: codebase.patch

This is a first patch created against qa_refactor branch.
It is not tested - just attached here for review.

The architecture looks sound.
Goals achieved (probably :) ):
1. Establishing trust of downloaded code prior to execution
2. Extensibility of class loading mechanism
3. Backwards compatibility (to be refined but the idea looks ok)
4. Fixed issues with current class loading - because codebases are now objects 
they can encode much more information. Default implementation (RmiCodeBase) is 
hierarchical. A NonActivatableCodeBaseServiceDescriptor is provided to create a 
proper ClassLoader hierarchy when starting services. This hierarchy is going to 
be maintained and recreated on remote clients. Additionally the actual 
resources are accessed through RMIResource which identity is not tied to URL 
but name and secure hash. It caries with itself a set of URLs where the 
resource can be downloaded from and provides a simple fallback mechanism when 
accessing them. The set of URLs is merged on each node so when RMIResource is 
sent further it is going to have more URLs. So code server information 
"spreads" throught the network.

Since RMIResource identity is not tied to URL it is enough for two services to 
have the same hierarchy of ClassLoaders - each of them loaded from it's 
RMIResource - to share classes by recreating the tree of ClassLoaders on remote 
ends.

> Codebase annotations should be objects implementing a known interface instead 
> of Strings
> ----------------------------------------------------------------------------------------
>
>                 Key: RIVER-436
>                 URL: https://issues.apache.org/jira/browse/RIVER-436
>             Project: River
>          Issue Type: New Feature
>          Components: net_jini_core, net_jini_io, net_jini_security
>            Reporter: Michal Kleczek
>            Priority: Minor
>         Attachments: codebase.patch
>
>
> Right now codebase annotations are Strings containing a space separated list 
> of URLs . This has several drawbacks:
> 1. Code downloading is not dynamically extensible. All the parties in the 
> network have to apriori agree on a set of URL handlers. Introduction of a new 
> provisioning mechanism - for example based on Maven - requires at least 
> reconfiguration of all participants
> 2. There is no way of verifying downloaded code before it is actually 
> executed. Right now a TrustVerifier is obtained and used only after a service 
> proxy was deserialized which enables untrusted code to execute during 
> deserialization (see also RIVER-362).
> The idea is to make code downloading extensible. Codebase annotations should 
> be objects implementing a well known interface encapsulating the way how code 
> is downloaded.
> Prior to execution codebase annotations would be verified for trust.
> That way:
> 1. Clients are decoupled from the mechanism used to download service proxy 
> code
> 2. No code is executed before verifying the codebase for trust.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to