Umiddelbart vil jeg mene det er hip som hap om du har en klasse mellem din tag kode og din database dgang.
Men lav et lille eksperiment og prøv at lave begge muligheder. Hvis den ekstra klasse kan laves så generel at man sparer kode linier i en større applikation, så er det en god ide.
Er du skiftet til DataSource via JNDI lookup ? Fordi det er pænt at bruge det fremfor DriverManager !
Hvis din data adgang skal være det mest avancerede J2EE kan diske op med, så skal det jo være:
Jeg er netop lige nu igang med at prøve at flytte database-delen væk fra mit tag, og ud i en separat klasse. Umiddelbart synes jeg design-mæssigt, at det er forkert at alle tag's selv skal stå for at skabe databaseforbindelsen. Derfor også mit spørgsmål her på Eksperten.
Jeg har ikke skiftet helt over til DataSource endnu, men det er planen at gøre det. Problemet er, at jeg i min jsp-side får en fejl når jeg bruger DataSource, selvom jeg fint kan hente fra databasen.
Det virker, ligesom custom tags, som noget helt genialt!
Desværre er jeg helt grøn på J2EE endnu... så den helt forkromede løsning bliver det nok ikke ;o)
ahhh... jeg troede man lukkede dem, for at få connection tilbage i pool'en igen.I min ellers udemærkede bog står der:
"...when the application calls the close() method, the physical connection to the database is not closed; instead, the pooled connection is returned to the pool."
Jeg har fundet ud af hvorfor jeg fik fejlen. Lidt kode: ... ... Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet rs = stmt.executeQuery(query);
con.close(); return rs; ...
Det er åbenbart et problem, når jeg lukker for connection, og stadig arbejder med det ResultSet jeg får retur... fatter ikke hvorfor, men det virker hvis jeg gør arbejdet med ResultSet færdig inden jeg lukker Connection.
Connection pool virker OK (hjeg var bange for at den bare havde sendt et DriverManager Connection objekt med over og at den fysiske connection blev lukket.
A basic DataSource implementation, that is, one that does not implement connection pooling, is typically provided by a JDBC driver vendor. In a basic DataSource implementation, the following are true: n The DataSource.getConnection method creates a new Connection object that represents a physical connection and encapsulates all of the work to set up and manage that connection. n The Connection.close method shuts down the physical connection and frees the associated resources. In a DataSource implementation that includes connection pooling, a great deal happens behind the scenes. In such an implementation, the following are true:
n The DataSource.getConnection method calls PooledConnection.getConnection to get a logical handle to an underlying physical connection. The overhead of setting up a new physical connection is incurred only if there are no existing connections available in the connection pool. When a new physical connection is needed, the connection pool manager will call the ConnectionPoolDataSource method getPooledConnection to create one. The work to manage the physical connection is delegated to the PooledConnection object. n The Connection.close method closes the logical handle, but the physical connection is maintained. The connection pool manager is notified that the underlying PooledConnection object is now available for reuse. If the application attempts to reuse the logical handle, the Connection implementation throws an SQLException.
Hvilket på almindeligt dansk må betyde at en DataSource Connection som der ikke ligger en connection pool bagved vil en close lukke fysisk. Men for en DataSource Connection som derligger en connection pool bagved vil en close ikke lukke fysisk.
Og det er et krav i specifikationen.
Alle servere bruger connection pool, så det bør være safe at kalde close.
Den bliver selvfølgelig frigjordt selvom man ikke kalder close når connection objektet ryger ud af scope.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.