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 Wed, 17 Jun 2009 21:32:02 GMT
Please see my comments inline.

From: Santiago Miguel Aranda Rojas 
Sent: Wednesday, June 17, 2009 3:02 AM
To: user@tuscany.apache.org ; miguel.luna@telvent.com 
Subject: Re: Fwd: Problem with "implementation.osgi" reference

I have checked and I don´t need to write code in order to register SCA node. 

Tuscany is trying to register the node with both options
* With "SCA-Composite: true" in the manifest.mf 

<rfeng>The value should be a path to the composite file within the bundle</rfeng>

* Without SCA-Composite header but with a OSGI-INF/sca directory.

The second option has a problem using Eclipse. I have seen the source code of NodeManager.java
and "isSCABundle" method. bundle.findEntries("OSGI-INF/sca", "*", false) is not working correctly
in Eclipse because tries to find these files in /OSGI-INF/sca but they are really in /src/main/resources/OSGI-INF/sca.
When I pack the bundle into a jar I have the right structure. But it is not important. I have
copied this structure into the root of my Eclipse project.

<rfeng>Good catch.</rfeng>

I have a new error with both options. Tuscany recognizes the bundle as SCA bundle but 

17-jun-2009 11:41:01 org.apache.tuscany.sca.node.osgi.impl.NodeFactoryImpl configureNode
INFO: Loading contribution: bundleentry://33/
Could not load resource META-INF/maven/es.amivital.calculatorservice2/CalculatorService3/pom.properties

<rfeng>This is really strange.</rfeng>

17-jun-2009 11:41:01 org.apache.tuscany.sca.node.osgi.impl.NodeManager bundleStarted
GRAVE: java.lang.NullPointerException
org.oasisopen.sca.ServiceRuntimeException: java.lang.NullPointerException
at org.apache.tuscany.sca.node.osgi.impl.NodeFactoryImpl$NodeImpl.<init>(NodeFactoryImpl.java:579)
at org.apache.tuscany.sca.node.osgi.impl.NodeFactoryImpl$NodeImpl.<init>(NodeFactoryImpl.java:562)
at org.apache.tuscany.sca.node.osgi.impl.NodeFactoryImpl.createNode(NodeFactoryImpl.java:506)
at org.apache.tuscany.sca.node.osgi.impl.NodeManager.bundleStarted(NodeManager.java:96)
at org.apache.tuscany.sca.node.osgi.impl.NodeManager.bundleChanged(NodeManager.java:119)
at org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:1210)
at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:195)
at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:141)
at org.eclipse.osgi.framework.internal.core.Framework.publishBundleEventPrivileged(Framework.java:1558)
at org.eclipse.osgi.framework.internal.core.Framework.publishBundleEvent(Framework.java:1509)
at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:355)
at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:350)
at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1118)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:634)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:508)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:282)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:468)
at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:195)
at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:297)
Caused by: java.lang.NullPointerException
at org.apache.tuscany.sca.workspace.processor.impl.ContributionContentProcessor.read(ContributionContentProcessor.java:131)

<rfeng>This line doesn't match the latest code in ContributionContentProcessor.java.
Can you post the lines around?</rfeng>

at org.apache.tuscany.sca.workspace.processor.impl.ContributionContentProcessor.read(ContributionContentProcessor.java:1)
at org.apache.tuscany.sca.contribution.processor.DefaultURLArtifactProcessorExtensionPoint$LazyURLArtifactProcessor.read(DefaultURLArtifactProcessorExtensionPoint.java:337)
at org.apache.tuscany.sca.node.osgi.impl.NodeFactoryImpl.configureNode(NodeFactoryImpl.java:369)
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)
... 18 more

When I was using code in order to register the node it was working Ok. I think I need something
more. What is sca-contribution.xml. Do I need this file? Where should it be ? I don´t know
why "Could not load resource META-INF/maven/es.amivital.calculatorservice2/CalculatorService3/pom.properties"
if this file it is from maven and it is not from Tuscany

Thank you very much for your help

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

  You don't have to write the code to start the Node. The node-impl-osgi bundle is watching
the SCA enabled OSGi bundles and it will start the Node when the bundle is started. 


  From: Santiago Miguel Aranda Rojas

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

  To: user@tuscany.apache.org

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

  Sorry I forgot one question.

  I am using this code in order to register CalculatorService as SCA service.

  try {

  //Registrado el servicio SensorNetworkManagement en el dominio SCA
           NodeFactory factory = NodeFactory.newInstance();
           String url = ContributionLocationHelper.getContributionLocation(getClass());
           Contribution contrib = new Contribution("c1", url);
           node = factory.createNode("OSGI-INF/sca/bundle.composite", contrib);
       } catch (Throwable e) {

  Is it neccesary this??? Can I put composite and component type in "OSGI-INF/sca" directory
only?  I mean have I to write this code? Does Tuscany read these files automatically?

  Does TestService need this code too?

  Thank you very much.

  2009/6/16 <santiago.aranda@telvent.com>

  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>
  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
  * 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

  These files can be in a separate OSGi bundle than the one that owns the


  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


  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.

  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:




  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

  ADVERTENCIA: Component reference target not found, it might be a remote
  service running elsewhere in the SCA Domain: Composite =
  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:properties service="prueba.PruebaImpl">

  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


  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

  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:service name="SensorNetworkManagementService">
  <sca:reference name="prueba" target="PruebaComponent"/>

  <sca:component name="Prueba">
           <sca:properties service="prueba.PruebaImpl">

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

  public class SensorNetworkManagementServiceImpl  implements
  SensorNetworkManagementService {
  private Prueba prueba;
  public Prueba getPrueba() {
  return prueba;
  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 . 

View raw message