Estou desenvolvendo um aplicativo web onde utilizo EJB, JPA, JSF 2.0 e Primefaces. Preciso implementar um custom converter pra recuperar uma lista de registros do banco de dados e popular um h:selectOneMenu, porém não consegui fazer funcionar de forma alguma. Quando tento persistir o registro no banco é mostrado um erro dizendo que o EJB está null. O que fazer ?
Olá, voce terá que fazer um lockup para recuperar seu EJB, porque ele não é injetado no Converter isso não faz parte da especificação…
Espero ter ajudado.
H
hugo.hlcxcx
patricia_java:
Olá, voce terá que fazer um lockup para recuperar seu EJB, porque ele não é injetado no Converter isso não faz parte da especificação…
Espero ter ajudado.
E como eu faria isso ? Tem um exemplo pra me passar ?
H
hugo.hlcxcx
Alguém se habilita a responder ?
R
rogerioeerr
opa vai ai dr um exemplo da minha aplicação.
/** * * @author Rogério Martins da Silva 04/11/2011 */@FacesConverter(value="anoConverter")publicclassAnoConverterimplementsConverter{privateAnoSessionRemotegetSession(){try{return(AnoSessionRemote)newInitialContext().lookup("br.com.usinaweb.secom.sessionbean.interfaces.AnoSessionRemote");}catch(Exceptionex){thrownewIllegalArgumentException(ex);}}@OverridepublicObjectgetAsObject(FacesContextcontext,UIComponentcomponent,Stringvalue){AnoSessionRemoteinstance=getSession();Integercodigo=newInteger(0);try{codigo=Integer.valueOf(value);}catch(NumberFormatExceptione){returnnull;}catch(Exceptione){}returninstance.getById(codigo);}@OverridepublicStringgetAsString(FacesContextcontext,UIComponentcomponent,Objectvalue){if(value==null){returnnull;}return((EscAnoLetivo)value).getAnltvCodigo().toString();}}
H
hugo.hlcxcx
Tenho 2 perguntas:
1 - E necessário criar algum método específico no meu EJB ?
2 - Por que tem que ser usada a interface Remote do EJB ? Aqui estou usando EJB 3.1, onde não é necessário declarar nenhuma interface, apenas a sua implementação, que nesse caso vai funcionar como EJB Local. Eu posso fazer lookup em um bean Local ?
R
rogerioeerr
opa, quanto a 1º pergunta não é necessário criar nenhum método
quanto a 2ª também uso ejb 3.1 e se eu não estiver enganado você tem sim que criar a interface remota, mas tenta fazer o teste com a local ai.
H
hugo.hlcxcx
Acabei de testar e não funciona caso o EJB seja Local. Parece que vou ter que criar a interface remota mesmo.
Senhores ainda continuo com o problema de não conseguir fazer lookup em um EJB de dentro de um Converter. Já testei tidas as soluções postadas aqui. Alguém tem mais alguma sugestão ?
Desde ja agradeço.
S
saviobarr
Olá,
Conseguiu resolver o problema?
Abcs
K
kamposdiego
rogerioeerr:
opa vai ai dr um exemplo da minha aplicação.
/** * * @author Rogério Martins da Silva 04/11/2011 */@FacesConverter(value="anoConverter")publicclassAnoConverterimplementsConverter{privateAnoSessionRemotegetSession(){try{return(AnoSessionRemote)newInitialContext().lookup("br.com.usinaweb.secom.sessionbean.interfaces.AnoSessionRemote");}catch(Exceptionex){thrownewIllegalArgumentException(ex);}}@OverridepublicObjectgetAsObject(FacesContextcontext,UIComponentcomponent,Stringvalue){AnoSessionRemoteinstance=getSession();Integercodigo=newInteger(0);try{codigo=Integer.valueOf(value);}catch(NumberFormatExceptione){returnnull;}catch(Exceptione){}returninstance.getById(codigo);}@OverridepublicStringgetAsString(FacesContextcontext,UIComponentcomponent,Objectvalue){if(value==null){returnnull;}return((EscAnoLetivo)value).getAnltvCodigo().toString();}}
Boa tarde Galera!
Gostaria de agradecer ao rogerioeerr! Cara essa implementação da injeção do EJB por lookup foi a mais fácil que eu encontrei. Foi batata. E o converter mais fácil que achei para me basear já estava a quase dois dias sem dormir por causa disso. Gostaria de saber se não tem como dar uma ajuda, por que está dando um erro de validação.