Garcia-jj HELP-ME! tentando integrar JEE com VRpator 3

3 respostas
Lavieri

soube que você conseguiu, tem como dar uma palinha de como foi feito ?

3 Respostas

G

Rapaz, até me assustei com o título, hehehehe.

Sim, em todos meus projetos uso J2EE integrado ao vraptor. Mas o que você precisa exatamente? A única integração que eu fiz foi um service-locator, já que o ciclo de vida dos objetos do vraptor não está no container, senão poderiamos fazer uma injeção de dependencia.

Além disso há um CustomResult que possui um método onExceptionUse para erros que eu não tratar manualmente e integração com o JAAS do appserver.

Abraços

Lavieri

como funciona esse service locator ???

estou pensando em implementar o Container, e anotar as classes @Resource, @Component, @Intercepts, @ApplicationScoped … etc com anotações do CDI para tornar ele integrado ao JEE

talvez seu service locator me ajude nessa jornada…

estou olhando pro JEE6 mas o JEE5 pode me ajudar…

G
estou pensando em implementar o Container, e anotar as classes @Resource, @Component, @Intercepts, @ApplicationScoped ... etc com anotações do CDI para tornar ele integrado ao JEE

Ainda não tive tempo de conhecer o CDI, não sei ainda do que ele é capaz, nem o que pode fazer. Eu ainda uso a forma do JEE5 com módulo EJB remoto e o módulo web acessando esse módulo através de um client.

como funciona esse service locator ???

Esqueci de perguntar, você está usando EJB?

O Service Locator é um dos Core J2EE Design Patterns, e você pode encontra-lo aqui: http://java.sun.com/blueprints/corej2eepatterns/Patterns/ServiceLocator.html . Eu fiz uma implementação dele que apenas faz o lookup dos EJBs, já que o vraptor não possui gerenciamento pelo appserver, sendo assim não consigo injetar os EJBs.

Aqui tem um exemplo de um service locator para glassfish. Note que até a especificação JEE5 não havia uma padronização para o lookup na árvore JNDI. Na versão JEE6 todos EJBs são expostos na JNDI conforme o nome do EAR + nome do projeto EJB + nome da classe de implementação do EJB. Exemplo java:global/MEU_EAR/MEU_EJB/CLASSE_BEAN

/**
 * Busca um EJB a partir de sua interface remota/local.
 * 
 * @author Otávio Scherer Garcia
 * @version $Revision$
 */
public final class ServiceLocator {

    private static final Logger logger = LoggerFactory.getLogger(ServiceLocator.class);

    private static final String EJB_INFRAESTRUCTURE_LOOKUP = "Não foi possível estabelecer comunicação com o módulo remoto.";

    // inicializa o contexto JDNI local
    private static final InitialContext ctx;

    static {
        try {
            ctx = new InitialContext();
        } catch (NamingException e) {
            throw new InfraestructureException(EJB_INFRAESTRUCTURE_LOOKUP);
        }
    }

    /**
     * Retorna uma instância do EJB a partir da sua interface remota/local.
     * 
     * @param <T> Tipo da interface remota.
     * @param clazz Interface remota para fazer a busca.
     * @return Instância do EJB remoto.
     */
    @SuppressWarnings("unchecked")
    public static <T> T lookup(Class<T> clazz) {
        try {
            logger.info("looking for EJB {}", clazz);
            return (T) ctx.lookup(clazz.getName());

        } catch (NamingException e) {
            throw new InfraestructureException(e);
        }
    }
}
Criado 13 de abril de 2010
Ultima resposta 14 de abr. de 2010
Respostas 3
Participantes 2