soube que você conseguiu, tem como dar uma palinha de como foi feito ?
Garcia-jj HELP-ME! tentando integrar JEE com VRpator 3
3 Respostas
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
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…
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);
}
}
}