Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JNDI无法从SQLServer中找到数据源_Java_Sql Server_Xml_Jndi_Connection Pooling - Fatal编程技术网

Java JNDI无法从SQLServer中找到数据源

Java JNDI无法从SQLServer中找到数据源,java,sql-server,xml,jndi,connection-pooling,Java,Sql Server,Xml,Jndi,Connection Pooling,我有一个MSSQLServer2008A数据库,名为:“conpool”。并在那里创建了一个具有id、全名和年龄的表。 现在,我已经在Netbeans 7.3和Tomcat 7.0.30中用Java实现了一个连接池,每次连接到我的数据库时,我都不会绑定它,我只需要查询我的数据库 我的连接池: //------------------------Beginn JDBC连接池---------------------------------- public static void main(Str

我有一个MSSQLServer2008A数据库,名为:“conpool”。并在那里创建了一个具有id、全名和年龄的表。 现在,我已经在Netbeans 7.3和Tomcat 7.0.30中用Java实现了一个连接池,每次连接到我的数据库时,我都不会绑定它,我只需要查询我的数据库

我的连接池:

//------------------------Beginn JDBC连接池----------------------------------

 public static void main(String[] args) throws SQLException, NamingException {
    // Get DataSource

    Context initialContext = new InitialContext();
    System.out.println("Test1: a object from InitialContext has been created");

    Context context = (Context) initialContext.lookup("java:/comp/env");
    System.out.println("Test2: Context lookup was OKAY");

    //The JDBC Data source that was created in SQLServer
    DataSource datasource = (DataSource) context.lookup("jdbc/conpool");
    System.out.println("Test3: DataSource lookup with JNDI was successfully");
    System.out.println("JDBC Connecction Pool is created successfully");

    //-------------------------Ende JDBC Connection Pool--------------------------------------

    //Using a connection from the pool
    Connection connection = datasource.getConnection();
    System.out.println("Test4: Datasource Connection was successfully");

    if (connection == null) {
        throw new SQLException("Error establishing connection!");
        //System.out.println("DBConnection Failed!!! ");
    }

    //Using the connection to access the database

    //--------------------------------Beginn der Queryprocess------------------------------------------

    String query = "SELECT * FROM conpool.dbo.Personen";
    PreparedStatement statement = connection.prepareStatement(query);
    ResultSet rs = statement.executeQuery();

    System.out.println("Test5: All Object for a single Query are created");
    while (rs.next()) {
        System.out.println(rs.getString(query));
    }
    //Connection will be closed
    connection.close();

    //-------------------------------Ende der Queryprocess--------------------------------------

   }
My web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
     version="2.4">
<description>Tomcat-ConnectionPooling with MS SQLServer</description>
<resource-ref>
    <description>DB Connection</description>
    <res-ref-name>jdbc/conpool</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>
</web-app>

Tomcat与MS SQLServer的连接池
数据库连接
jdbc/conpool
javax.sql.DataSource
容器
my context.xml

<?xml version="1.0" encoding="UTF-8"?>
<Context  antiJARLocking="true" path="/ITWService">

<!-- Specify a JDBC datasource -->
<Resource name="jdbc/conpool" auth="Container" type="javax.sql.DataSource"

          maxActive="100" maxIdle="30" maxWait="10000"

          username="dbo" password="" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"

          url="jdbc:sqlserver://localhost:1433;DatabaseName=conpool"/>
</Context>

现在我遇到了这样的错误:

运行:

线程“main”javax.naming.NoInitialContextException中的异常:需要在环境或系统属性中指定类名,或作为小程序参数,或在应用程序资源文件中指定:java.naming.factory.initial 位于javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645) 位于javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288) 位于javax.naming.InitialContext.GetUrlOrDefaultiniticTx(InitialContext.java:325) 在javax.naming.InitialContext.lookup(InitialContext.java:392)中 位于com.akapoor.itwservice.server.RestServer.main(RestServer.java:136) Java结果:1 生成成功(总时间:1秒)


请帮我解决我的问题。我会非常感谢你,我很困惑。我什么都试过了,但没用。。请告诉我我的问题是为什么我没有连接到我的数据库

您需要在一个托管环境(如应用程序服务器)中创建一个没有参数的InitialContext

由于您发布的代码有一个main方法,我假设您已将代码作为独立应用程序执行。但在您的问题中,您写道您的应用程序在Tomcat上运行,因此您需要将其部署到您的容器中并在那里调用它


或者你想远程访问JNDI有什么原因吗?

没有,你说的话会是什么样子。。你能写一段代码作为例子吗。。这对我有很大帮助。您发布的错误消息意味着创建InitialContext失败。如果您在Tomcat中执行相同的代码,它将成功。我如何在Tomcat中执行此代码?代码是什么样子的?我应该在哪里做?你能为我的解决方案写一个例子吗?那我就明白了贝塞尔--