tuscany-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Raymond Feng" <enjoyj...@gmail.com>
Subject Re: Fwd: Problem with "implementation.osgi" reference
Date Tue, 23 Jun 2009 04:54:25 GMT
Hi,

I have fixed the issues and now they can be run directly from the "Run As Equinox" using Eclipse
PDE.

http://svn.apache.org/viewvc?rev=787381&view=rev
http://svn.apache.org/viewvc?rev=787383&view=rev
http://svn.apache.org/viewvc?rev=787517&view=rev

Thanks,
Raymond


From: Santiago Miguel Aranda Rojas 
Sent: Monday, June 22, 2009 12:14 PM
To: user@tuscany.apache.org 
Subject: Fwd: Problem with "implementation.osgi" reference






Yes.  

It is easy. 
1) You select option  Window/Preferences
2) Find Plugin development and Target Platform
3) Click in "Group plugin-ins by location"
4) You have to add apache tuscany modules directory
5) You should disable the other options "Eclipse plugins" in order to see more clear when
you run Equinox
6) Choose "Run As" and select Osgi Framework
7) Select all tuscany modules and run

You have to put the options in arguments tag about "boot framework delegation". I found this
in a osgi config file of your samples.

How do you develop your SCA services?? I mean what IDE are you using?? It very annoying use
only console in order to check SCA services that I am developing
  ----- Original Message ----- 
  From: Raymond Feng 
  To: user@tuscany.apache.org ; santiago.aranda@telvent.com 
  Sent: Monday, June 22, 2009 8:04 PM
  Subject: Re: Fwd: Problem with "implementation.osgi" reference


  How did you run it from Eclipse? Are you using Run as ... Equinox? 

  Thanks,
  Raymond 

  From: Santiago Miguel Aranda Rojas 
  Sent: Monday, June 22, 2009 3:10 AM
  To: user@tuscany.apache.org 
  Subject: Re: Fwd: Problem with "implementation.osgi" reference


   Hello


  It seems it is working now. I have launched Tuscany bundles outside and I have installed
TestService and Calculator bundle. I am using M3RC1 now. I have to do more tests but when
I invoke "add" method" using a external web client, Calculator receives the request and it
is able to invoke "sayHello" method from Osgi service that was published by TestService.


  But I can not use Eclipse in order to launch Tuscany and doing the same example. I know
what the error is. As I commented you Eclipse was having problems in order to detect SCA files
located in scr/main/java/resources/sca. I had to copy these files to the project´s root.
I think I have a similar error now. It is about contribution. 


  ***** When I use this code in order to register node in Eclipse. It works.


                     NodeFactory factory = NodeFactory.newInstance();
             String url = ContributionLocationHelper.getContributionLocation(getClass());
             Contribution contrib = new Contribution("c1", url);
             node = factory.createNode("OSGI-INF/sca/bundle.composite", contrib);
             node.start();


        This is a debug view of "read" method from "ContributionProcessor" class


           // Scan the contribution and list the artifacts contained in it
          List<Artifact> artifacts = contribution.getArtifacts();
          boolean contributionMetadata = false;
          List<String> artifactURIs = scanner.scan(contribution); --> Contribution
is Contribution : c1 
                                                                                 -->from:
file:/C:/TuscanyWorkspace2.03M/TestService/target/classes/




          for (String artifactURI: artifactURIs) {  --> [, es, es/amivital, es/amivital/testservice,
                                             es/amivital/testservice/Activator.class, es/amivital/testservice/TestService.class,
 es/amivital/testservice/TestServiceImpl.class, OSGI-INF, OSGI-INF/sca, OSGI-INF/sca/bundle.componentType,
OSGI-INF/sca/bundle.composite]
              URL artifactURL = scanner.getArtifactURL(contribution, artifactURI);


              // Add the deployed artifact model to the contribution
              Artifact artifact = this.contributionFactory.createArtifact();
              artifact.setURI(artifactURI);
              artifact.setLocation(artifactURL.toString());




            As you can see I put in bold letter the value of some variables. This is correct
and it is working.




  *****When I don´t use code in order to register node in Eclipse. It doesn´t works.


  This is a debug view of "read" method from "ContributionProcessor" class


           // Scan the contribution and list the artifacts contained in it
          List<Artifact> artifacts = contribution.getArtifacts();
          boolean contributionMetadata = false;
          List<String> artifactURIs = scanner.scan(contribution); --->Contribution
: TestService 
                                                                                         
---->from: bundleentry://46/




          for (String artifactURI: artifactURIs) {  --> [.classpath, .project, .settings/,
.settings/org.eclipse.jdt.core.prefs, .settings/org.maven.ide.eclipse.prefs, META-INF/, META-INF/MANIFEST.MF,
OSGI-INF/, OSGI-INF/.svn/, OSGI-INF/.svn/all-wcprops, OSGI-INF/.svn/entries, OSGI-INF/.svn/format,
OSGI-INF/.svn/prop-base/, OSGI-INF/.svn/props/, OSGI-INF/.svn/text-base/, OSGI-INF/.svn/text-base/calculator-component.xml.svn-base,
OSGI-INF/.svn/tmp/, OSGI-INF/.svn/tmp/prop-base/, OSGI-INF/.svn/tmp/props/, OSGI-INF/.svn/tmp/text-base/,
OSGI-INF/sca/, OSGI-INF/sca/.svn/, OSGI-INF/sca/.svn/all-wcprops, OSGI-INF/sca/.svn/entries,
OSGI-INF/sca/.svn/format, OSGI-INF/sca/.svn/prop-base/, OSGI-INF/sca/.svn/props/, OSGI-INF/sca/.svn/text-base/,
OSGI-INF/sca/.svn/text-base/bundle.componentType.svn-base, OSGI-INF/sca/.svn/text-base/bundle.composite.svn-base,
OSGI-INF/sca/.svn/tmp/, OSGI-INF/sca/.svn/tmp/prop-base/, OSGI-INF/sca/.svn/tmp/props/, OSGI-INF/sca/.svn/tmp/text-base/,
OSGI-INF/sca/bundle.componentType, OSGI-INF/sca/bundle.composite, pom.xml, src/, src/main/,
src/main/java/, src/main/java/es/, src/main/java/es/amivital/, src/main/java/es/amivital/testservice/,
src/main/java/es/amivital/testservice/Activator.java, src/main/java/es/amivital/testservice/TestService.java,
src/main/java/es/amivital/testservice/TestServiceImpl.java, src/main/resources/, src/main/resources/OSGI-INF/,
src/main/resources/OSGI-INF/.svn/, src/main/resources/OSGI-INF/.svn/all-wcprops, src/main/resources/OSGI-INF/.svn/entries,
src/main/resources/OSGI-INF/.svn/format, src/main/resources/OSGI-INF/.svn/prop-base/, src/main/resources/OSGI-INF/.svn/props/,
src/main/resources/OSGI-INF/.svn/text-base/, src/main/resources/OSGI-INF/.svn/text-base/calculator-component.xml.svn-base,
src/main/resources/OSGI-INF/.svn/tmp/, src/main/resources/OSGI-INF/.svn/tmp/prop-base/, src/main/resources/OSGI-INF/.svn/tmp/props/,
src/main/resources/OSGI-INF/.svn/tmp/text-base/, src/main/resources/OSGI-INF/sca/, src/main/resources/OSGI-INF/sca/.svn/,
src/main/resources/OSGI-INF/sca/.svn/all-wcprops, src/main/resources/OSGI-INF/sca/.svn/entries,
src/main/resources/OSGI-INF/sca/.svn/format, src/main/resources/OSGI-INF/sca/.svn/prop-base/,
src/main/resources/OSGI-INF/sca/.svn/props/, src/main/resources/OSGI-INF/sca/.svn/text-base/,
src/main/resources/OSGI-INF/sca/.svn/text-base/bundle.componentType.svn-base, src/main/resources/OSGI-INF/sca/.svn/text-base/bundle.composite.svn-base,
src/main/resources/OSGI-INF/sca/.svn/tmp/, src/main/resources/OSGI-... 
              URL artifactURL = scanner.getArtifactURL(contribution, artifactURI);


              // Add the deployed artifact model to the contribution
              Artifact artifact = this.contributionFactory.createArtifact();
              artifact.setURI(artifactURI);
              artifact.setLocation(artifactURL.toString());




            As you can see I put in bold letter the value of some variables. It is clear that
contribution is not right. ArtifactsUri variable has a lot of paths without sense. This problem
doesn´t exist outside Eclipse. Have you test your examples using Eclipse?? I think I have
to provide info about Contribution.


  I attach my test projects.




  Thank you






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











  2009/6/19 Raymond Feng <enjoyjava@gmail.com>

    Hi,

    Please see my comments inline.


    BTW, can you send your testcase?  I can point you what to fix. 


    Thanks,
    Raymond

    From: Santiago Miguel Aranda Rojas

    Sent: Friday, June 19, 2009 2:37 AM 

    To: user@tuscany.apache.org
    Subject: Re: Fwd: Problem with "implementation.osgi" reference



    Hello.


    I have downloaded M3RC1 but I have the same errors. I can not run this in Eclipse but
I think it is my problem. I run this distribution outside of Eclipse and all modules are running.
But when I try to run my TestService bundle I have an error


    GRAVE: org.oasisopen.sca.ServiceRuntimeException: Deployment composite OSGI-INF/
    sca/bundle.composite cannot be found within contribution bundleentry://181/
    java.lang.IllegalStateException: org.oasisopen.sca.ServiceRuntimeException: Depl
    oyment composite OSGI-INF/sca/bundle.composite cannot be found within contributi
    on bundleentry://181/


    <rfeng>The isSCABundle() checking is too relaxed. We should check the existence
of OSGI-INF/sca/bundle.composite or SCA-Composite header instead of any files under OSGI-INF/sca.
I'm checking in a fix soon.</rfeng> 


    I think composite.file is always compulsory. It is not enough with bunde.componentType
as you said. Well, I put one composite file in order to test it


    <rfeng>Please don't add the composite file if you already have the OSGi component
defined in the calculator.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/TestService/src/main/resources/TestService">

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


    <rfeng>You have the wrong namespace for implementation.osgi. It should be xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.1"
and tuscany:implementation.osgi.</rfeng>

    and I have a new error. I guess tuscany doesn4t like "implementation.osgi" componenents.
When I used 2.02M I had another different error. 



    ADVERTENCIA: Element {http://docs.oasis-open.org/ns/opencsa/sca/200903}implement
    ation.osgi cannot be processed. ([row,col {unknown-source}]: [4,5])
    19-jun-2009 11:05:01 org.apache.tuscany.sca.contribution.processor.ExtensibleStA
    XArtifactProcessor
    ADVERTENCIA: Element {http://docs.oasis-open.org/ns/opencsa/sca/200903}implement
    ation.osgi cannot be processed. ([row,col {unknown-source}]: [4,5])
    19-jun-2009 11:05:01 org.apache.tuscany.sca.assembly.builder.impl.ComponentConfi
    gurationBuilderImpl
    GRAVE: No implementation for component: Component = TestServiceComponent
    19-jun-2009 11:05:01 org.apache.tuscany.sca.assembly.builder.impl.CompositeBindi
    ngURIBuilderImpl
    GRAVE: No implementation for component: Component = TestServiceComponent
    19-jun-2009 11:05:01 org.apache.tuscany.sca.node.osgi.impl.NodeManager bundleSta
    rted
    GRAVE: org.oasisopen.sca.ServiceRuntimeException: No implementation for componen
    t: Component = TestServiceComponent
    java.lang.IllegalStateException: org.oasisopen.sca.ServiceRuntimeException: No i
    mplementation for component: Component = TestServiceComponent




    Besides, I think I will not be able to wire one SCA component osgi with other SCA component
java so I want to try other thing. I know tuscany is using its own ClassLoader in order to
load classes it needs. But my original problem was I can not share a instance of a Singleton
Class between one object loaded by default osgi ClassLoader and other object loaded tuscany
ClassLoader.



    <rfeng>If your SCA contribution is packaged as OSGi bundles, the classes will be
loaded by OSGi. You just need to have the correct Import-Package/Export-Package.</rfeng>



    1) I create an instance of one Class that is not modeled with Tuscany
    2) I have other Class that will be a Singleton. Only there will be one instance of this
class
    3) I recover the instance of Singleton class from the instance of step 1
    4) A CalculatorImpl instance is created when someone invoke a method from WS (this is
a class modeled with Tuscany)
    5) CalculatorImpl should recover the same instance of Singleton class


    But CalculatorImpl and class of step 1 were loaded by different classLoaders so they will
load the Singleton Class twice. So They will have different instances of Singleton class although
it was a singleton.











    2009/6/18 Santiago Miguel Aranda Rojas <santiago.aranda.telvent@gmail.com>

    Well I will try M3RC1 tomorrow. I hope fix some errors with that

    Thank you




    ----- Original Message ----- From: Raymond Feng
    To: user@tuscany.apache.org ; santiago.aranda@telvent.com
    Sent: Thursday, June 18, 2009 5:47 PM
    Subject: Re: Fwd: Problem with "implementation.osgi" reference


    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: user@tuscany.apache.org
    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 <enjoyjava@gmail.com>

    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: santiago.aranda@telvent.com

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

    To: user@tuscany.apache.org

    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" <enjoyjava@gmail.com>
    "Raymond Feng"
    15/06/2009 18:36
    Para: <user@tuscany.apache.org>, <santiago.aranda@telvent.com>
    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: user@tuscany.apache.org
    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 <enjoyjava@gmail.com>

    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: user@tuscany.apache.org
    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 <enjoyjava@gmail.com>

    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: user@tuscany.apache.org
    Subject: Re: Problem with "implementation.osgi" reference


    Tuscany 2.02M. The last version I think. April 2009
    ----- Original Message ----- From: Raymond Feng
    To: user@tuscany.apache.org
    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: santiago.aranda@telvent.com
    Sent: Tuesday, June 09, 2009 9:15 AM
    To: user@tuscany.apache.org
    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 . 



Mime
View raw message