Hello Simon

Now I'm sure having understood what I was thinking concerning the way to
acces an SCA implemented service.

Thanks for your explanations.
Fahim

2008/11/27 Simon Laws <[EMAIL PROTECTED]>

>
>
> On Thu, Nov 27, 2008 at 10:17 AM, fahim salim <[EMAIL PROTECTED]> wrote:
>
>> Hello All
>>
>> I would be interested to have an exemple of an application which is not
>> SCA aware accessing a remote SCA service which is exposed as a POJO
>> component
>> I understood it's possible but what kind of binding will be used in this
>> case ?
>>
>> For example, how can I access the Service exposed by
>> CalculatorServiceCompoent   from a client which is not SCA aware ?
>>
>> Thanks
>> Fahim
>>
>>
>> 2008/10/17 Luciano Resende <[EMAIL PROTECTED]>
>>
>>> Just trying to add here, there was a thread about running the
>>> calculator-distributed from different machines, please take a look
>>>
>>> [1] http://markmail.org/message/qlirdpi46aydoa5b
>>>
>>> On Thu, Oct 16, 2008 at 8:01 AM, Simon Laws <[EMAIL PROTECTED]>
>>> wrote:
>>> >
>>> >
>>> > On Thu, Oct 16, 2008 at 1:17 PM, Seamus Kerrigan (skerriga)
>>> > <[EMAIL PROTECTED]> wrote:
>>> >>
>>> >> Hi,
>>> >>
>>> >> I'm a relative newbie to Tuscany and I have been looking at how to use
>>> >> an SCA domain across multiple JVMs (web servers) and machine
>>> boundaries.
>>> >> I've seen some of the nice examples that show how to add a remote
>>> >> reference (e.g. calculator-distributed) but in all these examples the
>>> >> Java code for each of the nodes are all on the same build path and
>>> >> therefore the components can easily reference each others Java
>>> >> interfaces e.g. CalculatorServiceImpl has direct access to AddService.
>>> >>
>>> >> However, I'm imagining that you may want to add a reference to a
>>> related
>>> >> Tuscany component where it's code would in a separate project or even
>>> >> source code repository. For example, what if AddService was written by
>>> >> another team and deployed separately to a web server. How could the
>>> >> remote component be referenced to build a composite in this case? Do I
>>> >> still need access to the remote Java interface or else have to publish
>>> >> the remote service via SOAP and generate client stubs?
>>> >>
>>> >> Thanks in advance,
>>> >> Seamus
>>> >
>>> > Hi Seamus
>>> >
>>> > The short answer is yes.
>>> >
>>> > If the client side component is going to reference a (remote) component
>>> then
>>> > it needs to understand the target components interface. Tuscany
>>> supports two
>>> > mechanisms for describing a service interface, interface.java or
>>> > interface.wsdl. So either one of these will do.
>>> >
>>> > If the remote service provider gives you WSDL to describe the service
>>> you
>>> > are trying to communicate with and if you are using implementation.java
>>> for
>>> > the client component then you will need to generate a java interface
>>> from
>>> > the WSDL you have been given. You need this in order to type the
>>> reference
>>> > inside your client component. Other programming models may not need
>>> this,
>>> > for example, BPEL.
>>> >
>>> > Hope this helps.
>>> >
>>> > Simon
>>> >
>>>
>>>
>>>
>>> --
>>> Luciano Resende
>>> Apache Tuscany, Apache PhotArk
>>> http://people.apache.org/~lresende<http://people.apache.org/%7Elresende>
>>> http://lresende.blogspot.com/
>>>
>>
>>
> Hi Fahim
>
> When an application is not SCA aware you will be dealing with existing
> remote protocols such as SOAP web services. To strip this down to a very
> basic sample. Imagine a service defined like
>
>
>     <component name="HelloWorldServiceWSComponent">
>         <implementation.java class="helloworld.HelloWorldServiceImpl"
> requires="tuscany:identity"/>
>         <service name="HelloWorldService" requires="authentication">
>             <interface.java interface="helloworld.HelloWorldService"/>
>             <binding.ws uri="
> http://localhost:8085/HelloWorldServiceWSComponent"/>
>         </service>
>     </component>
>
> Then I could send an XML SOAP request to
> http://localhost:8085/HelloWorldServiceWSComponent and expect to get and
> answer. So in a very basic and static way I could do something like.
>
>     public void testWSViaNonSCAClient() {
>
>         try {
>             String token ="MyToken";
>             String encToken = Base64.encode(token.getBytes());
>
>             String response = callService("
> http://L3AW203:8085/HelloWorldServiceWSComponent";,
>                                           "<?xml version='1.0'
> encoding='UTF-8'?>" +
>                                             "<soapenv:Envelope
> xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\<http://schemas.xmlsoap.org/soap/envelope/%5C>">"
> +
>                                              "<soapenv:Header>" +
>                                                "<ns2:Token xmlns:ns2=\"
> http://helloworld/\ <http://helloworld/%5C>">" + encToken + "</ns2:Token>"
> +
>                                              "</soapenv:Header>" +
>                                              "<soapenv:Body>" +
>                                                "<ns2:getGreetings
> xmlns:ns2=\"http://helloworld/\ <http://helloworld/%5C>">" +
>                                                  "<arg0>Simon</arg0>" +
>                                                "</ns2:getGreetings>" +
>                                              "</soapenv:Body>" +
>                                             "</soapenv:Envelope>" );
>             System.out.println(">>>" + response);
>         } catch(Exception ex) {
>             System.out.println(ex.toString());
>         }
>     }
>
>
>     public String callService(String url, String requestString) throws
> Exception {
>         System.out.println("Request = " + requestString);
>         WebConversation wc   = new WebConversation();
>         wc.setAuthorization("Me", "MyPasswd");
>         WebRequest request   = new PostMethodWebRequest( url,
>                                                          new
> ByteArrayInputStream(requestString.getBytes("UTF-8")),"text/xml");
>         request.setHeaderField("SOAPAction", "");
>         WebResponse response = wc.getResource(request);
>         System.out.println("Response= " +
> response.getText());
>         Assert.assertEquals(200, response.getResponseCode());
>         return response.getText();
>     }
>
> Which I cut from a Tuscany itest [1] and which uses httpunit to send a
> static string to our SCA service. The static string just happens to be an
> XML/SOAP request. I'm not suggesing you write you code in this static way.
> Would be much better to use a web services client API as is provided by Axis
> or JAXWS rather than doing this static stuff.
>
> Hopefully though this makes the point that if you have a client that wants
> to talk to an SCA component then, as long as you inderstand which binding
> has been chosen in the SCA application, you client is free to do what it
> likes as long as the messages it sends are appropriate for the chosen
> protocol.
>
> Regards
>
> Simon
>
> [1]
> http://svn.apache.org/repos/asf/tuscany/branches/sca-java-1.x/itest/policy-security-token/
>

Reply via email to