Chamar ejb a partir de servlet

0 respostas
C

Pessoal, tenho uma servlet e quero fazer com que ela pegue um ejb em outro servidor. O Jboss esta na maquina x e o Tomcat na maquina b. Meu codigo ta assim

package br.com.carrinhoweb;

import java.io.IOException;
import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.carrinho.CarrinhoRemote;
import br.com.carrinho.Livro;

public class AdicionaLivro extends HttpServlet {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -6513786864388364292L;

	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
		
		InitialContext ctx = inicializaContexto();
		CarrinhoRemote cr = (CarrinhoRemote) localizaBean(ctx, "CarrinhoBean/remote");
		
		int codigo = Integer.parseInt(request.getParameter("codigo"));
		String titulo = request.getParameter("titulo");
		double preco = Double.parseDouble(request.getParameter("preco"));
		
		Livro livro = new Livro();
		livro.setCodigo(codigo);
		livro.setTitulo(titulo);
		livro.setPreco(preco);
		
		if((ctx!=null)&&(cr!=null)) {
			cr.addLivro(livro);
		}
		
		RequestDispatcher rd = request.getRequestDispatcher("/index.jsp");
		rd.forward(request, response);	
	}
	
	private InitialContext inicializaContexto() {

		Hashtable<String, String>env = new Hashtable<String, String>();
		env.put( Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory" );
		env.put( Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces" );
		env.put( Context.PROVIDER_URL, "jnp://192.168.1.5:1099" );
		
		InitialContext ic = null;
		try {
			ic = new InitialContext(env);
		}
		catch(NamingException nex) {
			nex.printStackTrace();
		}
		return ic;
	}
	
	private Object localizaBean(InitialContext ic, String bean) {
		
		Object obj = null;
		try {
			obj = ic.lookup(bean);
		}
		catch(NamingException nex) {
			nex.printStackTrace();
		}
		return obj;
	}
	
}

Se eu passar o objeto env para InitializeContext obtenho esse erro

javax.naming.NoInitialContextException: Cannot instantiate class: org.jnp.interfaces.NamingContextFactory [Root exception is java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory]
	at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
	at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
	at javax.naming.InitialContext.init(Unknown Source)
	at javax.naming.InitialContext.<init>(Unknown Source)
	at br.com.carrinhoweb.AdicionaLivro.inicializaContexto(AdicionaLivro.java:57)
	at br.com.carrinhoweb.AdicionaLivro.service(AdicionaLivro.java:28)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	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.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:869)
	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1352)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1198)
	at java.lang.ClassLoader.loadClassInternal(Unknown Source)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Unknown Source)
	at com.sun.naming.internal.VersionHelper12.loadClass(Unknown Source)
	... 21 more
21/08/2007 21:56:54 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet testeDeStruts threw exception
java.lang.NullPointerException
	at br.com.carrinhoweb.AdicionaLivro.localizaBean(AdicionaLivro.java:69)
	at br.com.carrinhoweb.AdicionaLivro.service(AdicionaLivro.java:29)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	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.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:869)
	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	at java.lang.Thread.run(Unknown Source)

Se eu retirar o objeto env ele apresenta:

javax.naming.NameNotFoundException: Name CarrinhoBean is not bound in this Context
	at org.apache.naming.NamingContext.lookup(NamingContext.java:769)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:152)
	at org.apache.naming.SelectorContext.lookup(SelectorContext.java:136)
	at javax.naming.InitialContext.lookup(Unknown Source)
	at br.com.carrinhoweb.AdicionaLivro.localizaBean(AdicionaLivro.java:69)
	at br.com.carrinhoweb.AdicionaLivro.service(AdicionaLivro.java:29)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	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.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:869)
	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	at java.lang.Thread.run(Unknown Source)

O que pode ser? Acho que pode ser configuração no tomcat mas nao tenho certeza

Criado 21 de agosto de 2007
Respostas 0
Participantes 1