You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by Peter Kriens <Pe...@aQute.biz> on 2007/11/23 16:39:02 UTC

Re[2]: Eclipse RCP apps and Tuscany

I think it sounds very much like Felix Meschberger's conclusion.
Converting URLs to strings and then back to URLs, which is not
necessary and not guaranteed to work.

Anyway, I'd like to know why someone needs to escape to Equinox hooks
when it should work on standard OSGi level ...

Kind regards,

     Peter Kriens
     
RS> Hi,

RS> Tuscany supports OSGi bundle contributions which are currently loaded using
RS> the Apache Felix OSGi runtime by default. These contributions can contain
RS> composite files and other meta-data which are  loaded using OSGi and
RS> passed around as URLs. Tests for OSGi contributions are run under Felix with
RS> urlhandlers set, so we dont have any trouble with bundle:// URLs returned by
RS> resources located using Felix (Tuscany calls openConnection and openStream
RS> on these urls).

RS> Are the Eclipse RCP apps run without an URL stream handler to handle
RS> bundleresource:// URLs?


RS> Thank you...

RS> Regards,

RS> Rajini

RS> On 11/23/07, Felix Meschberger <fm...@gmail.com> wrote:
>>
>> Hi all,
>>
>> I don't think it is a bug in eclipse (just from the likeliness point of
>> view). What I do not know is, what Tuscany does with the URLs returned.
>> If they would just open a stream on the URL, there would be no issue at
>> all, because the URls are backed by handlers supporting opening the
>> streams.
>>
>> If on the other they convert the URls to Strings and later want to
>> create URLs from the strings again, they are hosed. But I assume, this
>> is then a bug/issue in Tuscany rather than in Eclipse. In fact, they
>> might run into the same troubles with Felix or just about any
>> framework...
>>
>> Regards
>> Felix
>>
>> Am Freitag, den 23.11.2007, 08:55 +0000 schrieb Rob Walker:
>> > Peter
>> >
>> > On a  very quick read thru this - tbh - it sounds like a bug/feature of
>> > their OSGi implementation.
>> >
>> > I'm 99% sure we use classloader getResource() calls under Felix, and the
>> > felix classloaders correctly resolve them to bundle URL references which
>> > can then be used in a normal way. Pretty sure you need the URL handler
>> > feature enabled, since I think as Jason points out the URL returned has
>> > a custom protocol type that the specific framework implementation needs
>> > to handle.
>> >
>> > A possible alternative may be for them to use getResourceAsStream() if
>> > viable - since this will resolve the URL and open it for them.
>> >
>> > Regards
>> >
>> > -- Rob
>> >
>> > Peter Kriens wrote:
>> > > I noticed this mail:
>> > >
>> > >
>> http://mail-archives.apache.org/mod_mbox/ws-tuscany-user/200711.mbox/%3C20071120203149.F334F4DA0A9@nike.apache.org%3E
>> > >
>> > > This is from the Tuscany project and seem to struggle with resource
>> > > handling in OSGi. Anybody knows Jason Clark and can discuss this with
>> > > him? As far as I can see, it can all be done with the bundle methods
>> > > or by creating new URLs.
>> > >
>> > > Kind regards,
>> > >
>> > >    Peter Kriens
>> > >
>> > >
>> >
>>
>>


-- 
Peter Kriens                              Tel +33467542167
9C, Avenue St. Drézéry                    AOL,Yahoo: pkriens
34160 Beaulieu, France                    ICQ 255570717
Skype pkriens                             Fax +1 8153772599


Re: Eclipse RCP apps and Tuscany

Posted by Jean-Sebastien Delfino <js...@apache.org>.
Rajini Sivaram wrote:
[snip]
  I dont know the code well enough to understand how
> these contributions are used/loaded/resolved etc. But yes, it will be good
> to stop manipulating URLs to locate contributions.
> 

+1, if I understand correctly, the scenario discussed here is like this:

Bob, application developer, writes Java code to bootstrap Tuscany and 
load some SCA contributions into it, before starting his composites.

With the current API, Bob's code needs to do something like:
TuscanySomething.addContribution(<location of the contribution>)

Bob can't seriously hardcode the location of the contribution:

- C:\Bob's Dir\aContribution.jar is only going to work on Bob's machine.

- At development time the location is also different, something like 
C:\Bob's IDE workspace\aProject\bin.

- When Bob builds with Maven the location is probably different again 
C:\Bob's build Dir\target\classes.

Bob didn't want to have to write 3 different classes for these 3 cases, 
so he put his SCA contribution on his classpath and wrote (almost) 
portable code to locate it (by looking for a known resource on the 
classpath and getting the location of the contribution from the 
resource's URL).

This is a hack around an inconvenient Tuscany bootstrap API which 
requires the app developer to give the location of his contributions.

How about trying to attack the real problems IMO:

- Bob shouldn't have to specify a location in the first place, he should 
be able to identify his contributions by contribution logical URI.

- or even better, Bob should not have to write any code to bootstrap the 
runtime and list contributions in the first place.

- and Bob shouldn't have to put his SCA contributions on his VM's 
classpath either (see the Store tutorial for an example, where the store 
contribution references the assets contribution without a classpath 
dependency on it).

Thoughts?
-- 
Jean-Sebastien

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


Re: Eclipse RCP apps and Tuscany

Posted by Rajini Sivaram <ra...@googlemail.com>.
Simon,


On 1/11/08, Simon Laws <si...@googlemail.com> wrote:
>
> Hi Rajini
>
>
> > But the code that I have run into problems with are in
> >
> >
> >
> org.apache.tuscany.sca.node.util.SCAContributionUtil.findContributionFromResource
> > (ClassLoader
> > classLoader, String compositeString)
> >
> > which only works with file:// or jar:// URLs (it is very similar to the
> > code
> > used by the old DefaultSCADomain).
>
>
> I've always been skeptical about this method. It was included as a
> convenience to allow the location of a contribution to be determined from
> some well know file, for example, the composite file that is being tested.
> Handy for testing but it seems back to front to me. As a user you either
> have a contribution or you don't. Seems a strange thing to ask a runtime
> to
> find a contribution based on what is known to be inside it.


Yes, it will be good if the code can be changed, but since many of the
samples and tests find their contributions based on the composites/sca-
contribution.xml, I am not sure if it is feasible to get rid of it
altogether after it has been around for so long.

>
> > This method is invoked from
> >
> >   1. SCADomainImpl to find the folder/jar containing domain.composite
> >   2. SCADomainProxyImpl to find the folder/jar containing node.composite
> >   3. SCANodeFactory.createNodeWithComposite(String composite)
> >   4. SCANodeLauncher.main()
> >
> > 1) and 2) in particular need to be fixed properly since they are
> internal
> > to
>
>
> > Tuscany and it doesn't seem appropriate to expect applications to
> > override resource loading for the Tuscany runtime when Tuscany is
> > installed
> > into OSGi.
>
>
> For 1 and 2 I'm sure we can find a better solution that using this method,
> for example, some alternatives
> Have the runtime implementations that Ant is thinking about specify a well
> know location for these system contributions
> Have the assemblies for these contributions generated programatically
> rather than read from the file system


When Tuscany is running under OSGi, we will require these contributions to
be installed into OSGi. I dont know the code well enough to understand how
these contributions are used/loaded/resolved etc. But yes, it will be good
to stop manipulating URLs to locate contributions.

.
> Simon
>

Thank you...

Regards,

Rajini

Re: Eclipse RCP apps and Tuscany

Posted by Simon Nash <na...@hursley.ibm.com>.
Simon Laws wrote:
> Hi Rajini
> 
> 
> 
>>But the code that I have run into problems with are in
>>
>>
>>org.apache.tuscany.sca.node.util.SCAContributionUtil.findContributionFromResource
>>(ClassLoader
>>classLoader, String compositeString)
>>
>>which only works with file:// or jar:// URLs (it is very similar to the
>>code
>>used by the old DefaultSCADomain).
> 
> 
> 
> I've always been skeptical about this method. It was included as a
> convenience to allow the location of a contribution to be determined from
> some well know file, for example, the composite file that is being tested.
> Handy for testing but it seems back to front to me. As a user you either
> have a contribution or you don't. Seems a strange thing to ask a runtime to
> find a contribution based on what is known to be inside it.
> 
> 
> 
>>This method is invoked from
>>
>>  1. SCADomainImpl to find the folder/jar containing domain.composite
>>  2. SCADomainProxyImpl to find the folder/jar containing node.composite
>>  3. SCANodeFactory.createNodeWithComposite(String composite)
>>  4. SCANodeLauncher.main()
>>
>>1) and 2) in particular need to be fixed properly since they are internal
>>to
> 
> 
> 
>>Tuscany and it doesn't seem appropriate to expect applications to
>>override resource loading for the Tuscany runtime when Tuscany is
>>installed
>>into OSGi.
> 
> 
> 
> For 1 and 2 I'm sure we can find a better solution that using this method,
> for example, some alternatives
>   Have the runtime implementations that Ant is thinking about specify a well
> know location for these system contributions
>   Have the assemblies for these contributions generated programatically
> rather than read from the file system
> 
Case 3 is a convenience method for use by samples and itests.  The
composite file may either be part of the current module and picked up
from the target/classes directory, or it may be part of some other
module that's listed in the pom.xml dependencies of the current module,
and picked up from a jar file in a local or remote maven repo.  The
findContributionFromResource() method allows these two cases to be
treated the same by the sample writer.

If we change the samples and tests so that they identify contributions
rather than composite files, I think we would also need to change the
build process to package contributions in a uniform way (probably as
jar files), so that case 3 could use a replacement convenience API
that refers explicitly to contributions rather than to composite files.

   Simon



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


Re: Eclipse RCP apps and Tuscany

Posted by ant elder <an...@gmail.com>.
On Jan 11, 2008 2:16 PM, Simon Laws <si...@googlemail.com> wrote:

> Hi Rajini
>
>
> > But the code that I have run into problems with are in
> >
> >
> >
> org.apache.tuscany.sca.node.util.SCAContributionUtil.findContributionFromResource
> > (ClassLoader
> > classLoader, String compositeString)
> >
> > which only works with file:// or jar:// URLs (it is very similar to the
> > code
> > used by the old DefaultSCADomain).
>
>
> I've always been skeptical about this method. It was included as a
> convenience to allow the location of a contribution to be determined from
> some well know file, for example, the composite file that is being tested.
> Handy for testing but it seems back to front to me. As a user you either
> have a contribution or you don't. Seems a strange thing to ask a runtime
> to
> find a contribution based on what is known to be inside it.
>

+1 to that.

   ...ant

Re: Eclipse RCP apps and Tuscany

Posted by Simon Laws <si...@googlemail.com>.
Hi Rajini


> But the code that I have run into problems with are in
>
>
> org.apache.tuscany.sca.node.util.SCAContributionUtil.findContributionFromResource
> (ClassLoader
> classLoader, String compositeString)
>
> which only works with file:// or jar:// URLs (it is very similar to the
> code
> used by the old DefaultSCADomain).


I've always been skeptical about this method. It was included as a
convenience to allow the location of a contribution to be determined from
some well know file, for example, the composite file that is being tested.
Handy for testing but it seems back to front to me. As a user you either
have a contribution or you don't. Seems a strange thing to ask a runtime to
find a contribution based on what is known to be inside it.


>
> This method is invoked from
>
>   1. SCADomainImpl to find the folder/jar containing domain.composite
>   2. SCADomainProxyImpl to find the folder/jar containing node.composite
>   3. SCANodeFactory.createNodeWithComposite(String composite)
>   4. SCANodeLauncher.main()
>
> 1) and 2) in particular need to be fixed properly since they are internal
> to


> Tuscany and it doesn't seem appropriate to expect applications to
> override resource loading for the Tuscany runtime when Tuscany is
> installed
> into OSGi.


For 1 and 2 I'm sure we can find a better solution that using this method,
for example, some alternatives
  Have the runtime implementations that Ant is thinking about specify a well
know location for these system contributions
  Have the assemblies for these contributions generated programatically
rather than read from the file system

  .
Simon

Re: Eclipse RCP apps and Tuscany

Posted by Rajini Sivaram <ra...@googlemail.com>.
Simon,

There is code used by the new domain/node APIs as well which manipulate URLs
returned by classloader.getResource() to open a directory or jar file
corresponding to a contribution. There are still some outstanding issues
with classloading in the new domain code, so I haven't been able to fully
test it under OSGi. But the code that I have run into problems with are in

org.apache.tuscany.sca.node.util.SCAContributionUtil.findContributionFromResource(ClassLoader
classLoader, String compositeString)

which only works with file:// or jar:// URLs (it is very similar to the code
used by the old DefaultSCADomain).

This method is invoked from

   1. SCADomainImpl to find the folder/jar containing domain.composite
   2. SCADomainProxyImpl to find the folder/jar containing node.composite
   3. SCANodeFactory.createNodeWithComposite(String composite)
   4. SCANodeLauncher.main()

1) and 2) in particular need to be fixed properly since they are internal to
Tuscany and it doesn't seem appropriate to expect applications to
override resource loading for the Tuscany runtime when Tuscany is installed
into OSGi.


Thank you...

Regards,

Rajini

On 1/11/08, Simon Nash <na...@hursley.ibm.com> wrote:
>
> The SCADomain.newInstance() method and the DefaultSCADomain class in
> host-embedded have been replaced by the domain and node APIs in
> domain-api and node-api.  However, most samples have not yet been
> converted to the new APIs.  For examples of samples that use the
> new APIs, see callback-ws-client, callback-ws-service and
> calculator-distributed.
>
> Do the same issues apply to the new APIs, or only when the old
> DefaultSCADomain class is used?
>
>   Simon
>
> Rajini Sivaram wrote:
>
> > SCADomain.newInstance(compositeName), which is used in many of the
> Tuscany
> > samples to create a DefaultSCADomain works only if
> > contextClassLoader.getResource(compositeName) returns a file:// or
> jar://
> > URL. This is broken when Tuscany is run under OSGi, since Apache Felix
> > returns a bundle:// URL and Equinox returns a bundleresource:// URL for
> the
> > composite. At the moment, existing samples can be run under an OSGi
> based
> > Tuscany only by using a custom classloader as the thread context
> > classloader, which returns file:// or jar:// URLs from its getResource
> > method, like Jason described(
> > http://marc.info/?l=tuscany-user&m=119559170431301&w=2).
> >
> > DefaultSCADomain determines the location of the SCA contribution
> relative to
> > the composite or sca-contribution.xml. This file is first loaded using
> > applicationClassLoader.getResource(), and root of the contribution
> folder or
> > jar file  is determined from the resource URL. Since bundle:// URLs dont
> > correspond to a folder or jar file, they are not correctly processed by
> > Tuscany. To fix this in Tuscany, we need a BundleContributionProcessor
> > similar to JarContributionProcessor (at the moment, artifacts from
> bundle
> > contributions are read using the JarContributionProcessor). The bundle
> > contribution processor should either 1) read the stream using the bundle
> URL
> > and use OSGi bundle API to read its artifacts or 2) find the actual file
> > location corresponding to the bundle and read it using the
> > JarContributionProcessor. Unfortunately, both of these require OSGi
> specific
> > code in the contribution processing logic.
> >
> > addContribution() methods for SCANode and SCADomain work with file://
> URLs
> > which specify bundle contributions, and these are resolved correctly
> using
> > OSGi. But at the moment, they cannot process bundle:// URLs. A proper
> fix
> > for DefaultSCADomain will also enable bundle:// or bundleresource://
> URLs to
> > be used in addContribution().
> >
> > Since this is a problem only when Tuscany is run under OSGi, and any fix
> > would require adding OSGi specific code into the contribution processing
> > code in Tuscany, I am not sure if this needs fixing in Tuscany, or the
> > workaround of overriding the context classloader is sufficient.
> >
> > Thoughts?
> >
> >
> >
> >
> > On 11/23/07, Peter Kriens <Pe...@aqute.biz> wrote:
> >
> >>I think it sounds very much like Felix Meschberger's conclusion.
> >>Converting URLs to strings and then back to URLs, which is not
> >>necessary and not guaranteed to work.
> >>
> >>Anyway, I'd like to know why someone needs to escape to Equinox hooks
> >>when it should work on standard OSGi level ...
> >>
> >>Kind regards,
> >>
> >>    Peter Kriens
> >>
> >>RS> Hi,
> >>
> >>RS> Tuscany supports OSGi bundle contributions which are currently
> loaded
> >>using
> >>RS> the Apache Felix OSGi runtime by default. These contributions can
> >>contain
> >>RS> composite files and other meta-data which are  loaded using OSGi and
> >>RS> passed around as URLs. Tests for OSGi contributions are run under
> >>Felix with
> >>RS> urlhandlers set, so we dont have any trouble with bundle:// URLs
> >>returned by
> >>RS> resources located using Felix (Tuscany calls openConnection and
> >>openStream
> >>RS> on these urls).
> >>
> >>RS> Are the Eclipse RCP apps run without an URL stream handler to handle
> >>RS> bundleresource:// URLs?
> >>
> >>
> >>RS> Thank you...
> >>
> >>RS> Regards,
> >>
> >>RS> Rajini
> >>
> >>RS> On 11/23/07, Felix Meschberger <fm...@gmail.com> wrote:
> >>
> >>>>Hi all,
> >>>>
> >>>>I don't think it is a bug in eclipse (just from the likeliness point
> of
> >>>>view). What I do not know is, what Tuscany does with the URLs
> returned.
> >>>>If they would just open a stream on the URL, there would be no issue
> at
> >>>>all, because the URls are backed by handlers supporting opening the
> >>>>streams.
> >>>>
> >>>>If on the other they convert the URls to Strings and later want to
> >>>>create URLs from the strings again, they are hosed. But I assume, this
> >>>>is then a bug/issue in Tuscany rather than in Eclipse. In fact, they
> >>>>might run into the same troubles with Felix or just about any
> >>>>framework...
> >>>>
> >>>>Regards
> >>>>Felix
> >>>>
> >>>>Am Freitag, den 23.11.2007, 08:55 +0000 schrieb Rob Walker:
> >>>>
> >>>>>Peter
> >>>>>
> >>>>>On a  very quick read thru this - tbh - it sounds like a bug/feature
> >>
> >>of
> >>
> >>>>>their OSGi implementation.
> >>>>>
> >>>>>I'm 99% sure we use classloader getResource() calls under Felix, and
> >>
> >>the
> >>
> >>>>>felix classloaders correctly resolve them to bundle URL references
> >>
> >>which
> >>
> >>>>>can then be used in a normal way. Pretty sure you need the URL
> >>
> >>handler
> >>
> >>>>>feature enabled, since I think as Jason points out the URL returned
> >>
> >>has
> >>
> >>>>>a custom protocol type that the specific framework implementation
> >>
> >>needs
> >>
> >>>>>to handle.
> >>>>>
> >>>>>A possible alternative may be for them to use getResourceAsStream()
> >>
> >>if
> >>
> >>>>>viable - since this will resolve the URL and open it for them.
> >>>>>
> >>>>>Regards
> >>>>>
> >>>>>-- Rob
> >>>>>
> >>>>>Peter Kriens wrote:
> >>>>>
> >>>>>>I noticed this mail:
> >>>>>>
> >>>>>>
> >>>>
> >>
> http://mail-archives.apache.org/mod_mbox/ws-tuscany-user/200711.mbox/%3C20071120203149.F334F4DA0A9@nike.apache.org%3E
> >>
> >>>>>>This is from the Tuscany project and seem to struggle with resource
> >>>>>>handling in OSGi. Anybody knows Jason Clark and can discuss this
> >>
> >>with
> >>
> >>>>>>him? As far as I can see, it can all be done with the bundle
> >>
> >>methods
> >>
> >>>>>>or by creating new URLs.
> >>>>>>
> >>>>>>Kind regards,
> >>>>>>
> >>>>>>   Peter Kriens
> >>>>>>
> >>>>>>
> >>>>>
> >>>>
> >>
> >>--
> >>Peter Kriens                              Tel +33467542167
> >>9C, Avenue St. Drézéry                    AOL,Yahoo: pkriens
> >>34160 Beaulieu, France                    ICQ 255570717
> >>Skype pkriens                             Fax +1 8153772599
> >>
> >>
> >
> >
> >
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: tuscany-user-unsubscribe@ws.apache.org
> For additional commands, e-mail: tuscany-user-help@ws.apache.org
>
>

Re: Eclipse RCP apps and Tuscany

Posted by Simon Nash <na...@hursley.ibm.com>.
The SCADomain.newInstance() method and the DefaultSCADomain class in
host-embedded have been replaced by the domain and node APIs in
domain-api and node-api.  However, most samples have not yet been
converted to the new APIs.  For examples of samples that use the
new APIs, see callback-ws-client, callback-ws-service and
calculator-distributed.

Do the same issues apply to the new APIs, or only when the old
DefaultSCADomain class is used?

   Simon

Rajini Sivaram wrote:

> SCADomain.newInstance(compositeName), which is used in many of the Tuscany
> samples to create a DefaultSCADomain works only if
> contextClassLoader.getResource(compositeName) returns a file:// or jar://
> URL. This is broken when Tuscany is run under OSGi, since Apache Felix
> returns a bundle:// URL and Equinox returns a bundleresource:// URL for the
> composite. At the moment, existing samples can be run under an OSGi based
> Tuscany only by using a custom classloader as the thread context
> classloader, which returns file:// or jar:// URLs from its getResource
> method, like Jason described(
> http://marc.info/?l=tuscany-user&m=119559170431301&w=2).
> 
> DefaultSCADomain determines the location of the SCA contribution relative to
> the composite or sca-contribution.xml. This file is first loaded using
> applicationClassLoader.getResource(), and root of the contribution folder or
> jar file  is determined from the resource URL. Since bundle:// URLs dont
> correspond to a folder or jar file, they are not correctly processed by
> Tuscany. To fix this in Tuscany, we need a BundleContributionProcessor
> similar to JarContributionProcessor (at the moment, artifacts from bundle
> contributions are read using the JarContributionProcessor). The bundle
> contribution processor should either 1) read the stream using the bundle URL
> and use OSGi bundle API to read its artifacts or 2) find the actual file
> location corresponding to the bundle and read it using the
> JarContributionProcessor. Unfortunately, both of these require OSGi specific
> code in the contribution processing logic.
> 
> addContribution() methods for SCANode and SCADomain work with file:// URLs
> which specify bundle contributions, and these are resolved correctly using
> OSGi. But at the moment, they cannot process bundle:// URLs. A proper fix
> for DefaultSCADomain will also enable bundle:// or bundleresource:// URLs to
> be used in addContribution().
> 
> Since this is a problem only when Tuscany is run under OSGi, and any fix
> would require adding OSGi specific code into the contribution processing
> code in Tuscany, I am not sure if this needs fixing in Tuscany, or the
> workaround of overriding the context classloader is sufficient.
> 
> Thoughts?
> 
> 
> 
> 
> On 11/23/07, Peter Kriens <Pe...@aqute.biz> wrote:
> 
>>I think it sounds very much like Felix Meschberger's conclusion.
>>Converting URLs to strings and then back to URLs, which is not
>>necessary and not guaranteed to work.
>>
>>Anyway, I'd like to know why someone needs to escape to Equinox hooks
>>when it should work on standard OSGi level ...
>>
>>Kind regards,
>>
>>    Peter Kriens
>>
>>RS> Hi,
>>
>>RS> Tuscany supports OSGi bundle contributions which are currently loaded
>>using
>>RS> the Apache Felix OSGi runtime by default. These contributions can
>>contain
>>RS> composite files and other meta-data which are  loaded using OSGi and
>>RS> passed around as URLs. Tests for OSGi contributions are run under
>>Felix with
>>RS> urlhandlers set, so we dont have any trouble with bundle:// URLs
>>returned by
>>RS> resources located using Felix (Tuscany calls openConnection and
>>openStream
>>RS> on these urls).
>>
>>RS> Are the Eclipse RCP apps run without an URL stream handler to handle
>>RS> bundleresource:// URLs?
>>
>>
>>RS> Thank you...
>>
>>RS> Regards,
>>
>>RS> Rajini
>>
>>RS> On 11/23/07, Felix Meschberger <fm...@gmail.com> wrote:
>>
>>>>Hi all,
>>>>
>>>>I don't think it is a bug in eclipse (just from the likeliness point of
>>>>view). What I do not know is, what Tuscany does with the URLs returned.
>>>>If they would just open a stream on the URL, there would be no issue at
>>>>all, because the URls are backed by handlers supporting opening the
>>>>streams.
>>>>
>>>>If on the other they convert the URls to Strings and later want to
>>>>create URLs from the strings again, they are hosed. But I assume, this
>>>>is then a bug/issue in Tuscany rather than in Eclipse. In fact, they
>>>>might run into the same troubles with Felix or just about any
>>>>framework...
>>>>
>>>>Regards
>>>>Felix
>>>>
>>>>Am Freitag, den 23.11.2007, 08:55 +0000 schrieb Rob Walker:
>>>>
>>>>>Peter
>>>>>
>>>>>On a  very quick read thru this - tbh - it sounds like a bug/feature
>>
>>of
>>
>>>>>their OSGi implementation.
>>>>>
>>>>>I'm 99% sure we use classloader getResource() calls under Felix, and
>>
>>the
>>
>>>>>felix classloaders correctly resolve them to bundle URL references
>>
>>which
>>
>>>>>can then be used in a normal way. Pretty sure you need the URL
>>
>>handler
>>
>>>>>feature enabled, since I think as Jason points out the URL returned
>>
>>has
>>
>>>>>a custom protocol type that the specific framework implementation
>>
>>needs
>>
>>>>>to handle.
>>>>>
>>>>>A possible alternative may be for them to use getResourceAsStream()
>>
>>if
>>
>>>>>viable - since this will resolve the URL and open it for them.
>>>>>
>>>>>Regards
>>>>>
>>>>>-- Rob
>>>>>
>>>>>Peter Kriens wrote:
>>>>>
>>>>>>I noticed this mail:
>>>>>>
>>>>>>
>>>>
>>http://mail-archives.apache.org/mod_mbox/ws-tuscany-user/200711.mbox/%3C20071120203149.F334F4DA0A9@nike.apache.org%3E
>>
>>>>>>This is from the Tuscany project and seem to struggle with resource
>>>>>>handling in OSGi. Anybody knows Jason Clark and can discuss this
>>
>>with
>>
>>>>>>him? As far as I can see, it can all be done with the bundle
>>
>>methods
>>
>>>>>>or by creating new URLs.
>>>>>>
>>>>>>Kind regards,
>>>>>>
>>>>>>   Peter Kriens
>>>>>>
>>>>>>
>>>>>
>>>>
>>
>>--
>>Peter Kriens                              Tel +33467542167
>>9C, Avenue St. Drézéry                    AOL,Yahoo: pkriens
>>34160 Beaulieu, France                    ICQ 255570717
>>Skype pkriens                             Fax +1 8153772599
>>
>>
> 
> 
> 



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


Re: Re[2]: Eclipse RCP apps and Tuscany

Posted by Rajini Sivaram <ra...@googlemail.com>.
SCADomain.newInstance(compositeName), which is used in many of the Tuscany
samples to create a DefaultSCADomain works only if
contextClassLoader.getResource(compositeName) returns a file:// or jar://
URL. This is broken when Tuscany is run under OSGi, since Apache Felix
returns a bundle:// URL and Equinox returns a bundleresource:// URL for the
composite. At the moment, existing samples can be run under an OSGi based
Tuscany only by using a custom classloader as the thread context
classloader, which returns file:// or jar:// URLs from its getResource
method, like Jason described(
http://marc.info/?l=tuscany-user&m=119559170431301&w=2).

DefaultSCADomain determines the location of the SCA contribution relative to
the composite or sca-contribution.xml. This file is first loaded using
applicationClassLoader.getResource(), and root of the contribution folder or
jar file  is determined from the resource URL. Since bundle:// URLs dont
correspond to a folder or jar file, they are not correctly processed by
Tuscany. To fix this in Tuscany, we need a BundleContributionProcessor
similar to JarContributionProcessor (at the moment, artifacts from bundle
contributions are read using the JarContributionProcessor). The bundle
contribution processor should either 1) read the stream using the bundle URL
and use OSGi bundle API to read its artifacts or 2) find the actual file
location corresponding to the bundle and read it using the
JarContributionProcessor. Unfortunately, both of these require OSGi specific
code in the contribution processing logic.

addContribution() methods for SCANode and SCADomain work with file:// URLs
which specify bundle contributions, and these are resolved correctly using
OSGi. But at the moment, they cannot process bundle:// URLs. A proper fix
for DefaultSCADomain will also enable bundle:// or bundleresource:// URLs to
be used in addContribution().

Since this is a problem only when Tuscany is run under OSGi, and any fix
would require adding OSGi specific code into the contribution processing
code in Tuscany, I am not sure if this needs fixing in Tuscany, or the
workaround of overriding the context classloader is sufficient.

Thoughts?




On 11/23/07, Peter Kriens <Pe...@aqute.biz> wrote:
>
> I think it sounds very much like Felix Meschberger's conclusion.
> Converting URLs to strings and then back to URLs, which is not
> necessary and not guaranteed to work.
>
> Anyway, I'd like to know why someone needs to escape to Equinox hooks
> when it should work on standard OSGi level ...
>
> Kind regards,
>
>     Peter Kriens
>
> RS> Hi,
>
> RS> Tuscany supports OSGi bundle contributions which are currently loaded
> using
> RS> the Apache Felix OSGi runtime by default. These contributions can
> contain
> RS> composite files and other meta-data which are  loaded using OSGi and
> RS> passed around as URLs. Tests for OSGi contributions are run under
> Felix with
> RS> urlhandlers set, so we dont have any trouble with bundle:// URLs
> returned by
> RS> resources located using Felix (Tuscany calls openConnection and
> openStream
> RS> on these urls).
>
> RS> Are the Eclipse RCP apps run without an URL stream handler to handle
> RS> bundleresource:// URLs?
>
>
> RS> Thank you...
>
> RS> Regards,
>
> RS> Rajini
>
> RS> On 11/23/07, Felix Meschberger <fm...@gmail.com> wrote:
> >>
> >> Hi all,
> >>
> >> I don't think it is a bug in eclipse (just from the likeliness point of
> >> view). What I do not know is, what Tuscany does with the URLs returned.
> >> If they would just open a stream on the URL, there would be no issue at
> >> all, because the URls are backed by handlers supporting opening the
> >> streams.
> >>
> >> If on the other they convert the URls to Strings and later want to
> >> create URLs from the strings again, they are hosed. But I assume, this
> >> is then a bug/issue in Tuscany rather than in Eclipse. In fact, they
> >> might run into the same troubles with Felix or just about any
> >> framework...
> >>
> >> Regards
> >> Felix
> >>
> >> Am Freitag, den 23.11.2007, 08:55 +0000 schrieb Rob Walker:
> >> > Peter
> >> >
> >> > On a  very quick read thru this - tbh - it sounds like a bug/feature
> of
> >> > their OSGi implementation.
> >> >
> >> > I'm 99% sure we use classloader getResource() calls under Felix, and
> the
> >> > felix classloaders correctly resolve them to bundle URL references
> which
> >> > can then be used in a normal way. Pretty sure you need the URL
> handler
> >> > feature enabled, since I think as Jason points out the URL returned
> has
> >> > a custom protocol type that the specific framework implementation
> needs
> >> > to handle.
> >> >
> >> > A possible alternative may be for them to use getResourceAsStream()
> if
> >> > viable - since this will resolve the URL and open it for them.
> >> >
> >> > Regards
> >> >
> >> > -- Rob
> >> >
> >> > Peter Kriens wrote:
> >> > > I noticed this mail:
> >> > >
> >> > >
> >>
> http://mail-archives.apache.org/mod_mbox/ws-tuscany-user/200711.mbox/%3C20071120203149.F334F4DA0A9@nike.apache.org%3E
> >> > >
> >> > > This is from the Tuscany project and seem to struggle with resource
> >> > > handling in OSGi. Anybody knows Jason Clark and can discuss this
> with
> >> > > him? As far as I can see, it can all be done with the bundle
> methods
> >> > > or by creating new URLs.
> >> > >
> >> > > Kind regards,
> >> > >
> >> > >    Peter Kriens
> >> > >
> >> > >
> >> >
> >>
> >>
>
>
> --
> Peter Kriens                              Tel +33467542167
> 9C, Avenue St. Drézéry                    AOL,Yahoo: pkriens
> 34160 Beaulieu, France                    ICQ 255570717
> Skype pkriens                             Fax +1 8153772599
>
>


-- 
Thank you...

Regards,

Rajini