sábado, 8 de mayo de 2010

Desarrollar un ejemplo con Apache Tuscany

Como ven no estoy escribiendo mucho dado que estoy dedicando tiempo a mi tesis. Por esta razón rápidamente vamos a desarrollar un ejemplo con Apache Tuscany.
En otro post les prometo dar más detalles de mi tesis.
Si no leyeron estos posts, sería bueno que lo hagan :
http://emanuelpeg.blogspot.com/2010/02/apache-tuscany_4551.html
http://emanuelpeg.blogspot.com/2010/02/sca.html

La idea es desarrollar un ejemplo facil usando maven.
Veamos la descripción del componente:

import org.osoa.sca.annotations.Remotable;

@Remotable
public interface ExampleService {

String sayHello();

}

Veamos la implementación:

import org.assembly.nornas.service.example.ExampleService;
import org.osoa.sca.annotations.Init;
import org.osoa.sca.annotations.Service;


@Service(ExampleService.class)
public class ExampleServiceImpl implements
ExampleService {

@Override
public String sayHello() {
System.out.print("llamaron a Say");
return "Holasss !!! \n";
}

@Init
public void init() {
System.out.println("Starting with "+ExampleServiceImpl.class + " \n");
}

}

Ahora hay que hacer un archivo composite que describe el componente:
Example.composite

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

<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"
targetNamespace="http://nornas"
xmlns:nornas="http://nornas"
name="Example" >

<component name="ExampleServiceComponent">
<implementation.java class="org.assembly.nornas.serviceImpl.example.ExampleServiceImpl" />

<service name="ExampleService">
<interface.java interface="org.assembly.nornas.service.example.ExampleService"/>
<binding.ws uri="http://localhost:8080/nornas/ws" />
<t:binding.atom uri="http://localhost:8080/nornas/atom" />
<t:binding.jsonrpc uri="http://localhost:8080/nornas/jsonrpc" />
<t:binding.rss uri = "http://localhost:8080/nornas/rss"/>
<binding.sca />
</service>

</component>


</composite>

Ahora vamos a correr todo esto, para lo cual vamos a tener que hacer una clase que tenga el método main:

import java.io.IOException;

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

public class Main {

public static void main(String[] args) throws IOException {
System.out.println("Starting ...");
SCADomain scaDomain = SCADomain.newInstance("Example.composite");
scaDomain.getURI();
System.out.println("store.composite ready for big business !!!");
System.in.read();
System.out.println("Stopping ...");
scaDomain.close();
System.out.println();
}

}

Ojo hago esto porque no tengo servidor, para otro ejemplo probamos con tomcat o jetty. Internamente Apache tuscany levanta un jetty.

Y Listo!!

Si vamos a esta url: http://localhost:8080/nornas/ws?wsdl deberíamos tener en wsdl de nuestro web server SOAP.
Si fueron observadores vieron que use varios bildings (solo lo hice para probarlos)

Les dejo las dependencias del pom para correr el ejemplo:

<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-core-spi</artifactId>
<version>1.6</version>
</dependency>

<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-policy-security</artifactId>
<version>1.6</version>
</dependency>

<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-host-embedded</artifactId>
<version>1.6</version>
</dependency>

<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-data-api</artifactId>
<version>1.6</version>
</dependency>

<dependency>
<groupId>org.apache.ws.security</groupId>
<artifactId>wss4j</artifactId>
<version>1.5.3</version>
</dependency>

<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-implementation-java-runtime</artifactId>
<version>1.6</version>
</dependency>

<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-binding-atom-abdera</artifactId>
<version>1.6</version>
</dependency>

<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-binding-rss-rome</artifactId>
<version>1.6</version>
</dependency>

<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-binding-ws-axis2</artifactId>
<version>1.6</version>
</dependency>

<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-binding-jsonrpc-runtime</artifactId>
<version>1.6</version>
</dependency>

<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-binding-rmi-runtime</artifactId>
<version>1.6</version>
</dependency>

<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-implementation-resource-runtime</artifactId>
<version>1.6</version>
</dependency>

<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-binding-http-runtime</artifactId>
<version>1.6</version>
</dependency>

<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-host-jetty</artifactId>
<version>1.6</version>
</dependency>

Acabamos de hacer un servicio SOA con Apache Tuscany, muy fácil no?