Which level of the Tuscany 2.x code are you using? The various issues you ran 
into seem to have been fixed before. Can you try our M3 RC1?

http://people.apache.org/~antelder/tuscany/2.0-M3-RC1/

Thanks,
Raymond

 
From: Santiago Miguel Aranda Rojas 
Sent: Thursday, June 18, 2009 3:05 AM
To: [email protected] 
Subject: Re: Fwd: Problem with "implementation.osgi" reference


I am checking your comments. I can not remove bundle.composite file from 
TestService bundle because tuscany is not working without this file.


I have this


Caused by: java.lang.NullPointerException
at 
org.apache.tuscany.sca.node.osgi.impl.NodeFactoryImpl.configureNode(NodeFactoryImpl.java:440)
at 
org.apache.tuscany.sca.node.osgi.impl.NodeFactoryImpl.access$2(NodeFactoryImpl.java:351)
at 
org.apache.tuscany.sca.node.osgi.impl.NodeFactoryImpl$NodeImpl.<init>(NodeFactoryImpl.java:574)


and the source code about this line is


 if (composite == null) {
            composite = getDefaultComposite(configuration, workspace);
        }


        // Find the composite in the given contributions
        boolean found = false;
        Artifact compositeFile = contributionFactory.createArtifact();
        compositeFile.setUnresolved(true);
        compositeFile.setURI(composite.getURI());
        for (Contribution contribution : workspace.getContributions()) {
            ModelResolver resolver = contribution.getModelResolver();
            //            for (Artifact artifact : contribution.getArtifacts()){
            //                logger.log(Level.INFO,"artifact - " + 
artifact.getURI());
            //            }
            Artifact resolvedArtifact = resolver.resolveModel(Artifact.class, 
compositeFile);
            //            if (!resolvedArtifact.isUnresolved() && 
resolvedArtifact.getModel() instanceof Composite) {


            if (!composite.isUnresolved()) {  ---> This is line 440


                // The composite content was passed into the node and read into 
a composite model,
                // don't use the composite found in the contribution, use that 
composite, but just resolve
                // it within the context of the contribution
                compositeProcessor.resolve(composite, resolver);


            } else {


                // Use the resolved composite we've found in the contribution
                composite = (Composite)resolvedArtifact.getModel();
            }
            found = true;
            //            break;
            //          }
        }




I guess composite variable is not null in the first iteration. But it is null 
when composite = (Composite)resolvedArtifact.getModel(); is executed. So I 
guess is another problem related with "contribution" because there is a comment 
about that "// Use the resolved composite we've found in the contribution"


Besides, while I fix these things I am going to use java code in order to 
register the SCA node. I have checked all your comments about bundle.composite 
and bundle.componentType at TestService and Calculator bundle. When I invoke to 
a method of CalculatorService with a WS client I have another problem. 


This code of CalculatorServiceImpl


public class CalculatorServiceImpl implements CalculatorService {
private AddService addService;
private TestService testService;


       public int add(int param1, int param2) {
System.out.println (testService.sayHello());  --> I have an error when this 
line is executed
return addService.add(param1, param2);
}




public AddService getAddService() {
return addService;
}


@Reference
public void setAddService(AddService addService) {
this.addService = addService;
}


public TestService getTestService() {
return testService;
}


@Reference
public void setTestService(TestService testService) {
this.testService = testService;
}
}




This is the error . The testService instance is not null but it is not wired to 
TestService.  I have registered the Osgi Service registry using this code in 
the Activator of TestService bundle. I think this is neccesary.


arg0.registerService(TestService.class.getName(), new TestServiceImpl(), null); 
 






Caused by: org.oasisopen.sca.ServiceUnavailableException: Unable to create SCA 
binding invoker for local target CalculatorComponent reference testService 
(bindingURI=null operation=sayHello)
at 
org.apache.tuscany.sca.binding.sca.provider.RuntimeSCAReferenceBindingProvider.createInvoker(RuntimeSCAReferenceBindingProvider.java:200)






---------------------------------------------





2009/6/17 Raymond Feng <[email protected]>

  Hi,

  Please see my comments inline.

  Thanks,
  Raymond 


  ------------------------------------
  BUNDLE CALCULATOR
  ------------------------------------
  *****OSGI-INF/sca/bundle.composite. Two java components (Calculator and 
AddService) and one OSGi component (TestService)


  <rfeng>This is good.</rfeng> 



  <sca:composite xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.1"; 
xmlns:sca="http://docs.oasis-open.org/ns/opencsa/sca/200903"; 
name="SensorNetworkManagement" 
targetNamespace="http://eclipse.org/SensorNetworkManagement/src/main/resources/SensorNetworkManagement";>

   <sca:component name="CalculatorComponent">
    <sca:implementation.java 
class="es.amivital.calculatorservice2.CalculatorServiceImpl"/>
     <sca:service name="CalculatorService">
   <sca:binding.ws uri="http://localhost:8085/CalculatorComponent"/>
     </sca:service>

     <sca:reference name="addService" target="AddServiceComponent"/>
     <sca:reference name="testService" 
target="TestServiceComponent/TestService"/>
   </sca:component>


   <sca:component name="AddServiceComponent">
    <sca:implementation.java 
class="es.amivital.calculatorservice2.AddServiceImpl"/>
   </sca:component>

   <sca:component name="TestServiceComponent">
   <sca:implementation.osgi bundleSymbolicName="TestService" 
bundleVersion="1.0.0"/>
   </sca:component>
  </sca:composite>




  *******OSGI-INF/sca/bundle.componentType

  <rfeng>You don't need to provide this file. The componentType is only needed 
for the OSGi component.</rfeng> 



  <componentType xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200903";
               xmlns:xsd="http://www.w3.org/2001/XMLSchema";
               xmlns:t="http://tuscany.apache.org/xmlns/sca/1.1";>
    <!-- The service elment defines an SCA view of the OSGi service -->
    <service name="CalculatorService">
        <!-- The interface will be mapped into the OSGi service class -->
        <interface.java 
interface="es.amivital.calculatorservice2.CalculatorService"/>
        <!-- The list of OSGi properties -->

    </service>
  </componentType>

  -----------------------------------
  BUNDLE TESTSERVICE
  -------------------------------------


  *******OSGI-INF/sca/bundle.componentType

  <rfeng>This is good.</rfeng> 



  <componentType xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200903";
               xmlns:xsd="http://www.w3.org/2001/XMLSchema";
               xmlns:t="http://tuscany.apache.org/xmlns/sca/1.1";>
    <!-- The service elment defines an SCA view of the OSGi service -->
    <service name="TestService">
        <!-- The interface will be mapped into the OSGi service class -->
        <interface.java interface="es.amivital.testservice.Test"/>
        <!-- The list of OSGi properties -->

    </service>
  </componentType>


  *****OSGI-INF/sca/bundle.composite

  <rfeng>This should be removed as the TestServiceComponent has been declared 
in the calculator bundle composite.</rfeng> 


  <sca:composite xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.1"; 
xmlns:sca="http://docs.oasis-open.org/ns/opencsa/sca/200903"; 
name="SensorNetworkManagement" 
targetNamespace="http://eclipse.org/SensorNetworkManagement/src/main/resources/SensorNetworkManagement";>

   <sca:component name="TestServiceComponent">
   <sca:implementation.java class="es.amivital.testservice.TestImpl"/>
   </sca:component>
  </sca:composite>



  It is necessary to have a bundle.composite file in TestService?? and 
bundle.componentType?? Can I remove these files from TestService bundle and put 
the TestService4s bundle.componentType in the Calculator bundle. You said 
"Alternatively, you have place the file as 
OSGI-INF/sca/<bundleSymbolicName>/bundle.componentType in the calculator 
bundle." Do you mean I can copy TestService4s bundle.componentType into a 
CalculatorService bundle?

  <rfeng>Yes</rfeng> 



  Thank you very much
  -------------------------------------------------------------------





  Tuscany checks the OSGi bundle based on one of the following patterns:
  * An "SCA-Composite" header in the MANIFEST.MF. It points to an SCA composite 
file within the bundle.
  * Any files under OSGI-INF/sca.

  In your case, the first bundle contains three java components. The second 
bundle contains one OSGi component.  There are a few options to get them work 
together (CalculatorService with a reference to TestService).

  Option 1:
  1) Place bundle.composite under OSGI-INF/sca in the calculator bundle. The 
composite contains 4 components: 3 java components and 1 OSGi component.
  The @target for CalculatorService component's testService reference will be 
TestService/<serviceName>.

  2) Place bundle.componentType under OSGI-INF/sca in the test service bundle.
  Alternatively, you have place the file as 
OSGI-INF/sca/<bundleSymbolicName>/bundle.componentType in the calculator bundle.

  In this case, we are going to start one Node.

  Option 2:
  1) Place bundle.composite under OSGI-INF/sca in the calculator bundle. The 
composite contains 3 java components
  2) Place bundle.composite under OSGI-INF/sca in the test service bundle. The 
composite contains 1 OSGi component.
  3) Place bundle.componentType under OSGI-INF/sca in the test service bundle.

  In this case, we are going to start two nodes. You can configure the 
CalculatorService.testService reference and the OSGi service to use the same 
binding (such as RMI, or WS) to communicate. Make sure the interface is 
remotable. binding.sca is not working yet.

  Thanks,
  Raymond


  From: [email protected]

  Sent: Tuesday, June 16, 2009 1:33 AM

  To: [email protected]

  Subject: Re: Fwd: Problem with "implementation.osgi" reference




  So, I have to attach two files (componentType and composite) to my two 
different bundles (TestService and Calculator) and model it as 
"implementation.osgi".   I have TestService in a bundle I will add these two 
file and I will design as "implementation.osgi" .

  But Calculator Service (this is in other bundle) has three components and 
they are all "implementation.java" and it is working OK. How can I put a 
reference to TestService?? Do I need change "implementation.osgi" in 
CalculatorComponent instead "implementation.java"? and is it neccesary for 
AddServiceComponent and SubstractService??

  I will try a example I will copy my files in the email.

  Thank you very much

  Un saludo.
  Santiago Miguel Aranda Rojas
  Telvent Interactiva
  Extension: 35999
  Telefono: 955637418


  "Raymond Feng" <[email protected]>
  "Raymond Feng"
  15/06/2009 18:36
  Para: <[email protected]>, <[email protected]>
  cc:
  Asunto: Re: Fwd: Problem with "implementation.osgi" reference




  To access an OSGi service from the SCA component, you will have to provide
  SCA configurations for the OSGi bundle so that it becomes an SCA component
  using implementation.osgi and the OSGi service becomes an SCA service so
  that the Calculator component can wire to that TestService.

  There are two SCA files you to provide to model the OSGi bundle as an SCA
  component.
  * bundle.componentType to describe what OSGi services or references are used
  in the bundle (We potentially have better approach to introspect the OSGi
  bundle to build this up)
  * bundle.composite to configure the component, for example, setting the
  bindings.

  These files can be in a separate OSGi bundle than the one that owns the
  services/references.

  Thanks,
  Raymond

  From: Santiago Miguel Aranda Rojas
  Sent: Monday, June 15, 2009 4:01 AM
  To: [email protected]
  Subject: Fwd: Problem with "implementation.osgi" reference






  Hi


  I can not understand this sample because there are many new concepts for me.
  For example "bundle.componentType". There is not too much information about
  that . I think I need something more simple. I have attached a picture with
  my idea.


  ** When my SCA service was working I had a main component
  "implementacion.java" with two references to another two components
  (implementation.java). The main component could be invoked as Web Service.


  ** Now, I want another reference to a Service (TestService in the picture)
  that was registered by another different bundle. But this is a OSGi bundle,
  without SCA information, Composite file nor ComponentType file. I mean it is
  a bundle that is registering a service in the OSGi registry. I need have a
  instance wired to this OSGi service in the class of the main Component in
  order to invoke their methods.


  TestService testService;


  //I need testService is not null in order to invoke their methods.
  testService.sayHello();




  I hope you can understand my problem. You can ask me if you want.


  Thank you very mucha

















  2009/6/10 Raymond Feng <[email protected]>

  Please see:

  https://svn.apache.org/repos/asf/tuscany/java/sca/samples/dosgi-calculator/
  
https://svn.apache.org/repos/asf/tuscany/java/sca/samples/dosgi-calculator-operations/

  
http://cwiki.apache.org/confluence/display/TUSCANYWIKI/OSGi+RFC+119+Implementation

  Thanks,
  Raymond


  From: Santiago Miguel Aranda Rojas
  Sent: Wednesday, June 10, 2009 12:07 AM
  To: [email protected]
  Subject: Re: Problem with "implementation.osgi" reference


  Yes, you are right. I was doing some different tests and I copied you a
  wrong composite. I wanted to see if the change of @target made an error in
  tuscany.  But Tuscany doesn4t recognize this error because I think it
  supposes that will be a "remote Component". I can see this in the tuscany
  trace


  ADVERTENCIA: Component reference target not found, it might be a remote
  service running elsewhere in the SCA Domain: Composite =
  
{http://eclipse.org/SensorNetworkManagement/src/main/resources/SensorNetworkManagement}SensorNetworkManagement
  Service = PruebaComponent



  But it is Ok, because the component I want if an Osgi Service registered in
  the Osgi registry.
  I have fixed the error in @target and it is not working yet.


  Do you know any example when an <implementation.osgi> component is used?




  I have tried to change  "xmlns" tag, but it doesn4t work.


  <sca:component name="PruebaComponent">
     <sca:implementation.osgi
  xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200903";
          bundleSymbolicName="RegistroService"
          bundleVersion="1.0.0">
         <sca:properties service="prueba.PruebaImpl">
         </sca:properties>
     </sca:implementation.osgi>
   </sca:component>


  Thank you very much.



  2009/6/10 Raymond Feng <[email protected]>

  The @target is pointing to a wrong componentName/serviceName. It should be
  "Prueba" instead of "PruebaComponent" as the component name is "Prueba".


  From: Santiago Miguel Aranda Rojas
  Sent: Tuesday, June 09, 2009 1:28 PM
  To: [email protected]
  Subject: Re: Problem with "implementation.osgi" reference


  Tuscany 2.02M. The last version I think. April 2009
  ----- Original Message ----- From: Raymond Feng
  To: [email protected]
  Sent: Tuesday, June 09, 2009 7:12 PM
  Subject: Re: Problem with "implementation.osgi" reference


  Are you using Tuscany/SCA 2.x or 1.x?


  From: [email protected]
  Sent: Tuesday, June 09, 2009 9:15 AM
  To: [email protected]
  Subject: Problem with "implementation.osgi" reference



  Hello

  I want to use an osgi service as a SCA component. But I can not access to
  their methods from other Component.  I mean I have created a wired instance
  to the Osgi Service ($Proxy25). It is not "null" but I can not invoke to one
  method because an error is happening

  --->Unable to create SCA binding invoker for local target
  SensorNetworkManagementComponent reference prueba (bindingURI=null
  operation=sayHello)

  This is my composite file. I want to have to two components. The first had a
  reference to the second and it is normal "implementation.java". The second
  is the SCA component that is representing to the Osgi Service that I want to
  recover. This Osgi Service was registered in the Osgi registry by Activator
  class in "RegistroService" bundle.

  <sca:component name="SensorNetworkManagementComponent">
  <sca:implementation.java
  
class="es.amivital.sensornetworkmanagement.sca.SensorNetworkManagementServiceImpl"/>
  <sca:service name="SensorNetworkManagementService">
   <sca:binding.ws
  uri="http://localhost:8085/SensorNetworkManagementComponent"/>
  </sca:service>
  <sca:reference name="prueba" target="PruebaComponent"/>
  </sca:component>


  <sca:component name="Prueba">
     <sca:implementation.osgi
  xmlns="http://tuscany.apache.org/xmlns/sca/1.0";
          bundleSymbolicName="RegistroService"
          bundleVersion="1.0.0">
         <sca:properties service="prueba.PruebaImpl">
         </sca:properties>
     </sca:implementation.osgi>
  </sca:component>

  ***The Java code--> The first component.

  public class SensorNetworkManagementServiceImpl  implements
  SensorNetworkManagementService {
  private Prueba prueba;
  public Prueba getPrueba() {
  return prueba;
  }
  @Reference
  public void setPrueba(Prueba prueba) {
  this.prueba = prueba;
  }
  }

  **Java code       --> The second component. It is another bundle that is
  registering one simple Osgi Service. The interface was

  public interface Prueba {
  public abstract String sayHello();

  }





  This instance (prueba) is not null when an outside client invoke to the
  first component. But if I invoke to one method of this interface, for
  example "prueba.sayHello" I obtained the previous error.

  I have read something about anottations like @AllowsPassByReference or
  @Scope, but I don4t know if they are neccesary . 

Reply via email to