jiangjian wrote:
Hi.
I'm using Tuscany1.6 to develope several component. I always got the error:
org.osoa.sca.ServiceUnavailableException: Unable to create SCA binding invoker 
for local target User reference roleManager (bindingURI=Permission 
operation=add)
at 
org.apache.tuscany.sca.binding.sca.impl.RuntimeSCAReferenceBindingProvider.createInvoker(RuntimeSCAReferenceBindingProvider.java:215)
at 
org.apache.tuscany.sca.core.assembly.RuntimeWireImpl.addReferenceBindingInterceptor(RuntimeWireImpl.java:329)
at 
org.apache.tuscany.sca.core.assembly.RuntimeWireImpl.initInvocationChains(RuntimeWireImpl.java:208)
at 
org.apache.tuscany.sca.core.assembly.RuntimeWireImpl.getInvocationChains(RuntimeWireImpl.java:118)
at 
org.apache.tuscany.sca.core.assembly.EndpointWireImpl.getInvocationChains(EndpointWireImpl.java:120)
at 
org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.getInvocationChain(JDKInvocationHandler.java:298)
at 
org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke(JDKInvocationHandler.java:188)
at $Proxy35.get(Unknown Source)
at 
com.nodeservice.framework.adapter.user.permission.RoleManagerAdapter4User.getRoleListByUserId(RoleManagerAdapter4User.java:29)
at 
com.nodeservice.framework.users.service.UsersManagerImpl.getUserByUserNameandpwd(UsersManagerImpl.java:319)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at 
org.apache.tuscany.sca.implementation.spring.invocation.SpringInvoker.doInvoke(SpringInvoker.java:97)
at 
org.apache.tuscany.sca.implementation.spring.invocation.SpringInvoker.invoke(SpringInvoker.java:113)
at 
org.apache.tuscany.sca.binding.sca.impl.SCABindingInvoker.invoke(SCABindingInvoker.java:61)
at 
org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke(JDKInvocationHandler.java:349)
at 
org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke(JDKInvocationHandler.java:193)
at $Proxy32.getUserByUserNameandpwd(Unknown Source)
*Here is the .Composite file:* All of the components in my projects implemented using spring. *crucian-user.composite* :
<component name="User">
<implementation.spring 
location="META-INF/sca-deployables/applicationContext-user.xml"></implementation.spring>
         <service name="usersManager">
<interface.java interface="com.nodeservice.framework.users.IUsersManager"/>
        </service>
        <reference name="sessionFactory" target="Model" />
        <reference name="organizationManager" target="Organization" />
        <reference name="roleManager" target="Permission" />
</component>
*crucian-permission.composite:*
<component name="Permission">
<implementation.spring 
location="META-INF/sca-deployables/applicationContext-permission.xml"></implementation.spring>
        <service name="permissionManager">
<interface.java interface="com.nodeservice.framework.permission.IPermissionManager"/>
        </service>
        <service name="resourceManager">
<interface.java interface="com.nodeservice.framework.resource.IResourceManager"/>
        </service>
        <service name="roleManager">
<interface.java interface="com.nodeservice.framework.role.IRoleManager"/>
        </service>
</component>
I debuged the error and found the error is because the "service" is null in RuntimeSCAReferenceBindingProvider.
            RuntimeComponentService service = 
(RuntimeComponentService)target.getContract();
            if (*service != null*) { // not a callback wire
                SCABinding scaBinding = service.getBinding(SCABinding.class);
                InvocationChain chain =
                    service.getInvocationChain(scaBinding, 
wire.getSource().getInterfaceContract(), operation);
                return chain == null ? null : new SCABindingInvoker(chain);
            }
But I don't know how to correct it. Does anybody know why?
Thanks,
2011-02-06
------------------------------------------------------------------------
jiangjian
>
The problem might be in this line:
   <reference name="roleManager" target="Permission" />

You have given the Permission component as the target of the reference,
but you haven't said which service in this component should be used.
In this case, SCA will choose a default service if and only if there is
exactly one service in this component with a compatible interface.

If the component doesn't have a service with a compatible interface, or
if it has more than one service with a compatible interface, SCA won't
be able to connect the reference to the service.

You can find out if this is the cause of the problem by adding the
service name to the reference target.  For example, you can specify:
   <reference name="roleManager" target="Permission/roleManager" />
if you want the roleManager service to be the target.

  Simon

Reply via email to