Translate

viernes, 18 de junio de 2010

SCA

Podríamos definir una aplicación como un conjunto de componentes de software interrelacionados. Todos estos componentes están construidos bajo la misma o diferentes tecnologías. Estos componentes pueden correr sobre la misma maquina en un sistema operativo y sobre una misma plataforma o en diferentes procesos, diferentes maquinas con diferentes plataformas y sistemas operativos. Sin embargo una aplicación es organizada para esto es requerido: una forma de crear los componentes y un mecanismo para describir cómo los componentes trabajan juntos.

Service Component Architecture (SCA) define un enfoque general para realizar estas dos cosas. SCA es un estándar de OASIS originalmente creado por diferentes vendedores como BEA, IBM, Oracle, SAP, etc. La especificación SCA define como crear un componente y como estos componentes interactuan para formar una aplicación. Los componentes en SCA pueden ser construidos en Java o en otros lenguajes y además permite interactuar con otras tecnologia como JEE, Spring o BPEL. SCA define un mecanismo común de ensamblaje que indica como los componentes son combinados dentro de la aplicación.

Apache Roller

Apache Roller es una completamente equipada, multi-usuario servidor de blogs adecuado para sitios grandes y pequeños. Es un motor de blogs de Apache.

Roller es una aplicación web Java que debe ser capaz de ejecutar en cualquier servidor Java EE y cualquier base de datos relacional. En la actualidad, corre mejor en Tomcat y MySQL - pero puede correr en Glassfish, WebSphere, JBoss, Gerónimo, Derby, PostgresSQL, Oracle, etc.

Roller es una producto estable y lista-servidor en el blog es importante revisión tercero. Roller se distribuye con licencia Apache. Roller se graduó de la incubadora de Apache en marzo de 2007 y ahora es un proyecto oficial de Apache.

martes, 15 de junio de 2010

MyIbatis


MyIbatis conocido anteriormente como Apache iBATIS, tuvo varios cambios estos días. Cambio de nombre y abandono la fundación Apache esto es poco común, dado que la fundación Apache da importancia a el proyecto por solo pertenecer a la fundación. Es un total misterio el abandono de la fundación.

Cambiando de tema, muchos se pregunta que es MyIbatis bueno es como un ORM. Pero no es un ORM completo como alguien lo llamo una vez es un ORQ (object relation queries). Es decir que tenemos que escribir el sql y mapear nuestro objetos a esas queries y el framework se ocupa de setear los valores de la query al objeto y viceversa. Es decir no es un competidor de hibernate sino de jdbc.

Cuando necesitamos mayor rendimiento y estamos seguros que vamos a escribir queries mejor que cualquier ORM, o cuando heredamos un diagrama de tablas sumamente complicado, nos conviene utilizar MyIbatis.

viernes, 11 de junio de 2010

Tenemos nuevo diseño !!!

Gracias a una nueva funcionalidad de blooger y que me hice un tiempito le dimos un nuevo diseño y más vida al blog.

HTML 5 !!

Como deben saber Html en su versión número 5 a salido a la luz. A raíz de esto se desataron peleas y discusiones varias en el mundo web.

He encontrado este resumen que explica los alcances de html 5 y una comparativa con flash el rey de la interactividad web.

El link es el siguiente:


http://www.focus.com/images/view/11905/

martes, 8 de junio de 2010

Apache OFBiz


Apache Open For Business Project es un proyecto de código abierto licenciado bajo Apache License 2.0. Este proyecto enterprice Open source y como enterprice Open source entendemos : Open Source ERP, CRM Open Source, Open Source de E-Business / E-Commerce, Open Source SCM, MRP Open Source, Open Source CMMS / EAM, y así sucesivamente.
Seria es criollo el ERP de Apache totalmente libre.
Apache OFBiz es una base y punto de partida de soluciones fiables, empresa segura y escalable. Utilícelo out-of-the-box (OOTB) o incluso personalizar para satisfacer sus necesidades de negocios más exigentes. Con OFBiz , usted puede comenzar de inmediato y ir escalando a medida que su negocio crece, sin el gran despliegue y costos de mantenimiento de los sistemas tradicionales de automatización de la empresa.
Es
de código abierto bajo la licencia Apache 2.0 y conducido por una comunidad Apache OFBiz ofrece la flexibilidad de diseño y el acceso a código, esta es una solución en la que no está solo, sino que puede trabajar con muchos otros para hacer las cosas.




sábado, 5 de junio de 2010

Frases

"Los programas deben ser escritos para que la gente los lea y sólo incidentalmente, para que las máquinas los ejecuten."

---Abelson / Sussman

"Mucho del software hoy en día se parece a una pirámide egipcia: con millones de ladrillos apilados uno encima del otro, sin integridad estructural y hecho por pura fuerza bruta y miles de esclavos."

--Alan Kay

"Cualquier tonto puede escribir código que un ordenador entiende. Los buenos programadores escriben código que los humanos pueden entender."

--Martin Fowler

"Hay dos formas de diseñar software: la primera es hacerlo tan simple que obviamente no hay deficiencias y la segunda es hacerlo tan complicado que no hay deficiencias obvias. La primera forma es mucho más difícil."

--C.A.R. Hoare

"Si deseas empezar y desarrollar algo grandioso, no necesitas millones de dólares de capitalización. Necesitas suficiente pizza y Diet Coke en la nevera, una PC barata y trabajo y dedicación para realizar tu idea."

---John Carmack

La mejor forma de predecir el futuro es inventarlo.

--Alan Kay

El software y las catedrales se parecen mucho. Primero lo construimos, después rezamos.

–-Anónimo


viernes, 28 de mayo de 2010

Apache Ivy


Ivy es una herramienta para la gestión (registro, seguimiento, resolución y notificación) dependencias del proyecto. Se caracteriza por lo siguiente:
  • Flexibilidad y configurabilidad - Ivy es esencialmente independiente del proceso y no está vinculado a cualquier metodología o estructura. En su lugar, proporciona la necesaria flexibilidad y configurabilidad de adaptarse a una amplia gama de gestión de la dependencia y construir procesos.
  • Estrecha integración con Apache Ant. Ivy funciona particularmente bien con Apache Ant proporcionando un número de poderosos tareas Ant desde la resolución de dependencias para la presentación de informes y publicación de dependencia.

Si la pregunta es porque no usar Apache maven y la respuesta es simple: no siempre se puede usar maven. En un proyecto que ya usa Ant y ya fue construido. Un proyecto particular que no encuadra con la estructura propuesta por maven, en estos casos usar Ivy para resolver las dependencias es la mejor idea que se te puede ocurrir.
Ivy es de código abierto y liberado bajo una licencia Apache.


Apache Harmony - Open Source Java SE.

Apache Harmony es una open JDK si si ya se no esta certificada pero es interesante para comenzar. Esta jdk es para la gente que no confía demasiado en Oracle, por lo menos yo no confió.

Es interesante que Open Jdk sea más famosa (open jdk era una implementación impulsada por Sun) y más inmadura. Apache Harmony es una jdk que no certifica como Jdk, según las malas lenguas solo cuestión de política.

Y yo personalmente uso muchos productos de Apache y la verdad es que siempre tuve buenos resultados. Vamos a probar esta Jdk

viernes, 21 de mayo de 2010

Configurar una cache con Spring con ehcache


Saben como viene la mano? Yo no tengo ganas de ir a buscar a la base todas las veces los datos que me piden; por qué? Porque es más lento. Lo que nos conviene es usar una cache de datos. Como funciona esto? Fácil cada vez que yo deseo consultar un objeto lo guardo en un lugar, cuando alguien hace la misma consulta no vuelvo a ir a la base sino que lo busco de donde lo guarde “la cache” y si alguien guarda o modifica un objeto limpio la cache para que no traiga datos viejos.
Spring modules es nuestro mejor amigo para configurar cache en spring. Vamos a ver como podemos configurar la cache con anotaciones. Uso anotaciones porque me parece más descriptivo pero podría usar aop (va en gusto)
Primero en mi creo los siguientes beans:
<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ehcache="http://www.springmodules.org/schema/ehcache"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springmodules.org/schema/ehcache http://www.springmodules.org/schema/cache/springmodules-ehcache.xsd">

<ehcache:config configLocation="classpath:ehcache.xml" />
<ehcache:annotations>
<!—- para metodos cacheables -->
<ehcache:caching id="cache" cacheName="defaultCache" />
<!—- para metodos que borran la cache -->
<ehcache:flushing id="flushCache" cacheNames="defaultCache" when="before" />
</ehcache:annotations>
</beans>

Ahora bien debemos crear el archivo: ehcache.xml
<ehcache >
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="300"
timeToLiveSeconds="600"
overflowToDisk="false"
memoryStoreEvictionPolicy="LRU"
/>
<cache name="defaultCache"
maxElementsInMemory="10000"
eternal="false"
overflowToDisk="false"
memoryStoreEvictionPolicy="LRU"
/>

</ehcache>
Ahora con anotaciones indicamos que cacheamos y que borra la cache
@Cacheable(modelId="cache")
public List<T> buscarTodos() {
return this.getHibernateTemplate().find("from " +persistentClass.getName());
}

@Cacheable(modelId="cache")
public T buscarPor(Serializable id) {
return (T) this.getHibernateTemplate().get(persistentClass, id);
}

@Cacheable(modelId="cache")
public List<T> buscarPor(T ejemplo) {
return this.getHibernateTemplate().findByExample(ejemplo);
}

@Cacheable(modelId="cache")
public Long contarTodos() {
Query query = this.getSession().createQuery("select count(*) from "+persistentClass.getName());
return (Long) query.uniqueResult();
}
@CacheFlush(modelId="flushCache")
public void guardar(T entidadPersistible) {
this.getHibernateTemplate().save(entidadPersistible);
}

@CacheFlush(modelId="flushCache")
public void actualizar(T entidadPersistible) {
this.getHibernateTemplate().update(entidadPersistible);
}

@CacheFlush(modelId="flushCache")
public void guardarOActualizar(T entidadPersistible) {
this.getHibernateTemplate().saveOrUpdate(entidadPersistible);
}

@CacheFlush(modelId="flushCache")
public void borrar(T entidadPersistible) {
this.getHibernateTemplate().delete(entidadPersistible);
}
@CacheFlush(modelId="flushCache")
public void borrarPor(Serializable id) {
T entidadPersistible = this.buscarPor(id);
this.getHibernateTemplate().delete(entidadPersistible);
}

Si todo salió bien la aplicación va a usar la cache para estos métodos
Dejo las dependencias de maven:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>${spring.version}</version>
</dependency>

<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>org.springmodules</groupId>
<artifactId>spring-modules-cache</artifactId>
<version>0.8</version>
<exclusions>
<exclusion>
<artifactId>gigaspaces-ce</artifactId>
<groupId>gigaspaces</groupId>
</exclusion>
<exclusion>
<groupId>jini</groupId>
<artifactId>jsk-lib</artifactId>
</exclusion>
<exclusion>
<groupId>jini</groupId>
<artifactId>jsk-platform</artifactId>
</exclusion>
<exclusion>
<groupId>jini</groupId>
<artifactId>mahalo</artifactId>
</exclusion>
<exclusion>
<groupId>jini</groupId>
<artifactId>reggie</artifactId>
</exclusion>
<exclusion>
<groupId>jini</groupId>
<artifactId>start</artifactId>
</exclusion>
<exclusion>
<groupId>jini</groupId>
<artifactId>boot</artifactId>
</exclusion>
<exclusion>
<groupId>jini</groupId>
<artifactId>webster</artifactId>
</exclusion>
<exclusion>
<groupId>jboss</groupId>
<artifactId>jboss-cache</artifactId>
</exclusion>
<exclusion>
<groupId>jboss</groupId>
<artifactId>jboss-common</artifactId>
</exclusion>
<exclusion>
<groupId>jboss</groupId>
<artifactId>jboss-jmx</artifactId>
</exclusion>
<exclusion>
<groupId>jboss</groupId>
<artifactId>jboss-minimal</artifactId>
</exclusion>
<exclusion>
<groupId>jboss</groupId>
<artifactId>jboss-system</artifactId>
</exclusion>
<exclusion>
<groupId>jcs</groupId>
<artifactId>jcs</artifactId>
</exclusion>
<exclusion>
<groupId>xpp3</groupId>
<artifactId>xpp3_min</artifactId>
</exclusion>
<exclusion>
<groupId>ehcache</groupId>
<artifactId>ehcache</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
</exclusions>
</dependency>

viernes, 14 de mayo de 2010

Apache Tuscany y Spring

Sigo experimentando con Apache Tuscany, hoy el objetivo es hacer un ejemplo con integración con spring. Mismo ejemplo que hicimos en : http://emanuelpeg.blogspot.com/2010/05/desarrollar-un-ejemplo-con-apache.html

Comenzamos escribiendo la interfaz:

@Remotable
public interface ExampleService {

String sayHello();

}

Su implementación :

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

private String hello = "Holasss !!! \n";

public void setHello(String hello) {
this.hello = hello;
}

/**
* @see org.assembly.nornas.ExampleService#sayHello()
*/
@Override
public String sayHello() {
System.out.print("llamaron a Say");
return hello;
}

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

}

Ahora tenemos que configurar el beans de spring, en un archivo que llamaremos: appcontext-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:sca="http://www.springframework.org/schema/sca"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/sca http://www.osoa.org/xmlns/sca/1.0/spring-sca.xsd ">


<bean id="service.example" class="com.elpaquete.ExampleServiceImpl">
<property name="hello" value="Hola desde Spring!!" ></property>
</bean>


<sca:service name="ExampleService"
type="org.assembly.nornas.sandbox.service.example.ExampleService" target="service.example" />


</beans>

Notaron que además de declarar el bean le indicamos a Apache Tuscany cual es la interfaz de nuestro bean que va a ser un componente de Apache Tuscany.

Ahora escribimos el archivo ExampleSpring.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.spring location="spring-sandbox.xml" />

<service name="ExampleService">
<interface.java interface="org.assembly.nornas.sandbox.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>

Notaron que la implementación del componente no se indica clase si no el archivo appcontext-spring.xml, Apache tuscany va a leer y buscar de ahí la implementación.

Ya lo tenemos, ahora vamos a hacer la clase main:

public class MainSpring {

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

System.out.println("Starting ...");
SCADomain scaDomain = SCADomain.newInstance("ExampleSpring.composite");
System.out.println("Example in "+scaDomain.getURI());
System.in.read();
System.out.println("Stopping ...");
scaDomain.close();
System.out.println();

}

}

Si todo salio bien, en http://localhost:8080/nornas/ws?wsdl va a estar wsdl de su web service soap.

Por ultimo las dependencias de maven:

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>2.5.6.SEC01</version>
</dependency>


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

<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>
<scope>runtime</scope>
</dependency>

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

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

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

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

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

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

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

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

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

<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-implementation-spring-runtime</artifactId>
<version>1.6</version>
<scope>runtime</scope>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
</exclusions>
</dependency>

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?

domingo, 25 de abril de 2010

W3C

Yo no sabia la W3C tiene una serie de manueles basicos, cosas que hay que saber, css, seguridad, i18n, etc...

Les dejo el link: http://www.w3c.es/Divulgacion/