Resource Injection com tomcat

0 respostas
tomcatjavaservlet
M

Estava tentando uma injeção de recurso porém não estou seguindo. Estou estudando para a prova de Web Components, então estava praticando alguns códigos.

Estou seguindo um exemplo dado pela documentação do Tomcat 7, http://tomcat.apache.org/tomcat-7.0-doc/jndi-resources-howto.html, porém ainda não obtive exito nos meus testes.

Antes estava com problema do contêiner não conseguir achar minha classes para ser injetada, mas depois percebi que deveria colocá-la dentro da pasta lib do servidor, para que fosse possível encontrá-la.

O problema agora é que ele não pode criar a instância como se pode ver no log.

Ainda falta eu realizar alguma configuração?

catalina.out

GRAVE: Allocate exception for servlet com.MyAnoServlet
javax.naming.NamingException: Cannot create resource instance
	at org.apache.naming.factory.ResourceEnvFactory.getObjectInstance(ResourceEnvFactory.java:115)
	at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:848)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:173)
	at org.apache.catalina.core.DefaultInstanceManager.lookupFieldResource(DefaultInstanceManager.java:545)
	at org.apache.catalina.core.DefaultInstanceManager.processAnnotations(DefaultInstanceManager.java:447)
	at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:133)
	at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:114)
	at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1133)
	at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:853)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:134)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:442)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1083)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:640)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:745)

MyAnoServlet.java

package com;

import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.servlet.http.*;
import java.io.*;
import javax.naming.*;
import javax.annotation.Resource;
import org.apache.catalina.UserDatabase;
import java.util.*;
import com.mycompany.*;

@WebServlet("/myservlet")
public class MyAnoServlet extends HttpServlet{

  public void doGet(HttpServletRequest req,HttpServletResponse resp) throws IOException{

    PrintWriter out = resp.getWriter();

    try{
      Context initCtx = new InitialContext();
      Context envCtx = (Context) initCtx.lookup("java:comp/env");
      MyBean bean = (MyBean) envCtx.lookup("bean/MyBeanFactory");

      out.println("foo = "+bean.getFoo()+", bar = "+bean.getBar());

    }catch(NamingException e){
      e.printStackTrace();
    }
  }
}

MyBean.java

package com.mycompany;

public class MyBean {

  private String foo = "Default Foo";

  public String getFoo() {
    return (this.foo);
  }

  public void setFoo(String foo) {
    this.foo = foo;
  }

  private int bar = 0;

  public int getBar() {
    return (this.bar);
  }

  public void setBar(int bar) {
    this.bar = bar;
  }

}

web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  version="3.0">

<resource-env-ref>
    <description>
      Object factory for MyBean instances.
    </description>
    <resource-env-ref-name>
      bean/MyBeanFactory
    </resource-env-ref-name>
    <resource-env-ref-type>
      com.mycompany.MyBean
    </resource-env-ref-type>
  </resource-env-ref>

</web-app>

server.xml (tomcat)

<GlobalNamingResources>
<!-- Editable user database that can also be used by
     UserDatabaseRealm to authenticate users
-->
<Resource name="UserDatabase" auth="Container"
          type="org.apache.catalina.UserDatabase"
          description="User database that can be updated and saved"
          factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
          pathname="conf/tomcat-users.xml" readonly="false" />
		  
<Resource name="bean/MyBeanFactory" auth="Container"
        type="com.mycompany.MyBean"
        factory="org.apache.naming.factory.BeanFactory"
        bar="23"/>
Criado 27 de outubro de 2016
Respostas 0
Participantes 1