1

在 Eclipse 中运行此示例代码时(该问题与 JSF 无关)我收到错误 javax.naming.NamingException: Cannot create resource instance

Java 文件

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.annotation.Resource;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
@SessionScoped
public class CustomerBean implements Serializable{

    //resource injection
    @Resource(name="jdbc/SSHD")
    private DataSource ds;

    //if resource inject is not support, you still can get it manually.
    public CustomerBean(){
        try {
            System.out.println("11111111111111");

            Context ctx = new InitialContext();
            System.out.println("222222222222222222");
            ds = (DataSource)ctx.lookup("java:comp/env/jdbc/SSHD");
        } catch (NamingException e) {
            System.out.println("3333333333333333333");
            e.printStackTrace();
        }

    }
}

webapp/WEB-INF/web.xml

<resource-ref>
   <description>SSHD Connection</description>
   <res-ref-name>jdbc/SSHD</res-ref-name>
   <res-type>oracle.jdbc.pool.OracleDataSource</res-type>
   <res-auth>Container</res-auth>
 </resource-ref>

webapp/META-INF/context.xml

<Context>

  <Resource name="jdbc/SSHD" auth="Container" type="oracle.jdbc.pool.OracleDataSource"
               maxActive="100" maxIdle="30" maxWait="10000"
               username="ABCD" password="XYZZ" driverClassName="oracle.jdbc.driver.OracleDriver"
               url="jdbc:oracle:thin:@XX.XX.XX.XXXX:1521:SSHD"/>

</Context>

webapp/WEB-INF/lib

classes12.jar

错误堆栈

11111111111111
javax.naming.NamingException: Cannot create resource instance
222222222222222222
3333333333333333333
    at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:146)
    at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:843)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:154)

请指教

4

0 回答 0