无法实例化类:org.apache.naming.java.javaURLContextFactory [英] Cannot instantiate class: 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屋!