[resolvido] Bean provider no vraptor3

2 respostas
G

Tenho uma aplicação que usa vraptor2. Essa aplicação usa EJB remoto, e por isso fiz um bean provider para fazer lookup dos meus ejbs. Eis os fontes:

public final class EJB3BeanProvider
    implements BeanProvider {

    private final BeanProvider provider;

    public EJB3BeanProvider(BeanProvider provider) {
        this.provider = provider;
    }

    public Object findAttribute(LogicRequest request, String key) {
        if (key.startsWith("br.com.meupacote")) {
            return ServiceLocator.getEJB(key);
        }

        return provider.findAttribute(request, key);
    }
}

Porém como faço isso no vraptor3? Na documentação diz apenas que posso fazer um provider customizado, porém não há instruções de como fazer.

2 Respostas

Lucas_Cavalcanti

O que você pode fazer, que não é tão genérico, mas vai ficar melhor de usar é:

para cada EJB, você faz:

@Component
// se fizer sentido coloque @SessionScoped ou @ApplicationScoped
public class AlgumEJBFactory implements ComponentFactory<AlgumEJB> {
      public AlgumEJB getInstance() {
            return (AlgumEJB) ServiceLocator.getEJB(AlgumEJB.class.getName());
      }
}

e nas classes que vão usar esse EJB, basta recebê-lo no construtor:

@Controller // ou @Resource
public class MinhaClasse {
    public MinhaClasse(AlgumEJB ejb) {
         //...
    }
}

[]'s

G

Lucas, optei por usar direto o service locator na declaração do atributo, pois seria um pouco chato criar uma factory para cada ejb. Seria mais classes para dar manutenção.

public class CustomerController {
    private final CustomerService customerService = ServiceLocator.getEJB(CustomerService.class);

    [...]
}
Criado 26 de setembro de 2009
Ultima resposta 27 de set. de 2009
Respostas 2
Participantes 2