You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tuscany.apache.org by Jim Marino <jm...@myromatours.com> on 2006/08/01 08:42:12 UTC

Re: Composite classpaths, was: How to use extensions with the standalone launcher?

On Jul 31, 2006, at 1:56 PM, Jeremy Boynes wrote:

> On Jul 30, 2006, at 6:33 PM, Jim Marino wrote:
>
>>
>> On Jul 30, 2006, at 5:21 PM, Jeremy Boynes wrote:
>>
>>> On Jul 30, 2006, at 2:55 PM, ant elder wrote:
>>>
>>>> What about the dependencies of the extension? It looks like  
>>>> right now all
>>>> the dependency jars still have to go in the boot directory and  
>>>> only the
>>>> extension in the extension directory. Is that what you intend?
>>>
>>> The spec does not define way to specify the classpath for a  
>>> composite so for now everything has to be bundled in it on in a  
>>> parent classloader (and the boot classloader is the parent to the  
>>> each of the extension composites).
>>>
>>> The jar classpath will still work so if you provide a Class-Path  
>>> entry in the manifest dependencies specified there should be found.
>>>
>>> Longer term I think we need a way to define a classpath in the  
>>> composite. I had a quick discussion a while ago with Oisin about  
>>> using a Maven repository to hold SCA artifacts and perhaps we can  
>>> use that here. I can think of two ways we could allow users to do  
>>> this:
>>>
>> For system services I think this is fine but I wouldn't want to  
>> require this of applications.
>
> I don't see the distinction here. We are saying that system  
> services are just composites and this is a way of associating  
> resources with a composite (specifically Java class files) - why  
> would there be any difference?
>
An end user application developer could write some type of library  
that gets reused by different composites. We should have a mechanism  
that supports this without resorting to maven. I think we should have  
some type of resolver abstraction, one implementation being a maven  
downloader.

>> There are a couple of other options we could also provide, based  
>> off of OSGi semantics:
>>
>> 1. Allow a jar to specify its dependencies using "pure" OSGi  
>> manifest entries when the composite is packaged as a bundle and  
>> deployed to an OSGI environment
>> 2. Allow the SCDL to specify dependencies using OSGI semantics.  
>> These would then be "baked" down to whatever packaging the host  
>> environment supported, perhaps through a pre-deploy step
>> 3.As part of #2, have a way to specify a maven bundle and have the  
>> pre-deployer pul it from maven and repackage it.
>>
>> Generally I don't like pre-packagers but that may be the price  
>> people have to pay for deploying on host environments with  
>> problematic classloading semantics - e.g. J2EE app servers. In an  
>> OSGi or jar launcher environment, things should just work without  
>> a predeploy step.
>
> These seem like alternatives. If the user wants to use OSGi  
> semantics then this would be a way to support them. However, there  
> are a lot of things out there that do not have OSGi manifests and  
> we need to be able to support them two.
>
That's what #2 would be used for as it is not dependent on OSGi  
artifacts such as bundles. A SCDL artifact would specify the  
dependencies and they could be resolved to whatever physical  
packaging the host platform supports/

> Also, these only work if the composite is packaged as a bundle and  
> I think that it's important to allow people to deploy composites  
> that are simple XML SCDL files (no archive involved). That means we  
> need a way in the SCDL to be able to specify what the dependencies  
> are.
>
#2 could also work with a file system through some type of "custom  
resolver" mentioned above.

Jim

> --
> Jeremy
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: tuscany-dev-unsubscribe@ws.apache.org
> For additional commands, e-mail: tuscany-dev-help@ws.apache.org
>


---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-dev-help@ws.apache.org


Re: Composite classpaths, was: How to use extensions with the standalone launcher?

Posted by Jeremy Boynes <jb...@apache.org>.
On Jul 31, 2006, at 11:42 PM, Jim Marino wrote:
> An end user application developer could write some type of library  
> that gets reused by different composites. We should have a  
> mechanism that supports this without resorting to maven. I think we  
> should have some type of resolver abstraction, one implementation  
> being a maven downloader.

I agree.

We need an abstraction for "dependent artifact" and a way of locating  
and resolving them; using a Maven repository would be one concrete  
implementation of that abstraction.

>>> There are a couple of other options we could also provide, based  
>>> off of OSGi semantics:
>>>
>>> 1. Allow a jar to specify its dependencies using "pure" OSGi  
>>> manifest entries when the composite is packaged as a bundle and  
>>> deployed to an OSGI environment
>>> 2. Allow the SCDL to specify dependencies using OSGI semantics.  
>>> These would then be "baked" down to whatever packaging the host  
>>> environment supported, perhaps through a pre-deploy step
>>> 3.As part of #2, have a way to specify a maven bundle and have  
>>> the pre-deployer pul it from maven and repackage it.
>>>
>>> Generally I don't like pre-packagers but that may be the price  
>>> people have to pay for deploying on host environments with  
>>> problematic classloading semantics - e.g. J2EE app servers. In an  
>>> OSGi or jar launcher environment, things should just work without  
>>> a predeploy step.
>>
>> These seem like alternatives. If the user wants to use OSGi  
>> semantics then this would be a way to support them. However, there  
>> are a lot of things out there that do not have OSGi manifests and  
>> we need to be able to support them two.
>>
> That's what #2 would be used for as it is not dependent on OSGi  
> artifacts such as bundles. A SCDL artifact would specify the  
> dependencies and they could be resolved to whatever physical  
> packaging the host platform supports/

This seems like it can be implemented on top of a repository for OSGi  
artifacts or a repository of Maven artifacts - this sounds good.

>
>> Also, these only work if the composite is packaged as a bundle and  
>> I think that it's important to allow people to deploy composites  
>> that are simple XML SCDL files (no archive involved). That means  
>> we need a way in the SCDL to be able to specify what the  
>> dependencies are.
>>
> #2 could also work with a file system through some type of "custom  
> resolver" mentioned above.

So the key here is the abstraction for artifact resolution. The  
interface I had proposed before was:
interface CompositeRepository {
     URL locate(String name);
     URL locate(String groupId, String artifactId, String version,  
String identifier);
}

We probably need to extend this to capture the formal concept of an  
Artifact so I would recast this as:

class Artifact {
     String group;       // a conceptual grouping of artifacts such  
as publisher
     String name;        // the name of the artifact
     String version;     // the version of the artifact
     String classifier;  // a classifier such as hardware platform or  
language
     boolean optional;   // whether the artifact is required
}

class ResolvedArtifact extends Artifact {
     URL url;            // a URL where the artifact can be obtained  
(typically a file: URL)
     Collection<ResolvedArtifact> dependencies; // list of  
dependencies the artifact has
}

interface ArtifactRepository {
    ResolvedArtifact resolve(String name); // lookup based on a  
simple string supplied by the user
    ResolvedArtifact resolve(Artifact artifact); // lookup based on  
explicit information
}


I think this is general enough to cover both Maven and OSGi artifact  
naming schemes (and hopefully more).

--
Jeremy


---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-dev-help@ws.apache.org