Problemas na Migração da aplicação do Jboss 4.0.2 para Jboss 4.2.3.GA

6 respostas
A

Bom dia a todos.

Vixi, não sei se vou conseguir explicar bem o que está rolando, mas vamos lá…

Tenho uma aplicação Web nos moldes cliente/servidor que roda no jboss 4.0.2 de forma estável.

Estou tentando migrar essa aplicação para o jboss 4.2.3.GA e estou esbarrando no seguinte problema.

Existe um action na minha aplicação que recupera um objeto hibernate (HB) com algumas informações do BD.
O usuario informa outras informações e envia a request para gravar na base. Na camada servidor esse HB recebe
algumas outras informações e grava na base. Quando volta pra camada cliente (action) essas novas informações
são usadas para apresentar a resposta para o usuario.

No jboss 4.2.3 quando esse HB passa para camada servidora ele é instanciado novamente na memória e recebe as
informações do HB que veio da camada cliente… Traduzindo em miudos, é criado um objeto diferente na memória.
Quando esse objeto novo é devolvido para camada cliente, as informações novas são perdidas pois na camada cliente ele
é outro objeto… Não sei se fui claro…

Gostaria de saber se esse problema é contornável com alguma configuração do jboss, ou se eu vou ter que mexer no código
da aplicação para que essa continue funcionando.

Já tentei varias combinações de configuração no hibernate-service.xml da minha aplicação, mas nenhuma funcionou… veja como está hoje:

<server>
  <mbean code="org.hibernate.jmx.HibernateService" name="jboss.jca:service=SessionFactory,name=SessionFactory">
	<attribute name="JndiName">java:hibernate/SessionFactory</attribute>

	<attribute name="MapResources">Usuario.hbm.xml,
	TeCliente.hbm.xml, dentre outros...
	</attribute>

	<attribute name="Datasource">java:/OracleDS</attribute>
	<attribute name="Dialect">org.hibernate.dialect.Oracle10gDialect</attribute>
	<attribute name="TransactionStrategy">org.hibernate.transaction.JTATransactionFactory</attribute>
	<attribute name="TransactionManagerLookupStrategy">org.hibernate.transaction.JBossTransactionManagerLookup</attribute>	
	<attribute name="AutoCloseSessionEnabled">false</attribute>
	<attribute name="ShowSqlEnabled">false</attribute>

	<attribute name="SecondLevelCacheEnabled">true</attribute>
	<attribute name="CacheProviderClass">org.hibernate.cache.HashTableCacheProvider</attribute>
    <attribute name="QueryCacheEnabled">true</attribute>

	
    </mbean>
</server>

6 Respostas

Luiz_Gustavo

Olá adrianof,

não sei se vou conseguir te ajudar, mas gostaria muito de pelo menos entender como a aplicação está configurada. Nunca usei esse tipo de configuração e fiquei curioso.
De que arquivo é o trecho que você postou?

Quanto ao seu problema, especificamente, não entendi uma coisa: esse novo objeto que é criado, com base nos dados do objeto que vem da Action, é criado automaticamente pelo Factory do Hibernate, configurado no arquivo, é isso?
Esse ponto não ficou claro pra mim.

Você tem controle sobre este objeto novo, assim como o da camada cliente, no cliente? Se tiver pode sobrescrever as informações no objeto cliente. (é esse tipo de coisa que não sei se dá pra fazer sem entender como a aplicação está estruturada e como esse seu esquema funciona)

Se você pudesse postar algum código, que ajudasse a compreender. :wink:

Abraço!

A

Oi Luiz_Gustavo.

Então, esse trecho é do arquivo [color=blue]hibernate-service.xml[/color] que fica dentro do .har do meu projeto.

Bom, não sei se entendi a sua pergunta, mas esse objeto é instanciado no Action e é povoado com os dados da tela (web) para ser passado para o servidor. Veja trecho do código:

Action.java

SolicitacaoReservaHB solicHB = new SolicitacaoReservaHB();

... código ...

// Setando atribudos do HB...
solicHB.setStatus(SolicitacaoReservaHB.ST_NOVO);

... + código ...

// Chamada da camada de negócio/persistência (parte servidora) 
DelegateManipSolic delegate = new DelegateManipSolic();
Mensagem retorno = delegate.incluirSolicitacao(solicHB);

if (retorno.sucesso()) {
    // Monta a resposta de acordo com o que foi modificado no slicHB e gravado na base.			   
    request.setAttribute(ConstantesInterface.TITULO_MENSAGEM,Label.toString(Label.SUCESSO, l));
       
    ArrayList resp = new ArrayList();
    //Adiciona Numero da solicitacao na resposta
    RespostaVO respostaNumSolicHb = new RespostaVO();
    respostaNumSolicHb.setLabel(Label.toString(Label.NUMSOLICRESERVA, l));
    respostaNumSolicHb.setValor(solicHB.getNumSolic().toString()); // Atenção a esse ponto!

    ... demais código

Veja que no ponto que eu chamei a atenção, no jboss 4.0.2 essa variável vem preenchida com o valor recuperado durante
a transação no servidor, mas no jboss 4.2.3 essa variável vem nula, pois na parte servidora o objeto utilizado é outro.

Não sei porque ocorre isso, pois a aplicação e a base são as mesmas… A única coisa que muda é o servidor… Já procurei de tudo
quanto é geito na internet pra ver onde eu configuro esse tipo de comportamento. Mas até agora, nada…

É isso… Agradeço o interesse!

[]'s

Luiz_Gustavo

Entendi.
Achei que você passasse algo e recebesse esse objeto como retorno, como por exemplo:

ObjetoA objA = new ObjetoA();

... preenche as propriedades do objA

objA = delegate.processar(objA);

Mas entendi que você espera que o próprio objeto passado como parâmetro seja atualizado.
Bom, se eu encontrar algo que possa ajudar posto aqui.
Uma dica é olhar a lista de features que mudaram de uma versão para outra do JBoss, pra ver se é citada alguma modificação nesse comportamento.

Abraço!

Luiz_Gustavo

Release Notes: http://sourceforge.net/project/shownotes.php?release_id=614346

Talvez você encontre algo.
Pelo que vi eles garantem a compatibilidade da versão 4.2.3 com a série 4.2.X:

Talvez compense dar uma olhada também nos release notes da versão 4.2.0: http://sourceforge.net/project/shownotes.php?release_id=507793

Olhei por cima, e o que pode perceber foram as mudanças nas versões do Hibernate. Fora isso nada citando (pela rápida olhada que eu dei) mudanças no comportamento que você mencionou.

Tento alguma novidade eu posto aqui.

Abraço!

A

Blz Luiz! Vou dar uma olhada sim!!

Continuo pesquisando o que pode ser, mas até agora nada…

Valeu pela ajuda!

[]'s

Luiz_Gustavo

Olha só, não sou especialista em Hibernate, mas dá uma olhada nesses issues:

Parecem ter algo a ver:

https://jira.jboss.org/jira/browse/JBPAPP-908
http://opensource.atlassian.com/projects/hibernate/browse/HHH-3309

Se esse for o caso, bastaria usar as versões que corrigem o problema.

Criado 14 de agosto de 2009
Ultima resposta 14 de ago. de 2009
Respostas 6
Participantes 2