Hi,

Yes, that's what I meant.

Let's assume you have 2 java components, A and B. A needs to use a service provided by B, say BService. To use dependency injection, you need to annoate the impl class of A as follows.

public class AImpl {

   @Reference
   protected BService refB;

   or
   @Reference
   public void setRefB(BService refB);

   public aService() {
       ...
       refB.doSomething();  // Call BService
       ...
   }

}

Please note the @Reference is used to annotate a field or setter method to receive the injection.

Thanks,
Raymond

----- Original Message ----- From: "b anton.etra-id" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Thursday, October 11, 2007 2:00 PM
Subject: Re: New using Tuscany


Dear Raymond,

Do you want to say that I am using the @Reference annotation in wrong way?
How must I use it? It is obvious that I have a problem with the references.
Could you please help me?

Thanks,

Ana Belen


-----Original Message-----

From: "Raymond Feng" <[EMAIL PROTECTED]>

To: <[email protected]>

Date: Thu, 11 Oct 2007 09:22:20 -0700

Subject: Re: New using Tuscany




Another issue is that you should use @Reference against public/protected

fields or setter methods to receive the proxy by injection. In your case,

the following is invalid:



@Reference

public List<InformationObject>

getAllInformationObject(List<InformationObjectConstraint> constraintsList)

throws ISNotFoundException {

...

}



I'll add some check in our code to report these kind of illegal usages.



Thanks,

Raymond



----- Original Message -----
From: "Simon Laws" <[EMAIL PROTECTED]>

To: <[email protected]>

Sent: Thursday, October 11, 2007 9:17 AM

Subject: Re: New using Tuscany





On 10/11/07, Ana Belén Antón Gironés <[EMAIL PROTECTED]>
wrote:



Hi Simon!



First of all, thank you very much for your help.



I have some problems running my application. When I run my isClient.java I

get this exception:



Starting ...

11-oct-2007 16:45:23

org.apache.tuscany.sca.assembly.builder.impl.CompositeBuilderImpl$1problem

ADVERTENCIA: [WARNING] No targets for reference: getInformationObject null

11-oct-2007 16:45:23

org.apache.tuscany.sca.assembly.builder.impl.CompositeBuilderImpl$1problem

ADVERTENCIA: [WARNING] No targets for reference: getAllInformationObject

null

Information.composite ready

Exception in thread "main" org.osoa.sca.ServiceUnavailableException: No

service invoker is available for reference default

(bindingURI=InformationGroundingServiceComponent

operation=getGroundingService).

at




org.apache.tuscany.sca.binding.sca.impl.RuntimeSCAReferenceBindingProvider.c

reateInvoker(RuntimeSCAReferenceBindingProvider.java:192)

at

org.apache.tuscany.sca.core.assembly.RuntimeWireImpl.addBindingInterceptor

(R

untimeWireImpl.java:214)

at

org.apache.tuscany.sca.core.assembly.RuntimeWireImpl.initInvocationChains

(Ru

ntimeWireImpl.java:156)

at

org.apache.tuscany.sca.core.assembly.RuntimeWireImpl.getInvocationChains

(Run

timeWireImpl.java:97)

at




org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.getInvocationCha

in(JDKInvocationHandler.java:190)

at

org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke

(JDKInvoca

tionHandler.java:124)

at $Proxy7.getInformationObject(Unknown Source)

at Client.isClient.main(isClient.java:34)





I know that I am missing some refence to getInformationObject and

getAllInformationObject and something is missing in the composite,  but I

don't know what it is. My application has a complex estructure but I am

going to try to explain it.





isClient.java is:






****************************************************************************

*****************************

package Client;



import org.apache.tuscany.sca.host.embedded.SCADomain;

import eu.services.information.exceptions.ISNotFoundException;

import eu.services.information.io.InformationObject;

import eu.services.information.is.InformationService;



public class isClient {



public static void main(String[] args) throws Exception {



  System.out.println("Starting ...");

  SCADomain scaDomain = SCADomain.newInstance("Information.composite");

  System.out.println("Information.composite ready");



  InformationService is = scaDomain.getService(InformationService.class,

    "InformationServiceComponent");



  InformationObject iobj;

  try {

   iobj = is.getInformation("c1dee5cd");



   System.out.println("Description: " + iobj.getDescription());

   System.out.println("Lang: " + iobj.getLang());

   System.out.println("Name: " + iobj.getName());;

   System.out.println("Protocol: " + iobj.getProtocol());

   System.out.println("URL: " + iobj.getURL());

   System.out.println("ID: " + iobj.getID());

  } catch (ISNotFoundException e1) {

   e1.printStackTrace();

  }

  scaDomain.close();

}

}




****************************************************************************

*********************************





the composite:






****************************************************************************

*********************************

<?xml version="1.0" encoding="UTF-8"?>



<composite    xmlns="http://www.osoa.org/xmlns/sca/1.0
[http://www.osoa.org/xmlns/sca/1.0]";

    name="InformationComposite">



<component name="InformationServiceComponent">

  <implementation.java class=

"eu.services.information.rh.InformationServiceImpl"/>

</component>



</composite>




****************************************************************************

*********************************





my src structure is:






****************************************************************************

*********************************



-Client

     -isClient.java

-eu.services.information.exceptions

     -GCException.java

     -InconsistentIOConstraintException.java

     -InconsistentIOException.java

     -ISNotFoundException.java

-eu.services.information.ior

     -InformationObjectRepository.java

-eu.services.information.io

     -InformationObject.java

-eu.services.information.isr

     -ISRequest.java

     -mainISRequest.java

-eu.services.information.is

     -InformationService.java

     -InformationObjectConstraint.java

-eu.services.information.rh

     -InformationServiceImpl.java

     -InformationObjectImpl.java

-InformationService.composite






****************************************************************************

*********************************





the InformationService.java is






****************************************************************************

********************************

package eu.services.information.is;



import java.util.List;



import org.osoa.sca.annotations.Remotable;



import eu.services.information.exceptions.*;

import -eu.services.information.io.InformationObject;





@Remotable

public interface InformationService {





public InformationObject getInformationObject (String id)

throws ISNotFoundException;





public List<InformationObject>

getAllInformationObject(List<InformationObjectConstraint> constraintsList)

throws ISNotFoundException;

}




****************************************************************************

*********************************





and the InformationServiceImpl.java:




****************************************************************************

*********************************

package eu.esdihumboldt.informationgrounding.requesthandler;



import java.io.IOException;

import java.util.ArrayList;

import java.util.List;



import org.dom4j.Document;

import org.dom4j.DocumentException;

import org.dom4j.DocumentHelper;

import org.dom4j.Node;

import org.osoa.sca.annotations.Reference;

import org.osoa.sca.annotations.Service;



import eu.services.information.exceptions.*;

import eu.services.information.ior.InformationObjectRepository;

import eu.services.information.io.InformationObject;

import eu.services.information.is.*;





@Service(InformationGroundingService.class)

public class InformationServiceImpl implements InformationService{



//




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

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



@Reference

public List<InformationObject>

getAllInformationObject(List<InformationObjectConstraint> constraintsList)

throws ISNotFoundException {

  List<InformationObject> ioList = new ArrayList<GroundingService>();

  //code

         return ioList;

}





// ----------------------------------------------------------------------



@Reference

public InformationObject getInformationObject(String id) throws

ISNotFoundException{



  InformationObject io = null;

  //code

  return io;

}



// ----------------------------------------------------------------------



private boolean checkConstaintList(List<GroundingServiceConstraint>

constraints){

  boolean isRight = true;

  //code

  return isRight;

}



// ----------------------------------------------------------------------

private String buildXPath (List<GroundingServiceConstraint> constraints){

  //code

  String path = "";

  return path;

}



// ----------------------------------------------------------------------



private String getPath (Integer id ){

  //code

  String path = "";

  return path;

}



}






****************************************************************************

*********************************



I hope you can follow and understand my explanation.



Thank you very much for your help! Regards,



Ana Belen





Hi



Disregarding that warnings you are getting about missing references (as you

say you are expecting that) the error you are getting:



Exception in thread "main" org.osoa.sca.ServiceUnavailableException: No

service invoker is available for reference default

(bindingURI=InformationGroundingServiceComponent

operation=getGroundingService).



Means that when you make the call in the client to get a proxy to a service:



 InformationService is = scaDomain.getService(InformationService.class

,"InformationServiceComponent");



The runtime is not able to find the service you are asking for. Now the

interesting thing to note here is that the bindingURI =

InformationGroundingServiceComponent. This is clearly not the name of the

component in the .composite file or the name of the component you asked for.

There is a similar name in the @Service annotation you have on you service

implementation:



@Service(InformationGroundingService.class)

public class InformationServiceImpl implements InformationService{



Not sure how Component is getting added to the end though. Anyhow you should

make the @Service annotation match the interface that the service

implementation implementats. @Service is used to tell the Tuscany runtime

which interfaces provide SCA services.  So try.



@Service(InformationService.class)



In this case you can get away without the @Service annotation altogether as

the runtime will assume that you want to expose the single interface that

you implement as a service.



If this doesn't have any +ve effect let me know and I'll look a little

closer, i.e. run up the sample, and see what's going on



Regards



Simon





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

To unsubscribe, e-mail: [EMAIL PROTECTED]

For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to