recursoHome = (RecursoHome)initContext.lookup(JNDIName);
Mas debugando no eclipse, verifiquei que initContext.lookup(JNDIName) retorna um objeto “_RecursoHome_Stub”. O cast não devia dar certo?
(Estou usando Sun One Appication Server 7 com struts e ejb)
O problema é na hora de inicializar RecursoDelegate, e me parece que é do lado do servidor. O narrow provavelmente está fazendo alguma chamada remota que está fazendo dar esse pau.
Cole o código de RecursoDelegate aqui e, por favor, inclua esse código num bloco code.
Roger75
Segue o código do meu Delegate:
packagesamples.jdbc.simple.teste.delegate;importjava.util.Collection;importjava.util.Hashtable;importjavax.naming.InitialContext;importsamples.jdbc.simple.teste.remote.RecursoHome;importsamples.jdbc.simple.teste.remote.RecursoObject;importsamples.jdbc.simple.teste.serviceLocator.ServiceLocator;importsamples.jdbc.simple.teste.vo.RecursoVO;importjavax.rmi.PortableRemoteObject;publicclassRecursoDelegate{// Remote reference for Session FacadeprivateRecursoObjectejbObject;// Class for Session Facade's Home objectprivatestaticfinalClasshomeClazz=RecursoHome.class;// Default Constructor. Looks up home and connects// to session by creating a new onepublicRecursoDelegate()throwsException{RecursoHomerecursoHome;InitialContextinitContext=null;Hashtableenv=newjava.util.Hashtable(1);try{initContext=newjavax.naming.InitialContext();System.out.println("- Retornou initial context com sucesso");}catch(Exceptione){System.out.println("- Excecao criando InitialContext: "+e.toString());return;}try{System.out.println("Procurando recursoBean home interface...");StringJNDIName="java:comp/env/ejb/Recurso";System.out.println("- Procurando por: "+JNDIName);Objectobjref=initContext.lookup(JNDIName);recursoHome=(RecursoHome)PortableRemoteObject.narrow(objref,RecursoHome.class);System.out.println("- Encontrou recursoHome");}catch(Exceptione){e.printStackTrace();}Objecto=ServiceLocator.getInstance().getEJBHome("java:comp/env/ejb/Recurso",homeClazz);// RecursoHome ejbHome = (RecursoHome)// ServiceLocator2.getInstance().getEJBHome(// "ejb/Recurso", homeClazz);//RecursoHome ejbHome = (RecursoHome)o;RecursoHomeejbHome=(RecursoHome)ServiceLocator.getInstance().getEJBHome("java:comp/env/ejb/Recurso",homeClazz);ejbObject=ejbHome.create();}//public void setRecurso (RecursoVO recurso) throws Exception {// ejbObject.setRecurso(recurso);// }// public void updateRecurso (RecursoVO recurso) throws Exception {// ejbObject.updateRecurso(recurso);// }publicCollectiongetRecursos()throwsException{returnejbObject.getRecursos();}publicRecursoVOgetRecurso(IntegerrecursoId)throwsException{returnejbObject.getRecurso(recursoId);}// public void removeRecurso (Integer recursoId) throws Exception {// ejbObject.removeRecurso(recursoId);// }// public void setRecursoXML (InputStream inputStream) throws Exception {// ejbObject.setRecursoXML(inputStream);// }}
(No preview a tag code não funciona direito, por isso não tava usando...)
G
Giuliano_Mega
Agora entendi. Essa classe já é de lado servidor.
Minhas hipóteses estão esgotadas - eu de fato nunca tive esse problema. Levantar novas hipóteses via fórum fica meio difícil, então acho que não vou poder te ajudar.
Boa sorte.
Abraços,
Roger75
Apesar de não ter resolvido o problema agradeço a atenção.
Roger75
Consegui resolver o problema!
O empacotamento que dava certo no JBoss não dava certo no SunOne. No JBoss eu tinha os seguintes pacotes:
Arquivo war:
No SunOne esta estrutura dá pau. Então coloquei as classes dos pacotes remote e bean num pacote ejb, e este pacote coloquei no jar(EJB), além de remover os pacotes remote e bean.
Eu pensava que todos os containers aceitavam a mesma estrutura de pacotes, eles não têm que seguir a especificação J2EE?
Percebi que este problema é complicado, pois coloquei a pergunta até nos fóruns da Sun e do Javaranch mas não obtive resposta não…