我一直在尝试在这里找到解决方案,但是我不能…我有以下代码,但出现此错误。
我想念什么吗?谢谢 :)
码
package src; import java.sql.DriverManager; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import java.sql.Wrapper; import java.util.Hashtable; import java.util.Properties; import java.io.*; import javax.*; import javax.activation.DataSource; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import oracle.jdbc.pool.OracleDataSource; public class TestServlet { @SuppressWarnings("unused") public static void main(String[] argv) throws SQLException, NamingException { Context initialContext = new InitialContext(); if ( initialContext == null){System.out.println("initialContext null");} else {System.out.println("initialContext");} // Get DataSource Context environmentContext = (Context)initialContext.lookup("java:/comp/env"); if ( environmentContext == null){System.out.println("envContext null.");} else {System.out.println("envContext");} DataSource ds = (DataSource)environmentContext.lookup("jdbc/testdb"); System.out.println("\n -------- Oracle JDBC Connection Testing ------"); try { Connection jdbcConnection = ((Statement) ds).getConnection(); OracleDataSource ods = ((Wrapper) ds).unwrap(OracleDataSource.class); jdbcConnection.close(); } catch (SQLException e) { System.out.println("Connection Failed! Check output console"); e.printStackTrace(); return; } String message = "You are connected!"; System.out.println(message); } }
context.xml
<Context> <Resource name="jdbc/testdb" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="dba01" password="qvE-g7Cacontext.xml" driverClassName="com.mysql.jdbc.Driver" url="jdbc:oracle:thin:@10.0.1.6:1521:xe"/> </Context>
错误
Exception in thread "main" javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial at javax.naming.spi.NamingManager.getInitialContext(Unknown Source) at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source) at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source) at javax.naming.InitialContext.lookup(Unknown Source) at src.TestServlet.main(TestServlet.java:34)
如果您需要更多信息,请告诉我!
您需要一个初始上下文工厂。对于Tomcat,它是org.apache.naming.java.javaURLContextFactory:
org.apache.naming.java.javaURLContextFactory
System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.apache.naming.java.javaURLContextFactory");