Problemer med DB connection pool (tomcat / oracle)
Jeg arbejder paa et stoerre projekt og jeg har problemer med DB connections. Systemet kommer ikke til at have saerlig mange brugere paa samtidig, men det er ret connection tungt.Maaden jeg har gjort det paa indtil videre er at lave en DB connection i Tomcat serveren... Altsaa dette i context.xml:
<Resource name="jdbc/xxxxx" auth="Container"
type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@127.0.0.1:1521:XE"
username="xxxxx" password="xxxxx" maxActive="20000" maxIdle="1000"
maxWait="-1"/>
...og dette i web.xml:
<resource-ref>
<description>BANMS DataSource</description>
<res-ref-name>jdbc/xxxxx</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
I java koden er alle mine metoder statiske og alle jsp sider starter med:
Connection con = SystemFunctions.getConnection();
Den metode ser saadan her ud:
public static Connection getConnection() {
Connection con = null;
Context initContext = null;
try {
initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/xxxxx");
con = ds.getConnection();
} catch (NamingException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
} catch (SQLException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
return con;
}
Naar jeg kalder metoder frem og tilbage fra jsp siderne sender jeg connection'en med, saaledes:
blogs = BlogFunctions.getLatestBlogs(con);
...og bruger saa den con(nection) i metoderne.
nederst paa alle jsp siderne lukker jeg con.
Jeg har haft nogle problemer paa sider med en del iframes som skulle bruge hver sin connection, saa jeg proevede at smide connectionen ned i session og hente den i iframes'ne saaledes:
Connection con = SystemFunctions.getConnection();
request.getSession().setAttribute("con", con);
--------
con = (Connection)request.getSession().getAttribute("con");
List<String> categories = CategorizationFunctions.getCategories(con);
Alt dette virker saadan set. Men det haender ret ofte at systemet doer da con er closed eller connection er refused.
Tomcatten burde ellers haandtere denne pooled connection og naar jeg paa jsp siderne lukker con i bunden fatter jeg ikke hvorfor jeg render ind i problemer.
Jeg ved maaske godt at min fremgangsmaade ikke just er optimal og derfor beder jeg vel naermest om hjaelp til at lave koden thread-safe og holde connection'en i live pr. bruger i stedet for pr. side.
Haaber nogen er klar paa at give en "stor" hjaelp her...
