Tomcat, JNDI e Servlet - javax.naming.NamingException

1 resposta
M

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.

1 Resposta

daniel.joppi

conseguiu??

Criado 5 de agosto de 2011
Ultima resposta 29 de mai. de 2012
Respostas 1
Participantes 2