Erro de invocação de EJB

16 respostas
M

Salve,

Estou precisando de uma ajudinha, eu criei um ejb teste “HelloWorld” para fazer alguns teste mas estou tendo alguns probleminhas com jndi.

O meu cliente não está conseguindo obter a refência de minha interface… fiz o seguinte:

  • HelloWorld -> inteface objeto ejb;
  • HelloWoldHome -> interface ejbhome;
  • HelloWoldBean -> bean
Properties properties = new Properties();
	properties.put( Context.INITIAL_CONTEXT_FACTORY, 
		"org.jnp.interfaces.NamingContextFactory");
	properties.put( Context.PROVIDER_URL, "localhost:1099");
	
	try {
		// obtém contexto inicial
		InitialContext contextoJndi = new InitialContext(properties);
		// obtém uma referência para o bean
		Object ref = contextoJndi.lookup("HelloWorld");
		
		// obtém referência da interface local
		HelloWorldHome local = ( HelloWorldHome )
			PortableRemoteObject.narrow( ref, HelloWorldHome );
		
		// cria um objeto adiciona vindo da interface local
		HelloWorld hello = hello.create();
		out.println( hello.mensagem() );
	} catch ( Exception e ) {
		System.out.println(e.toString() );
	}

O erro é o seguinte:

14:00:12,091 ERROR [LogInterceptor] EJBException in method: public abstract com.marcossousa.ejb.HelloWorld com.marcossousa.ejb.HelloWorldHome.create() throws java.rmi.RemoteException,javax.ejb.CreateException: javax.ejb.EJBException: Invalid invocation, check your deployment packaging, method=public abstract com.marcossousa.ejb.HelloWorld com.marcossousa.ejb.HelloWorldHome.create() throws java.rmi.RemoteException,javax.ejb.CreateException at org.jboss.ejb.StatelessSessionContainer$ContainerInterceptor.invokeHome(StatelessSessionContainer.java:161) at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invokeHome(CachedConnectionInterceptor.java:212) at org.jboss.ejb.plugins.AbstractInterceptor.invokeHome(AbstractInterceptor.java:90) at org.jboss.ejb.plugins.CallValidationInterceptor.invokeHome(CallValidationInterceptor.java:41) at org.jboss.ejb.plugins.TxInterceptorBMT.invokeHome(TxInterceptorBMT.java:54) at org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor.invokeHome(StatelessSessionInstanceInterceptor.java:81) at org.jboss.ejb.plugins.SecurityInterceptor.invokeHome(SecurityInterceptor.java:116) at org.jboss.ejb.plugins.LogInterceptor.invokeHome(LogInterceptor.java:121) at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invokeHome(ProxyFactoryFinderInterceptor.java:93) at org.jboss.ejb.SessionContainer.internalInvokeHome(SessionContainer.java:613) at org.jboss.ejb.Container.invoke(Container.java:894) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:141) at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80) at org.jboss.mx.server.Invocation.invoke(Invocation.java:72) at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:249) at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:644) at org.jboss.invocation.local.LocalInvoker$MBeanServerAction.invoke(LocalInvoker.java:155) at org.jboss.invocation.local.LocalInvoker.invoke(LocalInvoker.java:104) at org.jboss.invocation.InvokerInterceptor.invokeLocal(InvokerInterceptor.java:179) at org.jboss.invocation.InvokerInterceptor.invoke(InvokerInterceptor.java:165) at org.jboss.proxy.TransactionInterceptor.invoke(TransactionInterceptor.java:46) at org.jboss.proxy.SecurityInterceptor.invoke(SecurityInterceptor.java:55) at org.jboss.proxy.ejb.HomeInterceptor.invoke(HomeInterceptor.java:169) at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:86) at $Proxy53.create(Unknown Source) at org.apache.jsp.adiciona_jsp._jspService(org.apache.jsp.adiciona_jsp:80) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97) at javax.servlet.http.HttpServlet.service(HttpServlet.java:810) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264) at javax.servlet.http.HttpServlet.service(HttpServlet.java:810) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:81) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) at org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java:39) at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:153) at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:59) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112) at java.lang.Thread.run(Thread.java:595) 14:00:12,151 INFO [STDOUT] java.rmi.ServerException: EJBException:; nested exception is: javax.ejb.EJBException: Invalid invocation, check your deployment packaging, method=public abstract com.marcossousa.ejb.HelloWorld com.marcossousa.ejb.HelloWorldHome.create() throws java.rmi.RemoteException,javax.ejb.CreateException

Alguém tem alguma idéia???[/code]

16 Respostas

M

Bem galera, eu fiz algumas mudanças em meu ejb mas os erros continuam os mesmos. Eu adotei o pacote com.marcossousa.ejb e utilizei as seguinte intefaces e beans listados abaixo:

- Inteface local
package com.marcossousa.ejb;

import java.rmi.RemoteException;

import javax.ejb.CreateException;
import javax.ejb.EJBHome;


public interface AdicionaLocal extends EJBHome
{
	Adiciona create() throws RemoteException, CreateException;
}
- objeto ejb
package com.marcossousa.ejb;

import java.rmi.RemoteException;

import javax.ejb.EJBObject;

public interface Adiciona extends EJBObject {
	public int adiciona( int a, int b ) throws RemoteException;
}
- bean
package com.marcossousa.ejb;

import java.rmi.RemoteException;

import javax.ejb.EJBException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;

public  class BeanAdiciona implements SessionBean 
{

	public int adiciona( int a, int b ) throws RemoteException
	{
		System.out.println("direto do bean");
		return ( a + b );
	}
	public void setSessionContext(SessionContext arg0) 
		throws EJBException, RemoteException {
	}

	public void ejbRemove() throws EJBException, RemoteException {
	}

	public void ejbActivate() throws EJBException, RemoteException {
	}

	public void ejbPassivate() throws EJBException, RemoteException {		
	}
	
	public void ejbCreate(){
	}
}
e por fim o conteúdo do ejb-jar.xml
...
(ejb-jar)
(description)Minha primeira aplicação ejb(/description)
(display-name>Aplicação Adiciona(/display-name)
(enterprise-beans)
(session)
(ejb-name)Adiciona(/ejb-name)
(home)com.marcossousa.ejb.AdicionaLocal(/home)
(remote)com.marcossousa.ejb.Adiciona(/remote)
(ejb-class)com.marcossousa.ejb.BeanAdiciona(/ejb-class)
(session-type)Stateless(/session-type)
(transaction-type)Bean(/transaction-type)
(/session)
(/enterprise-beans)
</ejb-jar>
* substitui < por ( e > por );

Mensagens de compilação expressas pelo jboss:

22&#58;33&#58;51,269 INFO  &#91;EjbModule&#93; Deploying Adiciona
22&#58;33&#58;51,860 INFO  &#91;EJBDeployer&#93; Deployed&#58; file&#58;/C&#58;/jboss-4.0.2/jboss-4.0.2/se
er/default/deploy/Adiciona.jar
22&#58;33&#58;52,331 INFO  &#91;TomcatDeployer&#93; deploy, ctxPath=/AdicionaCliente, warUrl=fil
e&#58;/C&#58;/jboss-4.0.2/jboss-4.0.2/server/default/tmp/deploy/tmp18603AdicionaCliente-
exp.war/
Mensagem erro:
22&#58;54&#58;35,358 INFO  &#91;STDOUT&#93; java.rmi.ServerException&#58; EJBException&#58;; nested exption is&#58;
        javax.ejb.EJBException&#58; Invalid invocation, check your deployment packing,
method=public abstract com.marcossousa.ejb.Adiciona com.marcossousa.ejb.A
cionaLocal.create&#40;&#41; throws java.rmi.RemoteException,javax.ejb.CreateException

E agora, alguém tem alguma idéia???

M

humm, isso ai é JBoss com Lomboz? cara, eu recebia esse erro direto qnd eu deixava o JBoss startado e só ficava dando deploy do bean o tempo todo pra testar… mas, se eu removesse o bean do container, restartasse o JBoss, e fazia um novo deploy do mesmo código, funcionava… 8O , o pq disso eu não sei, faz tempo, try it :joia:

M

Bem, não é com o Lomboz mas estou fazendo como ele faz com meus webs em servlets e jsf. Eu starto e colo os .jar e .war. Valeu pela dica. Vou tentar.

:pensativo:

M

Opa,

Bem eu fiz isto, mas o erro continuou… removi o bean do container mas nada de diferente aconteceu quando eu colei os o bean e o cliente antes de conectar e nada… fiz usando o lomboz da forma que você disse e nada também.

Vou ver se encontro na documentação do Jboss alguma coisa mais amistosa do que esta mensagem de erro.

Mas se tiverem mais idéias também, ficarei grato.
:pensativo:

M

hum… eu realmente ja tinha tido esse erro várias vezes, mas faz mais de ano q não uso ejb :roll: , nao lembro de cór agora

M

opa,

Matheus eu consegui, bem a fonte que pesquisei estava incorreta, ou nem sei como mas deu certo. O livro dizia que tinha que adicionar a classe home e remote em web-inf/classes. Bem eu vinha fazendo isto, aí eu retirei as classes como uma tentativa inválida, tosca mesmo e funcionou.

valeu pelas dicas…

Bem eu fiz alguns ejbs com lomboz curti muito a agilidade de criar um ejb completo, mas ele inclui algumas classes extras… :oops:

:okok:

S

Um aviso…

Nunca pode lançar a exception RemoteException de dentro do Bean. O Bean não é remoto, são as interfaces Home/Component que são.

A spec do EJB 2.0 diz que NÃO pode nem declarar no throws o RemoteException (dentro do seu bean).

M

Salve,

bem quando eu postei o código, estava tentando fazer de todas as formas para funcionar por isto que coloquei a exceção RemoteException no método que ia utilizar, e mais descobri porque estava errado agora sim uma explicação mais lógica, porque ao retirar as classes da cliente ele funciona somente de estiver executando em uma mesma máquina. Na verdade este erro provém de um bug do jboss 4.02, encontrei várias pessoas com este mesmo problema. Caso quiserem da uma olhada os links são estes:
http://www.jboss.com/?module=bb&op=viewtopic&t=64165 e http://jira.jboss.com/jira/browse/JBAS-1691#action_12317322

valeu :wink: .

:okok:

S

Não vejo a hora de tirar logo a SCBCD (próximo dia 17, junho), não aguento mais pensar em EJB!

M

Boa sorte,

hehehehe, bem estou começando esta jornada agora.!!!

até mais.

A

Olá a todos,

queria aproveitar que o tópico trata de algo semelhante e ver se alguém pode me ajudar com um problema. O seguinte trecho de código

public void init&#40;ServletConfig config&#41; throws ServletException &#123; try &#123; Context context = new InitialContext&#40;&#41;; Object ref = context.lookup&#40;&quot;java&#58;/comp/env/ejb/Fibo&quot;&#41;; home = &#40;FiboHome&#41; PortableRemoteObject.narrow&#40;ref, FiboHome.class&#41;; &#125; catch &#40;Exception e&#41; &#123; throw new ServletException&#40;&quot;Lookup of java&#58;/comp/env/ failed&quot;&#41;; &#125; &#125;

apresenta esta mensagem de erro

&#91;STDOUT&#93; javax.naming.NamingException&#58; Could not dereference object &#91;Root exception is javax.naming.NameNotFoundException&#58; ejb not bound&#93;

Alguém sabe me dizer o que pode estar errado?

S

Isto parece erro de referência ou de deploy.
Você colocou o ejb-ref no deployment descriptor ?

A

Retirado do web.xml:

&lt;ejb-ref &gt; &lt;ejb-ref-name&gt;ejb/Fibo&lt;/ejb-ref-name&gt; &lt;ejb-ref-type&gt;Session&lt;/ejb-ref-type&gt; &lt;home&gt;tutorial.interfaces.FiboHome&lt;/home&gt; &lt;remote&gt;tutorial.interfaces.Fibo&lt;/remote&gt; &lt;/ejb-ref&gt;

Estou usando o jboss-ide para o eclipse, gerando os xmls com xdoclet e o container usado é o jboss 4.0.2.

S

Não conheço muito o JBoss, deve ser algo específico do contâiner, algum configuração ou arquivo de configuração.

M

Bem,

para o objeto lookup, não é necessário entrar com o pacote completo ou seja, substitua:

Object ref = context.lookup&#40;"java&#58;/comp/env/ejb/Fibo"&#41;;

por

Object ref = context.lookup&#40;"Fibo"&#41;;

acho que resolve o teu problema.

:okok:

S

Sei não heim… eu sempre user o java:comp/env

OPA! É isso… eu sempre user “java:comp/env” e não “java:/comp/env”

muda ai que funciona!

Criado 26 de maio de 2005
Ultima resposta 9 de jun. de 2005
Respostas 16
Participantes 4