无法实例化类:org.apache.naming.java.javaURLContextFactory [英] Cannot instantiate class: org.apache.naming.java.javaURLContextFactory

查看:1244
本文介绍了无法实例化类:org.apache.naming.java.javaURLContextFactory的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在研究Junit测试文件,该文件加载SQL文件并将其加载到Oracle中:

I'm working on Junit test file which loads SQL file and loads it into Oracle:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import oracle.jdbc.pool.OracleConnectionPoolDataSource;
import org.junit.BeforeClass;
import org.junit.Test;

public class OracleCreateScheme1
{

    public OracleCreateScheme1()
    {
    }

    @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");
            InitialContext ic = new InitialContext();

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

            // Construct DataSource
            OracleConnectionPoolDataSource ds = new OracleConnectionPoolDataSource();
            ds.setURL("jdbc:oracle:thin:@192.168.1.104:1521:oracle");
            ds.setUser("admin");
            ds.setPassword("qwerty");

            ic.bind("java:/comp/env/jdbc/oracle", ds);
        }
        catch (NamingException ex)
        {
            //Logger.getLogger(MyDAOTest.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    @Test
    public void createOracleScheme() throws SQLException, NamingException
    {

        Context initContext = new InitialContext();
        Context webContext = (Context) initContext.lookup("java:/comp/env");

        DataSource ds = (DataSource) webContext.lookup("jdbc/Oracle");

        // Read File ------------------------------------------------------------------

        String s = new String();
        StringBuffer sb = new StringBuffer();

        try
        {
            FileReader fr = new FileReader(new File("OracleScheme.sql"));

            BufferedReader br = new BufferedReader(fr);

            while ((s = br.readLine()) != null)
            {
                sb.append(s);
            }
            br.close();

            // here is our splitter ! We use ";" as a delimiter for each request
            // then we are sure to have well formed statements
            String[] inst = sb.toString().split(";");

            Connection c = ds.getConnection();
            Statement st = c.createStatement();

            for (int i = 0; i < inst.length; i++)
            {
                // we ensure that there is no spaces before or after the request string
                // in order to not execute empty statements
                if (!inst[i].trim().equals(""))
                {
                    st.executeUpdate(inst[i]);
                    System.out.println(">>" + inst[i]);
                }
            }

        }
        catch (Exception e)
        {
            System.out.println("*** Error : " + e.toString());
            System.out.println("*** ");
            System.out.println("*** Error : ");
            e.printStackTrace();
            System.out.println("################################################");
            System.out.println(sb.toString());
        }

    }
}

当我测试文件我遇到这个问题:

When I test the file I get this problem:

无法实例化类:org.apache.naming.java.javaURLContextFactory

你能告诉我如何解决这个问题吗?你也发现这个Java代码有任何问题吗?

Can you tell me how I can solve this problem? And also do you find any problem into this Java code?

推荐答案

我通过将Apache Tomcat中的库添加到Run-来解决这个问题时间测试库。

I fixed this by adding libraries from Apache Tomcat to the Run-time Test Libraries.

在Netbeans中:

In Netbeans:

Project Properties -> Libraries -> Run Tests

Add JAR/Folder

我需要的两个库是 catalina.jar tomcat-juli.jar 。您的里程可能会有所不同。

The two libraries I needed were catalina.jar and tomcat-juli.jar. You mileage may vary.

我在Tomcat的安装目录下找到它们。例如:

I found them under the installation directory for Tomcat. e.g:

apache-tomcat-7.0.34/bin/tomcat-juli.jar
apache-tomcat-7.0.34/lib/catalina.jar

注意其中一个罐子在 bin 目录,另一个在 lib 目录中

Note one of the jars is in the bin directory, the other in the lib directory

这可能不是解决问题的最佳方法。注入 DataSource 的方法会更好。

This probably isn't the best way to fix your problem. It would be better to have a different way to inject the DataSource.

这篇关于无法实例化类:org.apache.naming.java.javaURLContextFactory的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆