응용 프로그램에서 JNDI bean을 만들려고하지만 "리소스 인스턴스를 만들 수 없음"오류가 첫 번째 코드 블록의 세 번째 줄에서 발생합니다. 나는 http://tomcat.apache.org/tomcat-5.5-doc/jndi-resources-howto.html과 같은 단계를 따르고 있습니다.JNDI Java Bean 만들기 오류
콩 인스턴스화 :
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
MyBean bean = (MyBean) envCtx.lookup("bean/MyBeanFactory");
System.out.println("foo = " + bean.getFoo() + ", bar = " +
bean.getBar());
클래스에서 myBean : 여기
는 코드를 간다package com.company.intrasc.funcionarios;
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;
}
}
클래스 MyBeanFactory :
package com.company.intrasc.factory;
import java.util.Enumeration;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.Name;
import javax.naming.NamingException;
import javax.naming.RefAddr;
import javax.naming.Reference;
import javax.naming.spi.ObjectFactory;
import com.company.intrasc.funcionarios.MyBean;
public class MyBeanFactory implements ObjectFactory {
public Object getObjectInstance(Object obj,
Name name, Context nameCtx, Hashtable environment)
throws NamingException {
// Acquire an instance of our specified bean class
MyBean bean = new MyBean();
// Customize the bean properties from our attributes
Reference ref = (Reference) obj;
Enumeration addrs = ref.getAll();
while (addrs.hasMoreElements()) {
RefAddr addr = (RefAddr) addrs.nextElement();
String name1 = addr.getType();
String value = (String) addr.getContent();
if (name1.equals("foo")) {
bean.setFoo(value);
} else if (name1.equals("bar")) {
try {
bean.setBar(Integer.parseInt(value));
} catch (NumberFormatException e) {
throw new NamingException("Invalid 'bar' value " + value);
}
}
}
// Return the customized instance
return (bean);
}
}
응용 프로그램 폴더에서 web.xml을 :
<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.company.intrasc.funcionarios.MyBean</resource-env-ref-type>
</resource-env-ref>
server.xml의 컨텍스트 구성 :
<Resource name="bean/MyBeanFactory" auth="Container" type="com.company.intrasc.funcionarios.MyBean" factory="com.company.intrasc.factory.MyBeanFactory" bar="23"/>
스택 트레이스 :
javax.naming.NamingException: Cannot create resource instance
at org.apache.naming.factory.ResourceEnvFactory.getObjectInstance(ResourceEnvFactory.java:114)
at javax.naming.spi.NamingManager.getObjectInstance(Unknown Source)
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)
at com.company.intrasc.servlet.Logon.executa(Logon.java:81)
at com.company.intrasc.servlet.Controller.service(Controller.java:80)
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:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
클래스에서 myBean MyBeanFactory 및 압축 된 항아리 CATALINA_HOME/LIB로 수출된다. 서버가 Tomcat 6이고 IDE가 Eclipse Indigo이고 시스템 (개발 시스템에서)은 Windows Vista입니다. 무엇이 잘못 될까요?
"작동하지 않음"을 정의하십시오. 예외? 아무것도? 다른 것? –
@JimGarrison, 죄송합니다. 매우 일반적인 이유 인 "리소스 인스턴스를 만들 수 없습니다."라는 오류로 질문을 업데이트했습니다. 첫 번째 코드 블록의 세 번째 줄에 나타납니다. – Alex
모든 "원인"섹션을 포함하여 ** 전체 ** 스택 추적을 게시하십시오. –