Avançar para a área de conteúdo

ir para o conteúdo principal

developerWorks Brasil  >  Tecnologia Java  >

Dica: Migrando de JBoss 4 para JBoss 5

Suavize o caminho com as mudanças de configuração XML

developerWorks
Opções de documento

Opções de documento que necessitam de JavaScript não são exibidas


Classificar esta página

Ajude-nos a melhorar este conteúdo


Nível: Intermediário

Stephen B. Morris, CTO, Omey Communications

21/Jul/2009

Tentando migrar seu código EJB para JBoss 5? Não é possível implementar e executar o código? Nesse caso, esta dica é para você. Ou você é principiante no JBoss 5, mas deseja sentir o ambiente EJB 3? Esta dica detalha os arquivos de implementação XML necessários para construir, implementar e executar código EJB3 em JBoss5.
Acrônimos Usados Frequentemente
  • EJB: Enterprise Java Bean
  • JDK: Java Development Kit
  • XML: Linguagem de Marcação Extensível

Minha própria experiência me ensinou a sempre esperar problemas quando construo código de origem Java™ . Com certeza encontrei alguns problemas ao tentar executar meu código EJB3 no JBoss5, mas consegui contornar todos eles e contarei como fiz isso neste artigo. Se quiser acompanhar, sugiro instalar duas cópias do JBoss: versão 4 versão 5 (consulte Recursos para obter links). Além disso, é necessário ter o JDK versão 1.5 instalado, com a variável JAVA_HOME apontando para a pasta de instalação—por exemplo, JAVA_HOME= C:\java\jdk1.5.0_06.

Questão de Upgrade de Caminhos

Antes de iniciar a migração, inicie dando uma olhada no código EJB3 atualmente em execução no JBoss4. A Lista 1 mostra uma classe de entidade EJB3 simples chamada GreetingCard.


Lista 1. A Classe EJB3 GreetingCard

@Entity
@Table(name="GREETING_CARD")
public class GreetingCard implements java.io.Serializable
{
    private int id;
    private String greeting;
    private int colour;

    @Id
    @Column(name="ID")
    public int getId()
    {
    return id;
    }

    public void setId(int pk)
    {
    id = pk;
    }

    @Column(name="NAME")
    public String getGreeting()
    {
        return greeting;
    }

    public void setGreeting(String str)
    {
    greeting = str;
    }

    @Column(name="COLOUR")
    public int getColour()
    {
    return colour;
    }

    public void setColour(int colour)
    {
    this.colour = colour;
    }
}

A Lista 2 mostra uma classe de bean stateless.


Lista 2. Um Bean de Entidade Stateless

@Stateless
public class CardShopBean implements CardShopRemote
{
    @PersistenceContext(unitName="cardshop") private EntityManager manager;

    public void createGreetingCard(GreetingCard greetingCard)
    {
    manager.persist(greetingCard);
    }

    public GreetingCard findGreetingCard(int pKey)
    {
    return manager.find(GreetingCard.class, pKey);
    }

    public void removeGreetingCard(GreetingCard greetingCard)
    {
    manager.remove(greetingCard);
    }

    public void flushGreetingCard()
    {
    manager.flush();
    }

    public void mergeGreetingCard(GreetingCard greetingCard)
    {
    manager.merge(greetingCard);
    }
}

A classe program simples na Lista 3 executa esse código.


Lista 3. Executando o Código

public static void main(String [] args)
{
    try
    {
        Context jndiContext = getInitialContext();
        Object ref = jndiContext.lookup("CardShopBean/remote");
        CardShopRemote dao = (CardShopRemote)ref;

        GreetingCard oldGreetingCard = dao.findGreetingCard(1);
        if (oldGreetingCard != null)
        {
           dao.mergeGreetingCard(oldGreetingCard);
           dao.removeGreetingCard(oldGreetingCard);
           dao.flushGreetingCard();
        }

        GreetingCard greetingCard_1 = new GreetingCard();
        greetingCard_1.setId(1);
        greetingCard_1.setGreeting("Seasons Greetings from Terry Dactyll");
        greetingCard_1.setColour(1);

        dao.createGreetingCard(greetingCard_1);

        GreetingCard greetingCard_2 = dao.findGreetingCard(1);
        System.out.println("Greeting card name: " + greetingCard_2.getGreeting());
        System.out.println("Greeting card colour: " + greetingCard_2.getColour());
     }
     catch (javax.naming.NamingException ne)
     {
        ne.printStackTrace();
     }
}

Ao executar esse código no JBoss versão 4, você obtém os resultados do lado do cliente na Lista 4.


Lista 4. Executando o Código EJB3 no JBoss 4

ant run.client
Buildfile: build.xml

run.client:
     [java] Greeting card name: Seasons Greetings from Terry Dactyll
     [java] Greeting card colour: 1

BUILD SUCCESSFUL
Total time: 10 seconds

Isso não é nenhuma surpresa! Agora, tente executar o mesmo código sob JBoss 5. É muito fácil alternar entre os dois ambientes. A primeira etapa é simplesmente modificar o valor da variável de ambiente JBOSS_HOME. Em meu sistema, isso significa alterar de JBOSS_HOME=C:\java\jboss4\JEMS-jboss-4.0.5.GA para JBOSS_HOME=C:\java\jboss5\jboss-5.0.0.GA.

Agora, ao executar ant -p, obtém-se o resultado da Lista 5.


Lista 5. Problemas com Caminho no JBoss 5

build.xml:35: C:\java\jboss5\jboss-5.0.0.GA\server\default\deploy\ejb3.deployer not found.

A pequena mudança em build.xml ilustrada na Lista 6 corrige o problema da Lista 5.


Lista 6. Primeira Mudança em build.xml

<fileset dir="${jboss.home}/server/default/deployers/ejb3.deployer">

Executar ant -p novamente desvenda outro erro (semelhante), ilustrado na Lista 7.


Lista 7. Mais um Problema de Caminho

build.xml:35:
	C:\java\jboss5\jboss-5.0.0.GA\server\default\deploy\jboss-aop-jdk50.deployer
	not found.

Como para a mudança anterior, isso também é facilmente corrigido (consulte a Lista 8).


Lista 8. Segunda Mudança em build.xml

<fileset dir="${jboss.home}/server/default/deployers/jboss-aop-jboss5.deployer">

Neste ponto, ant -p é executado sem nenhum problema. Agora chegou a hora de construir o código EJB3 no JBoss 5. Infelizmente, executar ant compile resulta no problema ilustrado na Lista 9. (Observe que a Lista 9 é um pequeno trecho da saída em si.)


Lista 9. Problemas de Compilação

ant compile
compile:
    [javac] Compiling 4 source files to C:\java\jbossmigration\mycode-jboss5\build\classes
    [javac] C:\java\jbossmigration\mycode-jboss5\src\main\com\cardsrus\cardshop\
    	CardShopBean.java:3: package javax.ejb does not exist
    [javac] import javax.ejb.Stateless;
    [javac]                  ^
    [javac] C:\java\jbossmigration\mycode-jboss5\src\main\com\cardsrus\cardshop\
    	CardShopBean.java:4: package javax.persistence does not exist
    [javac] import javax.persistence.EntityManager;
    [javac]                          ^

O problema da Lista 9 é causado pela ausência da importação de uma biblioteca. A correção requer outra mudança em build.xml, ilustrada na Lista 10. Inclua o código da Lista 10 nos elementos <fileset> no destino da construção do caminho de classe.


Lista 10. Incluindo uma Importação de Biblioteca

<fileset dir="${jboss.home}/common/lib">
     <include name="*.jar"/>
</fileset>

Após efetuar a mudança na Lista 10, o código Java é compilado com êxito. Este código é implementado no JBoss 5? Infelizmente, não, conforme ilustrado no trecho de log do servidor na Lista 11.


Lista 11. Problemas de Implementação

16:44:03,093 ERROR [AbstractKernelController]
	Error installing to Parse:
	name=vfszip:/C:/java/jboss5/jboss-5.0.0.GA/server/default/deploy/cardsrus.jar
	state=Not Installed mode=Manual requiredState=Parse
	org.jboss.deployers.spi.DeploymentException: Error creating managed object for
	vfszip:/C:/java/jboss5/jboss-5.0.0.GA/server/default/deploy/cardsrus.jar at
	org.jboss.deployers.spi.DeploymentException.rethrowAsDeploymentException
	(DeploymentException.java:49) at
	org.jboss.deployers.spi.deployer.helpers.AbstractParsingDeployerWithOutput.
	createMetaData (AbstractParsingDeployerWithOutput.java:337)

Para corrigir o problema de implementação, é necessária uma modificação no arquivo persistence.xml, conforme ilustrado na Lista 12. No arquivo persistence.xml original, foi necessário substituir a linha <persistence> pelo conteúdo da Lista 12.


Lista 12. Modificação em persistence.xml

<persistence
    xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
    	http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
    version="1.0" >

Após efetuar a mudança na Lista 12, o código é implementado e executado sob o JBoss 5, com saída do cliente semelhante ao que foi visto anteriormente na Lista 4.

Portanto, você finalmente achou seu caminho, tendo migrado o código EJB3 do JBoss 4 para o JBoss 5.



Voltar para parte superior


Conclusão

Mover código EJB3 entre o JBoss 4 e o JBoss 5 não é uma questão simples. Pode ser necessário usar uma ferramenta de migração, como um plug-in do Eclipse, para automatizar algumas ou todas as mudanças de código necessárias. Até lá, espero que este artigo ajude a tornar sua migração suave.



Recursos

Aprender

Obter produtos e tecnologias

Discutir


Sobre o autor

Stephen Morris é um escritor/consultor independente que vive na Irlanda. Com grande experiência em desenvolvimento corporativo e aplicativos de rede, Stephen já trabalhou para para algumas das maiores empresas de rede do mundo em projetos como sistemas de gerenciamento de redes baseadas em Java EE e J2SE, aplicativos de faturamento, sistemas financeiros, entidades SNMP de portabilidade/desenvolvimento, tecnologias de dispositivos de rede e diversos aplicativos de computação remota. Possui mestrado em ciência da computação e três patentes na área de gerenciamento de rede. Ele é o autor de Moving Your Career Up the Value Chain: Building Specialized Development Skills in a Global Economy , assim como de diversos artigos sobre gerenciamento de rede e outros tópicos.




Avalie esta página


Reserve um instante para completar este formulário para nos ajudar a servi-lo melhor.



 


 


Não
são úteis
Extremamente
úteis
 






Voltar para parte superior


IBM, o logotipo da IBM, ibm.com, DB2, developerWorks, Lotus, Rational, Tivoli e WebSphere são marcas ou marcas registradas da International Business Machines Corporation nos Estados Unidos e/ou em outros países. Esses e outros termos de marcas registradas da IBM são marcados em sua primeira ocorrência nessas informações com o símbolo apropriado (® ou ™), indicando marcas registradas nos EUA ou de direito consuetudinário de propriedade da IBM no momento em que essas informações foram publicadas. Tais marcas registradas também podem ser marcas registradas ou de direito consuetudinário em outros países. Consulte a lista atual de marcas registradas da IBM. Adobe, o logotipo Adobe, PostScript e o logotipo PostScript são marcas ou marcas registradas da Adobe Systems Incorporated nos Estados Unidos e/ou em outros países. Java e todas as marcas registradas e logotipos baseados em Java são marcas registradas da Sun Microsystems, Inc. nos Estados Unidos e/ou em outros países. Outros nomes de empresas, produtos ou serviços podem ser marcas registradas ou marcas de serviço de terceiros. Outros nomes de empresas, produtos e serviços podem ser marcas registradas ou marcas de serviço de terceiros.