2011-11-28 33 views
12

这是我的context.xml 文件如何从tomcat webapp中的context.xml文件获取资源?

... 
<Resource auth="Container" 
      driverClass="net.sourceforge.jtds.jdbc.Driver" 
      type="com.jolbox.bonecp.BoneCPDataSource" 
      idleMaxAge="240" 
      idleConnectionTestPeriod="60" 
      partitionCount="3" 
      acquireIncrement="1" 
      maxConnectionsPerPartition="10" 
      minConnectionsPerPartition="3" 
      statementsCacheSize="50" 
      releaseHelperThreads="4" 

      name="jdbc/MyDatasource" 
      username="my_username" 
      password="my_password" 
      factory="org.apache.naming.factory.BeanFactory" 
      jdbcUrl="jdbc:jtds:sqlserver://localhost:12345/my_database" 
/> 
... 

我已经使用ServletContext.getResource(java.lang.String)与资源(“JDBC/MyDatasource”)的名称试过,但Tomcat的抱怨名称不以开头'/'。我也尝试使用“/ jdbc/MyDatasource”,但是这一次它返回null。

我主要需要的JDBCURL执行的连接检查与数据库服务器(查看服务器是否处于联机状态和运行)。

回答

15

关键词是:JNDI。 context.xml中的资源不是“系统资源”,而是JNDI资源。 试试这个:

InitialContext ic = new InitialContext(); 
// that's everything from the context.xml and from the global configuration 
Context xmlContext = (Context) ic.lookup("java:comp/env"); 
DataSource myDatasource = (DataSource) xmlContext.lookup("jdbc/MyDatasource"); 

// now get a connection to see if everything is fine. 
Connection con = ds.getConnection(); 
// reaching this point means everything is fine. 
con.close(); 
+2

谢谢你的回答。我不知道如何继续接受答案,因为你们都非常帮助我......我想我会接受你的回答,鼓励你(因为你是一个新的用户)继续为这个社区做出贡献.. –

+0

@IgorPopov嗯,我有同样的问题,但只是我想从context.xml中读取其他参数:如maxTotal,maxIdle等。我怎么才能真正阅读那些我可以在控制台中打印它们?我正在使用相同的方法。是否有任何方法从context.xml中读取这些参数? –

+0

@HarshvardhanSolanki不是我所知道的。但你应该问问题作为自己的问题。如果他们不回答你的问题,请务必链接到现有的问题,所以答案看你已经试图自己解决它。 –

10

你应该可以用下面的代码来访问数据源:

Context initialContext = new InitialContext(); 
Context envContext = (Context)initialContext.lookup("java:/comp/env"); 
DataSource ds = (DataSource)envContext.lookup("jdbc/MyDatasource"); 
+0

非常感谢您的帮助:)看起来我第一次在错误的地方搜索。我在tomcat文档中找到了一个代码示例:http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html –

+3

在tomcat中,您应该将“java:/ comp/env”更改为“java:comp/env” – lmiguelmh