Ik ben een beetje aan het proberen met J2EE en Tomcat (5). Ik heb een servlet gemaakt dat een relatie uit de database moet halen. Om verbinding te maken met de database heb ik een DAOFactory gemaakt die een RelationDAO maakt met de juiste database implementatie, in dit geval Firebird 1.5. Doel is om later nog meer databases toe te voegen.
Dit is de code van de FbDAOFactory dat verantwoordelijk is voor het maken van de verbinding:
De code in de servlet is als volgt:
Maar als ik nu vanuit de RelationFbDAO de getConnection aanroep krijg ik de foutmelding
Komt dit door de static declaratie? Want als ik de FBWrappingDataSource steeds opnieuw maak in de RelationDAO werkt het wel. Maar door steeds opnieuw het object te maken is er geen connection pooling. Kan iemand mij zeggen hoe dit beter kan/moet?
Dit is de code van de FbDAOFactory dat verantwoordelijk is voor het maken van de verbinding:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| public class FbDAOFactory extends DAOFactory { private static String username = "SYSDBA"; private static String password = "masterkey"; private static String databaseURL = "127.0.0.1:3050/var/spool/firebird/hostadmin.gdb"; static FBWrappingDataSource fbDs = null; public static Connection getConnection() throws Exception { if (fbDs == null) { fbDs = new FBWrappingDataSource(); InitialContext ctx = new InitialContext(); databaseURL = (String) ctx.lookup("java:comp/env/dao/databaseUrl"); username = (String) ctx.lookup("java:comp/env/dao/username"); password = (String) ctx.lookup("java:comp/env/dao/password"); fbDs.setUserName(username); fbDs.setPassword(password); fbDs.setDatabase(databaseURL); fbDs.setBlockingTimeout(1500); fbDs.setType("TYPE4"); fbDs.setPooling(true); } Connection c = null; c = fbDs.getConnection(); //fbDs != null, blijkt uit debugging c.setAutoCommit(false); return c; } .... } |
De code in de servlet is als volgt:
code:
Bovenstaande code heeft in de servlet de nodig catches om eventuele excepties af te vangen.1
2
3
4
| String relationNumber = "1"; DAOFactory daoFactory =DAOFactory.getDAOFactory(); //<-- aangepast. RelationDAO relationDAO = daoFactory.getRelationDAO(); Relation relation = relationDAO.findRelationByRelNumber(relationNumber); |
Maar als ik nu vanuit de RelationFbDAO de getConnection aanroep krijg ik de foutmelding
code:
1
| java.sql.SQLException: Could not obtain connection during blocking timeout (1500 ms) |
Komt dit door de static declaratie? Want als ik de FBWrappingDataSource steeds opnieuw maak in de RelationDAO werkt het wel. Maar door steeds opnieuw het object te maken is er geen connection pooling. Kan iemand mij zeggen hoe dit beter kan/moet?
[ Voor 7% gewijzigd door FendtVario op 18-11-2004 21:22 ]
www.fendt.com | Nikon D7100 | PS5