相关疑难解决方法(0)

Junit在应用程序服务器外部测试JNDI InitialContext

Context context = new InitialContext();
dataSource = (DataSource) context.lookup("java:comp/env/jdbc/multiDS");
connection = dataSource.getConnection();
Run Code Online (Sandbox Code Playgroud)

请帮我模仿上面的代码.

嗨汤姆安德森

我尝试了下面的代码

 @BeforeClass
 public static void setUpClass() throws Exception {
        // rcarver - setup the jndi context and the datasource
        try {
            // Create initial context
            System.setProperty(Context.INITIAL_CONTEXT_FACTORY,
                "org.apache.naming.java.javaURLContextFactory");
            System.setProperty(Context.URL_PKG_PREFIXES, 
                "org.apache.naming");            
            Context ic = new InitialContext();

            ic.createSubcontext("java:");
            ic.createSubcontext("java:comp");
            ic.createSubcontext("java:comp/env");
            ic.createSubcontext("java:comp/env/jdbc");
            ic.createSubcontext("java:comp/env/jdbc/multiDS");
            // Construct DataSource
            OracleConnectionPoolDataSource ds = new OracleConnectionPoolDataSource();
            ds.setURL("jdbc:oracle:thin:@g9u0696.houston.hp.com:1525:CRNAD");
            ds.setUser("uname");
            ds.setPassword("pwd");
        } catch (NamingException ex) {
            ex.printStackTrace();
        }
 }
Run Code Online (Sandbox Code Playgroud)

但它给出的错误是:

com.hp.corona.common.exception.CacheException: org.apache.naming.NamingContext cannot be cast to javax.sql.DataSource …
Run Code Online (Sandbox Code Playgroud)

java junit jndi

20
推荐指数
2
解决办法
3万
查看次数

如何将DataSource绑定到InitialContext以进行JUnit测试?

我正在尝试对数据库"worker"类运行JUnit测试,这些类对其进行jndi查找InitialContext以获取a DataSource.工作类通常在Glassfish v3 App Server上运行,该服务器定义了适当的jdbc资源.

代码在App Server上部署时运行得很好,但是没有从JUnit测试环境运行,因为很明显它找不到jndi资源.所以我尝试在测试类中设置一个InitialContext,它将数据源绑定到适当的上下文,但它不起作用.

这是我在测试中的代码

@BeforeClass
public static void setUpClass() throws Exception {
    try {
        // Create initial context
        System.setProperty(Context.INITIAL_CONTEXT_FACTORY,
            "org.apache.naming.java.javaURLContextFactory");
        System.setProperty(Context.URL_PKG_PREFIXES,
            "org.apache.naming");
        InitialContext ic = new InitialContext();

        ic.createSubcontext("java:");
        ic.createSubcontext("java:/comp");
        ic.createSubcontext("java:/comp/env");
        ic.createSubcontext("java:/comp/env/jdbc");

        // Construct DataSource
        SQLServerConnectionPoolDataSource testDS = new SQLServerConnectionPoolDataSource();
        testDS.setServerName("sqlserveraddress");
        testDS.setPortNumber(1433);
        testDS.setDatabaseName("dbname");
        testDS.setUser("username");
        testDS.setPassword("password");

        ic.bind("java:/comp/env/jdbc/TestDS", testDS);

        DataWorker dw = DataWorker.getInstance();
    } catch (NamingException ex) {
        Logger.getLogger(TitleTest.class.getName()).log(Level.SEVERE, null, ex);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,DataWorker类或多或少地使用以下代码的方法

InitialContext ic = null;
DataSource ds = null;
Connection c …
Run Code Online (Sandbox Code Playgroud)

java junit datasource jdbc glassfish

16
推荐指数
1
解决办法
5万
查看次数

标签 统计

java ×2

junit ×2

datasource ×1

glassfish ×1

jdbc ×1

jndi ×1