【问题标题】:Getting DataSource resource in a Java web app在 Java Web 应用程序中获取 DataSource 资源
【发布时间】:2011-01-15 15:00:06
【问题描述】:

我的 context.xml 文件中有以下资源标签:

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/myApp">
  <Resource name="jdbc/myDS" auth="Container" 
    type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="1000"
    username="user" password="passwd"
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://localhost:3306/myDB" />
</Context>

我正在使用 NetBeans 中的 Stripes 框架开发一个 Java Web 应用程序。

如何从 Java 类中获取此资源?

【问题讨论】:

    标签: java mysql jsp javabeans


    【解决方案1】:

    您需要通过知道如何处理@Resrouce 注释的东西(依赖注入框架)来实例化您的bean。 JSP 本身不知道怎么做。

    在这种情况下,在 JNDI 上下文中定位 DataSource 会更简单:

    Context initContext = new InitialContext();
    Context envContext  = (Context) initContext.lookup("java:/comp/env");
    DataSource ds = (DataSource) envContext.lookup("jdbc/myDS");
    

    【讨论】:

    • 我对 Java Web 应用程序有点陌生...你能解释一下吗?
    • 另外,这不在我的 JSP 文件中,它在我的 bean(即 Java 类)文件中。
    • 查看我的 JNDI 更新。如果您想使用@Resource 注释,您需要有人阅读它。 JSP 本身无法读取它。
    • 感谢您的帮助。我尝试了这种方法(将参数替换为“jdbc/myDS”),但出现错误:javax.naming.NameNotFoundException: Name jdbc is not bound in this Context
    【解决方案2】:

    谢谢博卓的回答。我只需要更改查找字符串即可使其工作:

    Context ctx = new InitialContext();
    DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/myDS");
    Connection conn = ds.getConnection();

    【讨论】:

      猜你喜欢
      • 2011-02-18
      • 1970-01-01
      • 1970-01-01
      • 2015-01-19
      • 1970-01-01
      • 2016-07-07
      • 2011-09-24
      • 2015-04-07
      相关资源
      最近更新 更多