当前位置: 首页 > 知识库问答 >
问题:

JNDI无法从SQLServer中找到数据源

艾成益
2023-03-14

我有一个MS SQLServer 2008 a数据库,名为:“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--------------------------------------

   }

我的网站。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>

我的背景。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.中的异常:需要在环境或系统属性中,或作为小程序参数,或在应用程序资源文件中指定类名:java.naming.factory.initialjavax.naming.spi.NamingManager.get在javax.naming.的NamalContext.getDefaultInitCtx(LaunalContext.java:288)在javax.naming.的初始ontext.getURLOrDefaultInitCtx(初始ontext.java:325)在javax.naming.的初始ontext.lookup(初始ontext.java:392)在com.akapoor.itwservice.server.RestServer.main(RestServer.java:136)Java结果:1 BUILD SUCCESSFUL(总时间:1秒)

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

共有1个答案

夏侯野
2023-03-14

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

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

或者您想远程访问JNDI是否有原因?

 类似资料:
  • 我正在用Hibernate和Websphere application Server 8.0开发一个应用程序。 我已经在Websphere中创建了一个数据源,它可以成功地与数据库连接。 但从应用程序我得到以下错误: 系统错误创建会话:org。冬眠服务jndi。JndiException:无法查找JNDI名称[java:comp/env/jdbc/OracleDS] 以下是我所做的设置: Websp

  • 我有通过jndi名称从WebLogic获取数据源的应用程序。 我在应用程序中配置了jndi数据源名称。yml: 我在WebLogic服务器上配置了它,指定了特定的目标。我测试了这个数据源,WebLogic说测试成功了。但是当我尝试部署应用程序时,我收到以下错误: 我需要确定WebLogic的数据源配置中存在问题,或者在java代码中获取数据源时存在问题。我是否能够在不部署应用程序的情况下测试获取数

  • 问题内容: 这是我的: 该文件应在测试期间从中创建数据源,因为缺少具有真实数据源的真实应用服务器: 这是测试类: 不幸的是,没有创建数据源,这就是我一直看到的内容: 我究竟做错了什么?请帮忙! ps。顺便说一下,这是怎么回事(怎么回事?): 问题答案: 查找时应找到 您也可以在TestCase中进行注入。基本上,您: 添加一个空的或 注释您的测试 呼叫 请参阅examples.zip中的示例 编辑

  • 问题内容: 我已经在尝试 开发的JSF Web应用程序中连接到数据库。使用Windows 7,NetBeans 6.9.1,SQLServer 2008,Glassfish 3.3。 我正在使用从 成功连接到SQLServer 2005的XP系统复制的sqljdbc4.jar驱动程序 。 我已验证SQLServer 2008在我的系统上运行,并且可以 使用要在应用程序中 使用的用户名和 密码通过S

  • 该应用程序使用Spring JMS Listener连接到JMS队列,并在WAS 8.5中部署。x、 使用spring应用程序上下文xml,bean用初始化,目标为。 在class方法中,代码试图使用查找JNDI引用,代码片段如下, 应用程序在处理消息时抛出以下异常。 例外:javax。命名。ConfigurationException:无法完成“java:”名称上的JNDI操作,因为服务器运行时

  • null:javax.naming.nameNotFoundException:project1-ear-1.0.0.00/project1-services-ejb1.0.0.0/personServiceImpl!com.domain.project1.interfaces.personService--service jboss.naming.context.java.“project1-e