我在 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/