Hi Patrick

  Thanks for finding a workaround for a bug in the code that process
the contribution metadata side file, I have created a jira for it [1].

  Looking into the code you provided, I noticed you are using the
same resolver while contributing both contributions, and you should be
using two different ones....

  Could you also provide us with the full stack trace and the
composite files you are using ? In the mean time, I'll try to simulate
what I think you are doing in a test case and made it available in
Tuscany.

[1] https://issues.apache.org/jira/browse/TUSCANY-1329

On 6/6/07, Patrick Vanhuyse <[EMAIL PROTECTED]> wrote:
Luciano,

First try with url = "file://.../provider.jar" doesn't work because :

In ContributionServiceImpl.java, initializeContributionMetadata (line 134) :

        URL[] clUrls = {sourceURL};
        URLClassLoader cl = new URLClassLoader(clUrls);

        contributionMetadataURL =
cl.getResource(Contribution.SCA_CONTRIBUTION_META);

sourceURL = "file://.../provider.jar"
contributionMetadataURL =
"file://.../consumer/target/classes/META-INF/sca-contribution.xml"
because of the parent class loader in cl.

If I put a null parent class loader in the creation of cl :

        URL[] clUrls = {sourceURL};
        URLClassLoader cl = new URLClassLoader(clUrls, null);

        contributionMetadataURL =
cl.getResource(Contribution.SCA_CONTRIBUTION_META);

it finds the good sca-contribution :
contributionMetadataURL =
"jar:file://.../provider.jar!/META-INF/sca-contribution.xml"

and it loads the ProviderComposite and the ProviderComponent in it.

But in my test :

    // Determine my class loader and my test SCA contribution location
    String url =
"file:///h:/it/logiciel_gi/sca/provider/target/provider.jar";

    ContributionService contributionService =
domain.getContributionService();
    DomainCompositeHelper helper = domain.getDomainCompositeHelper();
    ModelResolver myResolver = new
ModelResolverImpl(getClass().getClassLoader());

    // Contribute the SCA contribution
    List<Contribution> contributions = new ArrayList<Contribution>(2);

    Contribution contribution = contributionService
        .contribute("http://www.greisch.com/provider";, new URL(url),
myResolver, false);
    assertNotNull(contribution);
    contributions.add(contribution);

    url = "file:///h:/it/logiciel_gi/sca/consumer/target/classes/";

    contribution = contributionService
        .contribute("http://www.greisch.com/consumer";, new URL(url),
myResolver, false);
    assertNotNull(contribution);
    contributions.add(contribution);

    for (Contribution contrib : contributions) {
      for (Composite composite : contrib.getDeployables()) {
        helper.addComposite(composite);
      }
      for (Composite composite : contrib.getDeployables()) {
        helper.startComposite(composite);
      }
    }


    Consumer consumer = domain.getService(Consumer.class,
"ConsumerComponent");
    consumer.consume("Test");

I get a NullPointerException when running consumer.consume("Test"). It
doesn't link consumer with my ProviderComponent as required in
Consumer.composite.

I keep going on with all this.

Thanks for your help.


> -----Message d'origine-----
> De : Luciano Resende [mailto:[EMAIL PROTECTED]
> Envoyé : mardi 5 juin 2007 19:49
> À : tuscany-user@ws.apache.org
> Objet : Re: Simple use case problem
>
>
> Patrick
>
>    The contribution service package processor takes care of
> identifying what is the package type and creating the proper jar url
> for jar archives. Have you tried to pass a regular file url to the jar
> ? Something like :
>
>   String url = "file://.../provider.jar"
>
>    The contribution service iTest [1] gives an example of contributing
> a jar directly to the contribution service, just look for
> testContributeJAR.
>
>    Please let me know if it works for you after you pass the
> simple file url.
>
>
> [1]
> https://svn.apache.org/repos/asf/incubator/tuscany/java/sca/itest/
> contribution/src/test/java/org/apache/tuscany/sca/test/contributio
> n/ContributionServiceTestCase.java
>
>
>
> On 6/5/07, Mike Edwards <[EMAIL PROTECTED]> wrote:
> > Patrick,
> >
> > One point to make here is that separate contributions are intended to
> > have different addresses, which in a simple file system equates to
> > different directories.  If you want multiple composites in the same
> > directory, then you should make them part of one contribution, which is
> > allowed.
> >
> >
> > Yours, Mike.
> >
> > Patrick Vanhuyse wrote:
> > > Hi Simon,
> > >
> > > I removed sca-contibutions.xml from provider. I copied
> Provider.composite to
> > > consumer/src/main/resource. I add ProviderComposite to the consumer
> > > sca-contribution.xml. And it works.
> > >
> > > I have had a look at the code in SCADomain.newInstance(). It
> loads only one
> > > sca-contribution.xml, the first found by the class loader, I
> think. To solve
> > > this, it should look at all the sca-contribution.xml
> (conflict : they are
> > > all in the same folder) from the various jars on the
> classpath in place of
> > > using only one (depends on the ClassLoader). I don't know if
> it's possible
> > > (the class loading mechanism is a mystery to me !).
> Furthermore, there is
> > > the SCA loading mechanism used which is yet a greater mystery.
> > >
> > > I will go on with my other tests. Afterwards, if I dare, I
> will throw myself
> > > into all this loading stuff.
> > >
> > > Thanks for your help.
> > >
> > > Patrick
> > >
> > > -----Message d'origine-----
> > > De : Simon Laws [mailto:[EMAIL PROTECTED]
> > > Envoyé : mercredi 30 mai 2007 18:11
> > > À : tuscany-user@ws.apache.org
> > > Objet : Re: Simple use case problem
> > >
> > >
> > > Hi Patrick
> > >
> > > What is going on here is that the consumer module is not loading the
> > > provider composite. I can make this work by doing the following...
> > >
> > > 1 - Make the provider composite available to the consumer runtime
> > >           copy the Provider.composite to consumer/src/main/resource
> > > 2 - Make the ProviderComposite deployable
> > >           add the ProviderComposite to the consumer
> > > sca-contributions.xmlfile
> > >
> > > Now I kind of expected to have to do 2 so that the runtime
> knows that the
> > > composite exists and should be deployed.
> > >
> > > However I don't know how to get round 1. I would like to be
> able to specify
> > > a jar to load alongside the  consumer composite that is
> loaded. However I
> > > took a look at the code and there seems to be more work to do
> in making the
> > > runtime and contribution service flexible in this way. All help is
> > > gratefully received if you feel like getting your hands dirty ;-)
> > >
> > > Regards
> > >
> > > Simon
> > >
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > For additional commands, e-mail: [EMAIL PROTECTED]
> > >
> > >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
>
>
> --
> Luciano Resende
> Apache Tuscany Committer
> http://people.apache.org/~lresende
> http://lresende.blogspot.com/
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




--
Luciano Resende
Apache Tuscany Committer
http://people.apache.org/~lresende
http://lresende.blogspot.com/

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to