Configuração GlassFish para uso do @PostActivate e @PrePassivate

8 respostas
Diabo_Loiro

Estava testando essas funcionalidades dos StateFull Session Beans no glassfish e simplesmente ele não executa o @PostActivate… eu encontro o mesmo problema do nosso Amigo.

Link http://www.mentby.com/glassfish/testing-stateful-session-prepassivate-and-postactivate-in-glassfish-v3.html

Falarão que é um bug do glassfish mais gostaria de saber se alguém já utilizou esse recurso com o glassfish.

Obrigado.

8 Respostas

dev.rafael

O q vc fez p/ se certificar de o seu SFSB passou por passivation?

Diabo_Loiro

Sei que ele a passiva porque ele chama o método anotado com @PrePassivate o problema é que depois que depois que ele chamou o @PrePassivate ele não chama o @PostActivate como se o SFSB tivesse sido removido em vez de a passivado… e eu recebo a exception do link acima, ainda dei uma olhada na configuração do glassfish e esta normal configurado para ele fazer cache ou seja deveria serializar e deserializar o SFSB.

Realmente não entendi o por que acontece isso mais ai vi que falarão de um bug no glassfish la no topico do outro forum … se você tiver curiosidade de tentar, serial bom ter uma segunda opinião se quiser eu posto o codigo é bem simples.

dev.rafael

Posta o código ai q eu tento fazer um teste.

Diabo_Loiro

Tah bem simples o codigo… era so pro jsf chama nosso amigo ejb… falta alguns pedaços estava melhorzinho mais não salvei se conseguir testar… ate quando voce desliga o servidor ele executa o @PrePassivate e não o @PreDestroy, vlw a disposição ai.

EJB

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.bruno;

import java.util.concurrent.TimeUnit;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;
import javax.ejb.EJBContext;
import javax.ejb.PostActivate;
import javax.ejb.PrePassivate;
import javax.ejb.SessionContext;
import javax.ejb.Stateful;
import javax.ejb.StatefulTimeout;

/**
 *
 * @author bruno.marinho
 */
@Stateful
@StatefulTimeout(unit = TimeUnit.SECONDS, value = 5)
public class MeuSessionBeanStateful implements MeuSessionBeanStatefulLocal {

    @Resource
    private EJBContext context;
    @Resource
    private SessionContext Sessioncontext;
    private int processamento;

    @PostConstruct
    private void inicio() {
        System.out.print("Criada uma nova instancia [ " + this + " ]");

    }

    @PostActivate
    private void conecta() {
        System.out.print(" Conectou ao servidor ");
    }

    @PrePassivate
    private void desconecta() {
        System.out.print(" desconectou ao servidor ");
    }

    public String processamento() {

        System.out.print("processando metodo" + context.getCallerPrincipal() + " - " + Sessioncontext.getInvokedBusinessInterface());
        processamento++;

        return "processando metodo";
    }

    @PreDestroy
    private void fim() {
        System.out.print(" [ " + this + " ] realizou processamentos " + processamento);
    }
}

Backing Bean

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.bruno.beans;

import br.com.bruno.MeuSessionBeanLocal;
import br.com.bruno.MeuSessionBeanStatefulLocal;
import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

/**
 *
 * @author bruno.marinho
 */
@ManagedBean
@SessionScoped
public class MeuManagedBean {

    @EJB
    MeuSessionBeanStatefulLocal ejb;
    private String textoStateful;

    public String getTexto() {
        return ejb.processamento();
    }

    public String getTextoStateful() throws InterruptedException {
         
        ejb.processamento();
        Thread.sleep(10000);      
        return ejb.processamento();
    }

    public void setTextoStateful(String textoStateful) {
        this.textoStateful = textoStateful;
    }

    /** Creates a new instance of MeuManagedBean */
    public MeuManagedBean() {
    }
}

index.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
       
            <h:outputText value="#{meuManagedBean.textoStateful}"/>
      
        
    </h:body>
</html>
dev.rafael

Diz ai, qual versão do Glassfish vc usou?

Diabo_Loiro

A versao 3 que vem no pacote do netbeans 6.9.1.

dev.rafael

Cara, eu fiz alguns testes com o Glassfish v3 e obtive o mesmo problema q vc. No v2 eu ñ obtive sucesso em simular a “passivação” do SFSB. Eu vou tentar fazer mais alguns testes com o Glassfish v2 e com o Resin e tb com os nightly builds do v3 p/ garantir q é mesmo um bug.

Diabo_Loiro

Obrigado pela disposição de testar ja estava aborrecido… com isso vou testar no Jboss quando tiver um tempo.

Criado 10 de novembro de 2010
Ultima resposta 11 de nov. de 2010
Respostas 8
Participantes 2