Spring no SOA Suite

O componente de Spring Context permite que você execute código Java dentro de uma aplicação SOA Suite de maneira mais robusta que o Java Embedding do BPEL.

Crie uma aplicação SOA Suite e no composite.xml, arraste o componente Spring Context (Component Pallete) para a raia do meio.

Create Spring
Create Spring

Clique em OK. Você deverá ter um componente com um folhinha verde no meio do composite. O próximo passo é criar uma interface e uma classe para ser utilizada com o Spring Context. Clique em File, New, Java Interface e clique em OK. Dê um nome, no meu exemplo vou dar o nome de OlaSpring. Clique em OK. Insira o seguinte conteúdo:

package br.com.thiagovespa.adf.samples.spring;
public interface OlaSpring {
    public String digaOla(String nome);
}

Faça o mesmo procedimento para criar uma classe Java ao invés de interface. No meu exemplo a classe irá se chamar OlaSpringImpl. Insira o seguinte conteúdo:

package br.com.thiagovespa.adf.samples.spring;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class OlaSpringImpl implements OlaSpring {
    public OlaSpringImpl() {
        super();
    }
    public String digaOla(String nome) {
        return "Olá " + nome + ". Hoje é " +
            new SimpleDateFormat("EEEE", new Locale("pt",
                                                    "BR")).format(new Date());
    }
}

Abra o arquivo OlaSpring.xml, na Component Pallete, escolha a opção no menu Spring 2.5 Core.

Component Pallete
Component Pallete

Clique e arraste a opção bean para o OlaSpring.xml. Preencha o "name" e a "class" utilizando o Property Inspector. Nesse exemplo utilizei os seguinte valores:

<bean name="olaSpringBean"
        class="br.com.thiagovespa.adf.samples.spring.OlaSpringImpl"/>

No Component Pallete  selecione a opção WebLogic SCA.

Component Pallete
Component Pallete

Clique em Service e arraste para o OlaSpring.xml. Dê um nome, informe a referência do passo anterior e especifique a interface. O conteúdo do meu arquivo ficou da seguinte maneira:

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:util="http://www.springframework.org/schema/util"
       xmlns:jee="http://www.springframework.org/schema/jee"
       xmlns:lang="http://www.springframework.org/schema/lang"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:sca="http://xmlns.oracle.com/weblogic/weblogic-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/util http://www.springframework.org/schema/util/spring-util-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/tool http://www.springframework.org/schema/tool/spring-tool-2.5.xsd http://xmlns.oracle.com/weblogic/weblogic-sca META-INF/weblogic-sca.xsd">
  <!--Spring Bean definitions go here-->
  <bean name="olaSpringBean"
        class="br.com.thiagovespa.adf.samples.spring.OlaSpringImpl"/>
  <sca:service name="olaSpringService" target="olaSpringBean"
               type="br.com.thiagovespa.adf.samples.spring.OlaSpring"/>
</beans>

Vá no arquivo composite.xml, selecione a setinha verde e arraste para a raia Exposed Services (lado esquerdo). O JDeveloper irá exibir uma tela perguntando se você quer expor o serviço como um EJB ou Web Service:

Service Type Option
Service Type Option

Escolha a opção Web Service e clique em OK na próxima tela:

Interface Conversion
Interface Conversion

Ele irá criar um arquivo WSDL com os esquemas correspondentes. Agora é só realizar o deploy e testar a aplicação.

Para o seguinte request:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    	<soap:Body>
        		<ns1:digaOla xmlns:ns1="http://spring.samples.adf.thiagovespa.com.br/">
            			<arg0>Thiago</arg0>
        </ns1:digaOla>
    </soap:Body>
</soap:Envelope>

Teremos o seguinte response:

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://www.w3.org/2005/08/addressing">
	<env:Header>
		<wsa:MessageID>urn:10D27790659411E28F1F1F86169F6DB8</wsa:MessageID>
		<wsa:ReplyTo>
			<wsa:Address>http://www.w3.org/2005/08/addressing/anonymous</wsa:Address>
			<wsa:ReferenceParameters>
				<instra:tracking.ecid xmlns:instra="http://xmlns.oracle.com/sca/tracking/1.0">eb7831b8f2ea384d:5304d5b3:13c68b0dd7e:-8000-00000000000017f8</instra:tracking.ecid>
				<instra:tracking.compositeInstanceCreatedTime xmlns:instra="http://xmlns.oracle.com/sca/tracking/1.0">2013-01-23T17:35:38.589-02:00</instra:tracking.compositeInstanceCreatedTime>
			</wsa:ReferenceParameters>
		</wsa:ReplyTo>
		<wsa:FaultTo>
			<wsa:Address>http://www.w3.org/2005/08/addressing/anonymous</wsa:Address>
			<wsa:ReferenceParameters>
				<instra:tracking.ecid xmlns:instra="http://xmlns.oracle.com/sca/tracking/1.0">eb7831b8f2ea384d:5304d5b3:13c68b0dd7e:-8000-00000000000017f8</instra:tracking.ecid>
				<instra:tracking.compositeInstanceCreatedTime xmlns:instra="http://xmlns.oracle.com/sca/tracking/1.0">2013-01-23T17:35:38.589-02:00</instra:tracking.compositeInstanceCreatedTime>
			</wsa:ReferenceParameters>
		</wsa:FaultTo>
	</env:Header>
	<env:Body>
		<digaOlaResponse xmlns="http://spring.samples.adf.thiagovespa.com.br/">
			<return xmlns="">Olá Thiago. Hoje é Quarta-feira</return>
		</digaOlaResponse>
	</env:Body>
</env:Envelope>

Com esse recurso você pode executar qualquer código Java dentro do SOA Suite sem grandes complicações.

Sobre: Thiago Galbiatti Vespa

Thiago Galbiatti Vespa é mestre em Ciências da Computação e Matemática Computacional pela USP e bacharel em Ciências da Computação pela UNESP. Coordenador de projetos do JavaNoroeste, membro do JCP (Java Community Process), consultor Oracle, arquiteto de software de empresas de médio e grande porte, palestrante de vários eventos e colaborador de projetos open source. Possui as certificações: Oracle Certified Master, Java EE 5 Enterprise Architect – Step 1, 2 and 3; Oracle WebCenter Portal 11g Certified Implementation Specialist; Oracle Service Oriented Architecture Infrastructure Implementation Certified Expert; Oracle Certified Professional, Java EE 5 Web Services Developer; Oracle Certified Expert, NetBeans Integrated Development Environment 6.1 Programmer; Oracle Certified Professional, Java Programmer; Oracle Certified Associate, Java SE 5/SE 6