[
https://issues.apache.org/jira/browse/TUSCANY-3683?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Sebastian Millies updated TUSCANY-3683:
---------------------------------------
Attachment: DefaultRMIHost.patch
Patch for DefaultRMIHost.java
> Service with RMI Binding cannot be promoted
> -------------------------------------------
>
> Key: TUSCANY-3683
> URL: https://issues.apache.org/jira/browse/TUSCANY-3683
> Project: Tuscany
> Issue Type: Bug
> Affects Versions: Java-SCA-1.6
> Environment: JDK 1.6.0_21, Windows XP
> Reporter: Sebastian Millies
> Priority: Minor
> Attachments: DefaultRMIHost.patch
>
>
> A service with an RMI binding cannot be promoted, because when the binding
> for the promoted service is processed, the Tuscany CompositeActivatorImpl
> attempts to start the RMIServiceBindingProvider a second time, which leads to
> the DefaultRMIHost wanting to bind the service under the same name in the RMI
> registry, which produces an AlreadyBoundException.
> Here's a snippet from the composite.xml:
> <?xml version="1.0" encoding="UTF-8" standalone="no"?> <composite
> xmlns="http://www.osoa.org/xmlns/sca/1.0"
> xmlns:ts="http://tuscany.apache.org/xmlns/sca/1.0" name="logger_composite"
> targetNamespace="http://ps.softwareag.com/">
> <component name="SLF4JAdapterComponent">
> <implementation.java
> class="com.softwareag.ps.platform.logadapter.impl.SLF4JAdapterImpl"/>
> <service name="LogAdapterService">
> <interface.java
> interface="com.softwareag.ps.platform.logadapter.LogAdapterService"/>
> <binding.sca/>
> <ts:binding.rmi host="localhost" port="1099"
> serviceName="LogAdapterServiceRMI"/> <!-- *** -->
> </service>
> </component>
> <service name="SLF4JLogAdapterService"
> promote="SLF4JAdapterComponent/LogAdapterService"/> <!-- *** -->
> </composite>
> The error occurs when the composite with the promoted binding is activated in
> isolation, independent of whether it is used as a component implementation.
> The service name that is registered twice in the rmiregistry is the
> serviceName attribute of the binding.rmi element, in this case
> "LogAdapterServiceRMI". (Note that this rmiregistry name is not the same as
> the service name.)
> One way to work around the error would be to provide an explicit RMI binding
> for the promoted service using a new RMI-name, e. g.:
> <service name="SLF4JLogAdapterService"
> promote="SLF4JAdapterComponent/LogAdapterService">
> <ts:binding.rmi host="localhost" port="1099"
> serviceName="PromotedLogAdapterServiceRMI"/>
> </service>
> But this seems somewhat counterintuitive - if no binding is specified for a
> promoted service, the binding for the component service should simply be
> taken from the original service definition.
> I propose a patch in
> org.apache.tuscany.sca.host.rmi.DefaultRMIHost#registerService(String, int,
> Remote). This method currently uses
> registry.bind(serviceName, serviceObject), instead it should use
> registry.rebind(serviceName, serviceObject). This avoids the error.
> However, I do not know if there was a good reason for this method to use the
> bind-method in the first place.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.