我在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代码中绑定到我的数据源:
InitialContext ctx = new InitialContext();
_dataSource = (DataSource)ctx.lookup("java:comp/env/jdbc/MySQL_DS");
我的问题是:
我需要在同一数据源上使用此上下文查找来使用4个servlet。这样的事情甚至可能吗?
我的意思是,多个servlet可以绑定到同一个数据源,还是每个servlet都有自己的一个?
我问这个是因为我有一个正常工作的servlet但另一个抛出了一个javax.naming.NameNotFoundException(剩下的名字是jdbc / MySQL_DS)。
谢谢!
答案 0 :(得分:2)
据我所知,您不必为每个servlet指定唯一的数据源。
我正在开发一个Java EE Web应用程序,其中包含多个servlet,它们都使用一个数据源连接到数据库。此Web应用程序使用Oracle作为后端,使用WebLogic Server作为应用程序服务器。
在此Web应用程序的体系结构中,有一个用于连接到数据库的专用类。所有servlet都会调用此类来获取与DB的连接。
此连接类在构造函数中具有以下行(与您的类似)...
InitialContext ic=new InitialContext();
DataSource ds=(DataSource) ic.lookup("jdbc/OracleDS");
con=ds.getConnection("user","pwd"); \\ ("con" is a private Connection instance var)
然后,每个servlet只使用连接类连接到DB。
例如......
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...