Raymond Feng wrote:
Hi,
At that time, I was questioning the merit to introduce "remotable"
attribute in the composite to override the Java interface. Really, to
make the service remotable, the interface design has to take that into
consideration upfront, especially the data model (for example, DTO
instead of an Object).
The rationale for this is that some Java interfaces can't be modified to
add SCA annotations, perhaps because they're in some standard spec or a
pre-existing framework library. However, these interfaces may have been
designed to have remotable semantics (SCA didn't invent remotability!)
Simon
Thanks,
Raymond
On Sat, Feb 18, 2012 at 9:15 AM, Simon Laws <[email protected]
<mailto:[email protected]>> wrote:
On Fri, Feb 17, 2012 at 6:08 PM, Luciano Resende
<[email protected] <mailto:[email protected]>> wrote:
> On Fri, Feb 17, 2012 at 8:02 AM, Simon Laws
<[email protected] <mailto:[email protected]>> wrote:
>> In the OASIS spec you can override the remotable status of an
>> interface using the remotable flag on the interface element:
>>
>> <component name="HelloworldComponent">
>> <implementation.java class="sample.HelloworldImpl"/>
>> <service name="HelloworldImpl">
>> <interface.java interface="sample.Helloworld"
remotable="true"/>
>> <binding.ws/ <http://binding.ws/>>
>> </service>
>> </component>
>>
>> The idea is that when Helloworld looks like
>>
>> public interface Helloworld {
>> String sayHello(String name);
>> }
>>
>> You can use the flag to set the interface remotable. When
Helloworld looks like
>>
>> @Remotable
>> public interface Helloworld {
>> String sayHello(String name);
>> }
>>
>> Then you can't use the flag to unset it.
>>
>> There is a JIRA about this not working properly [1]. I've just been
>> looking at it. The problem is that we don't actually set remotable
>> based on this flag. This is a relatively straighforward thing to fix
>> but it leads to a question. In some of the databinding code
there are
>> tests for remotable which prevents further processing if an
interface
>> is not remotable. For example, DataBindingjavaInterfaceProcessor has
>>
>> public void visitInterface(JavaInterface javaInterface) throws
>> InvalidInterfaceException {
>> if (!javaInterface.isRemotable()) {
>> return;
>> }
>> List<Operation> operations = javaInterface.getOperations();
>> processInterface(javaInterface, operations);
>> }
>>
>> This will run during introspection which is before we get to the
>> stage, in the builders, where the component and component type
>> interfaces are compared and where it would be sensible to apply the
>> override. I can make it work if I let this databinding processing
>> happen for non-remote interfaces just in case someone decides to
>> override them. Can anyone see a downside other than the extra
>> processing time it takes to calculate the interface types?
>>
>>
>> [1] https://issues.apache.org/jira/browse/TUSCANY-3459
>>
>> Simon
>> --
>> Apache Tuscany committer: tuscany.apache.org
<http://tuscany.apache.org>
>> Co-author of a book about Tuscany and SCA: tuscanyinaction.com
<http://tuscanyinaction.com>
>
> It seems that there were some more issues around this (see [1])...
> I'll try to dig out some more and see if I can remember little more
> from when I was working on this in the past.
>
> [1] http://tuscany.markmail.org/thread/nfzvrtrgrkdhqfkp
>
> --
> Luciano Resende
> http://people.apache.org/~lresende
<http://people.apache.org/%7Elresende>
> http://twitter.com/lresende1975
> http://lresende.blogspot.com/
Ok, that's interesting Luciano. So I don't loose it I added a patch to
(https://issues.apache.org/jira/browse/TUSCANY-3459) with the changes
required to make the infrastructure apply the remotable override. It
passes all the tests we have active at the moment.
I don't really understand Raymond's comment "It seems to me that we
pretty much don't differentiate local and remote interfaces any more
with such changes" from the thread you linked to. It's not clear
whether this is a comment about the aesthetics of having a flag with
which to affect the remotable status of an interface or a comment
suggesting that the infrastructure relies on there being no
databinding set for local interfaces. I can have a look at some local
tests to see if there is any spurious databinding processing going on.
Simon
--
Apache Tuscany committer: tuscany.apache.org <http://tuscany.apache.org>
Co-author of a book about Tuscany and SCA: tuscanyinaction.com
<http://tuscanyinaction.com>