Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Matheus Cruz

Tomcat, JNDI e Servlet

Recommended Posts

Pessoal, buenas!

 

Seguinte, tentei fazer lookup de um objeto em um servlet tendo como base o link Generic JavaBean Resources. Porém não obtive sucesso:

 

Stacktrace:

java.lang.RuntimeException: javax.naming.NamingException: Cannot create resource instance
at util.ServiceLocator.lookup(Unknown Source)
at servlet.CalculatorServlet.getCalculator(Unknown Source)
at servlet.CalculatorServletSupport.doGet(Unknown Source)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)
Caused by: javax.naming.NamingException: Cannot create resource instance
at org.apache.naming.factory.ResourceEnvFactory.getObjectInstance(ResourceEnvFactory.java:114)
at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304)
at org.apache.naming.NamingContext.lookup(NamingContext.java:793)
at org.apache.naming.NamingContext.lookup(NamingContext.java:140)
at org.apache.naming.NamingContext.lookup(NamingContext.java:781)
at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
... 17 more

 

src/servlet/CalculatorServlet.java:

package servlet;

import util.ServiceLocator;
import ejb.Calculator;

public class CalculatorServlet extends CalculatorServletSupport {
private static final long serialVersionUID = 1L;

@Override
protected Calculator getCalculator() {
	return (Calculator) ServiceLocator.getInstance()
		.lookup(ServiceLocator.CALCULATOR_NAME);
}
}

 

src/util/ServiceLocator.java:

package util;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

public class ServiceLocator {
private static final String ENV_CONTEXT = "java:comp/env";
public static final String CALCULATOR_NAME = "bean/CalculatorFactory";
private static final ServiceLocator INSTANCE = new ServiceLocator();
private Context context;

private ServiceLocator() {
	try {
		context = (Context) new InitialContext().lookup(ENV_CONTEXT);
	} catch (NamingException e) {
		throw new RuntimeException(e);
	}
}

public static ServiceLocator getInstance() {
	return INSTANCE;
}

public Object lookup(String name) {
	try {
		return context.lookup(name);
	} catch (NamingException e) {
		throw new RuntimeException(e);
	}
}
}

 

web/META-INF/context.xml:

<Context>
<Resource name="bean/CalculatorFactory" auth="Container" type="ejb.CalculatorBean"
	factory="org.apache.naming.factory.BeanFactory" />
</Context>

 

web/WEB-INF/web.xml:

<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5">
<servlet>
	<servlet-name>CalculatorServlet</servlet-name>
	<servlet-class>servlet.CalculatorServlet</servlet-class>
</servlet>

<servlet-mapping>
	<servlet-name>CalculatorServlet</servlet-name>
	<url-pattern>/calc</url-pattern>
</servlet-mapping>

<resource-env-ref>
	<resource-env-ref-name>bean/CalculatorFactory</resource-env-ref-name>
	<resource-env-ref-type>ejb.CalculatorBean</resource-env-ref-type>
</resource-env-ref>
</web-app>

 

Não encontro nada no google. Espero que possam me ajudar. Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde.Matheus Cruz.

 

O erro reportado refere-se que ele não está encontrando o seu resource. Verifiquei que voce configurou a variável do seu lookup, sem o nome do resource assim:

 

   // Errado
   .....
   private static final String ENV_CONTEXT = "java:comp/env";
   ....

 // Certo
 .....
 private static final String ENV_CONTEXT = "java:comp/env/bean/CalculatorFactory";
 ....

 

Se não der certo, retire a palavra bean do nome do resource, tanto no xml do resource quanto no xml da servlet.

 

 

Testa ai, e vê se dá certo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.