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:
[code]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);
}
}[/code]
src/util/ServiceLocator.java:
[code]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);
}
}
}[/code]
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:
[code]
CalculatorServlet
servlet.CalculatorServlet
<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>
[/code]
Não encontro nada no google. Espero que possam me ajudar. Grato.