2011-12-21 70 views
0

我有一个数据源,在我的jetty.xml文件中设置看起来像这样:多个servlet可以绑定到相同的数据源(JNDI)吗?

<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)。

谢谢!

回答

2

据我所知,你不应该为每个servlet指定唯一的数据源。

我正在研究一个具有多个servlet的Java EE Web应用程序,它们都使用一个数据源连接到数据库。此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)

然后,将每个小服务程序的只是使用的连接类连接到数据库。

例如...

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...

+0

好吧,似乎很相似,我在做什么。谢谢! – Mathieu 2011-12-22 13:19:07

相关问题