如何通过上下文对象获取资源元素

时间:2013-03-14 13:34:48

标签: java java-ee tomcat jndi

我尝试通过DatabaseSource JNDI查找建立数据库连接。我按照Tomcat网站上的说明操作,如下所示

我将资源添加到context.xml

<Resource name="jdbc/myDB" auth="Container"
          type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
          url="jdbc:oracle:thin:111.111.111.111:1234:DBNME"
          username="Dobby" password="pwd" maxActive="20" maxIdle="10" maxWait="-1"/> 

的web.xml

 <resource-ref>
    <description>MY DataBase</description>
    <res-ref-name>jdbc/myDB</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    </resource-ref>

代码

  Context initContext = new  InitialContext();
                DataSource ds = (DataSource)initContext.lookup("java:/comp/env/jdbc/myDB");
                Connection con =  ds.getConnection();  

如果连接失败,我想显示带有DB URL的错误消息。如何在我的代码

中获取在context.xml中配置的DB URL

2 个答案:

答案 0 :(得分:1)

正如您在apache示例中所注意到的,有一个名为MyBeanFactory的类。在此类中,您可以从context.xml文件中获取资源。

您需要检查servlet中是否建立了连接。如果未建立连接,则使用setter / getter方法从context.xml获取URL的值,并使用URL显示错误消息。

我用服务器的IP地址做同样的事情并取得了成功。 :d

希望这会有所帮助......

答案 1 :(得分:0)

我不认为这是可能的,你实际上使用JNDI来独立于这些细节,你可以在错误信息中添加的唯一东西就是资源"java:/comp/env/jdbc/myDB"的名称。执行管理/配置的人将知道此名称所指的女巫数据库详细信息。

通常,应用程序的开发人员只定义资源的名称并将其传递给Appserver-admin。但是在开发时你必须/可能扮演两个角色。

修改

如果您打算仅使用界面DataSource

,这是当然的

如果您想要定位特定的DBMS,您可以查看jdbc驱动程序提供的该接口的实现。以下是DataSource的Oralce实现:OracleDataSource,有关它的更多信息here