Reflection Jar EJB

6 respostas
brunobuild

Pessoal,

Eu tenho um componente(jar), que tem algumas classes utilitáras por exemplo fazer um newinstance de uma classe.

Esse componente é um jar e eu o coloco dentro do projeto EAR.

Dentro do jar eu tenho um método que recebe um Class como parametro e ele faz o newinstance.

Class.forName(clazz.getName()).newInstance()

Porém como é uma classe que está dentro do módulo EJB e não dentro do Jar ele aparece Classnotfound.

Estou configurando o meu classpath errado?

6 Respostas

dev.rafael

Se vc está usando a chamada:

Class.forName(clazz.getName()).newInstance();

p/ instanciar um EJB é importante lembrar q, segundo a especificação, EJBs não podem ser manipulados via refletion.
Isso pq no deploy os EBJs são instrumentados através de API de instrumentação de bytecode e como resultado um
EJB chamado digamos Powerslave, em tempo de execução pode receber um nome do tipo EJB31_Generated__Powerslave__Intf____Bean.

brunobuild

Na verdade não estou instanciando um EJB, é um objeto que fica dentro do EJB.

Por exemplo eu tenho minha classe que é EJB e implementa um determinado método e ele precisa de um objeto sei lá um DAO por exemplo ai eu passo o class para que a minha classe instancie ele pra mim.

Sendo que o meu DAO não é EJB.

dev.rafael

Segundo a especificação os EJBs tb ñ podem usar a API de java.lang.reflection, bem como java.io, java.lang.Thread entre outras. Efetivamente ñ há nada q o impeça de faze-lo e funcionar mas esse comportamento ñ é garantido pela especificação, ou seja, pode funcionar em um server e ñ funcionar em outro ou mesmo funcionar em uma versão e ñ em outra. Tb ñ importa se o seu EJB chama dirétamente o método da API proíbida ou se chama um método de uma outra classe q por sua vez chama a API proíbida, de qualquer forma, esse pode ser o seu caso. Caso vc realmente necessite de reflection p/ o q vc está implementando vc pode tentar passar dirétamente o MyDAO.class ao invés do MyDAO.class.getName().

brunobuild

Na verdade estou com dois problemas.

Estou com com dois problemas esse é um de reflection mas acho que o outro problema está ligado a ele.

Eu tenho uma classe que é responsável por carregar o meu arquivo de mensagens também um .properties

Só que essa classe está dentro do jar eo meu properties está dentro do meu war e está dizendo que o arquivo não pode ser encontrado, isso também não pode ser usado?

dev.rafael

Apenas os EJBs sofrem dessas restrições, componentes WEB podem criar e gerênciar Threads, ler e escrever arquivos e tudo mais que é proíbido para os EJBs. Só é importante checar quem é a classe que está tentando carregar esse arquivo porque se ela for um EJB ou estiver sendo chamada por um, então ela sofre das mesmas restrições pois estará sendo executado dentro do container EJB.

Por outro lado, a API de connectors do JEE te permite superar essas restrições. Você pode escrever connectors que permitirão aos EJBs fazerem quaisquer coisas você queira (menos criar e gerênciar Threads). Eis aqui um tutorial: http://docs.jboss.org/teiid/7.0.0/developer-guide/en-US/html/develop_adapter.html

bobboyms

hehehe… vamos la!!! apesar de não ter entendido, Vai ae uma dica… Se você quer fazer algo semelhante a IoC - injeção de dependências.

da uma olhada nesse link:

http://www.guj.com.br/java/245721-framework-de-injecao-de-dependencia-revolucionario-confiram/2

Criado 19 de julho de 2011
Ultima resposta 20 de jul. de 2011
Respostas 6
Participantes 3