在IntelliJ中使用DataSource,JNDI API

时间:2015-09-15 08:58:00

标签: java postgresql tomcat datasource jndi

我试图了解与DataSource ObjectJNDI API建立数据库连接。

我正在与Intellij UE合作,并且正在运行本地Tomcat-8 - 和Postgres-Server

我按照Oracle Java文档中的说明进行操作:

  1. 创建DataSource Class的实例并设置其属性

    org.postgresql.ds.PGSimpleDataSource dataSource = new org.postgresql.ds.PGSimpleDataSource();
    dataSource.setServerName("localhost");
    dataSource.setDatabaseName("db01");
    dataSource.setUser("jwi");
    dataSource.setPassword("password");
    
  2. 使用DataSource Object

    的命名服务注册JNDI API
    Context ctx = null;
    
    try {
        ctx = new InitialContext();
        ctx.bind("jdbc/localDB", dataSource);
    } catch (NamingException e) {
        e.printStackTrace();
    }
    
  3. Oracle文档说:

      

    设置属性后,系统管理员可以使用JNDI(Java命名和目录接口)命名服务注册BasicDataSource对象。

    所以我的第一个问题是:注册DataSource是什么意思?我的代码是否已经注册DataSource ObjectJNDI

    1. 使用已部署的DataSource Object

      try {
      
          Context ctx = new InitialContext();
          DataSource ds = (DataSource) ctx.lookup("jdbc/localDB");
          dbCon = ds.getConnection();
          ...
      
    2. 在此代码中,IntelliJ始终声称,它无法解析方法getConnection()

      Oracle文档说:

        

      系统管理员部署了基本的DataSource实现后,程序员就可以使用它了。

      所以我的第二个问题是:在这种情况下究竟意味着什么?创建DataSource Instance并使用JDNI执行注册?或者部署是指Tomcat context.xmlweb.xml配置(Tomcat 8 JNDI How-To)?

      如果有人对这个问题有一个很好的一步一步的指导,我真的很感激,事实上Oracle文档并不是非常清楚某些点imho。

1 个答案:

答案 0 :(得分:2)

对于第二个问题,已部署意味着您的数据源在tomcat的context.xml中声明。 以下是oracle数据库的示例(您必须更改postgres的驱动程序):

{{1}}

之后,您可以编写java部分代码,因为您可以看到此链接http://www.javapractices.com/topic/TopicAction.do?Id=127

有关完整的示例,这里有一个很好的教程http://alvinalexander.com/blog/post/java/how-configure-tomcat-dbcp-connection-pool-pooling-postgres

希望这个帮助