java - 多个 servlet 是否可以绑定(bind)到同一个数据源 (JNDI)?

标签 java jetty jndi c3p0

我在 Jetty.xml 文件中设置了一个数据源,如下所示:

<New id="MySQL_DS" class="org.eclipse.jetty.plus.jndi.Resource">
  <Arg></Arg>
  <Arg>jdbc/MySQL_DS</Arg>
  <Arg>
    <New class="com.mchange.v2.c3p0.ComboPooledDataSource">
      <Set name="driverClass">com.mysql.jdbc.Driver</Set>
      <Set name="jdbcUrl">jdbc:mysql:[IP]</Set>
      <Set name="user">[USER]</Set>
      <Set name="password">[PASSWORD]</Set>
      <Set name="checkoutTimeout">5000</Set>
      <Set name="initialPoolSize">3</Set>
      <Set name="maxIdleTime">3600</Set>
      <Set name="maxPoolSize">50</Set>
      <Set name="minPoolSize">1</Set>
      <Set name="maxStatements">200</Set>
      <Set name="maxConnectionAge">0</Set>
      <Set name="acquireIncrement">3</Set>
    </New>
  </Arg>
</New>

它在我的 web.xml 中定义如下:

<resource-ref>
  <description>DB Connection</description>
  <res-ref-name>jdbc/MySQL_DS</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
</resource-ref>

我在 servlet 代码中像这样绑定(bind)到我的数据源:

InitialContext ctx = new InitialContext();
_dataSource = (DataSource)ctx.lookup("java:comp/env/jdbc/MySQL_DS");

我的问题是:

我需要在同一个数据源上有 4 个使用此上下文查找的 servlet。这样的事可能吗?

我的意思是,多个 servlet 可以绑定(bind)到同一个数据源吗?还是每个 servlet 都必须有自己的数据源?

我问这个问题是因为我有一个 servlet 工作正常,但另一个 servlet 抛出 javax.naming.NameNotFoundException(剩余名称 jdbc/MySQL_DS)。

谢谢!

最佳答案

据我所知,您不必为每个 servlet 指定唯一的数据源。

我正在开发一个 Java EE Web 应用程序,其中包含多个 servlet,所有这些 servlet 都使用一个数据源连接到数据库。该Web应用程序使用Oracle作为后端,WebLogic Server作为应用程序服务器。

在此 Web 应用程序的体系结构中,有一个用于连接数据库的专用类。所有 servlet 都调用此类来获取与数据库的连接。

此连接类在构造函数中具有以下几行(与上面的类似)...

InitialContext ic=new InitialContext();
DataSource ds=(DataSource) ic.lookup("jdbc/OracleDS");
con=ds.getConnection("user","pwd"); \\ ("con" is a private Connection instance var)

然后,每个 servlet 仅使用连接类连接到数据库。

例如...

MyConnectionClass con = new MyConnectionClass(); // ("MyConnectionClass" is where the data source info is...)
PreparedStatement ps=con.prepareStatement("SELECT * FROM SOME_TABLE");
ResultSet rs=ps.executeQuery();
more code below...

关于java - 多个 servlet 是否可以绑定(bind)到同一个数据源 (JNDI)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8594632/

相关文章:

ssl - 如何将 Windows 证书存储与 Jetty 一起使用?

java - 我应该使用哪个 .JAR 来嵌入 Jetty?

java - Tomcat 8 升级后的 JNDI NameNotFoundException

java - 如何在不重新部署的情况下更改weblogic中的属性值?

java - Jackson JsonDeserializer 将字段的反序列化委托(delegate)回该字段类型的默认反序列化器

java - 如何将 Eureka 名称与 OAuth2RestTemplate 一起使用

apache - 可以按需启动的用于 Windows 的简单 HTTP 服务器应用程序?

java - 如何使用 JDBC 连接到 Azure SQL

java - 使用 GDB 编写测试 - 如何捕获输出?

java - Java Azure Functions 中的 JNDI 查找(或等效项)