Hi Rainer, Thank you very much for your explanation.
To summarize, only one db instance (DBDatabase.open) is required for the whole application. The result can be stored in a static context or in the session of the application (i.e. static class) Do we understand each other? Regards, exxos. On Thu, Aug 26, 2010 at 8:33 PM, Rainer Döbele <[email protected]> wrote: > Hi exxos, > > > > sorry but I have been on a business trip and not been able to answer. > > > > The intention is to open the database once in the startup code of your > application, i.e. when the webapp is started on the application server and > before handling any requests. > > We then normally first check whether the actual data model of the db > matches your internal data model object, either by comparing each table and > column (there is some code to do that supplied with the Oracle driver) or > simply by storing a version stamp in a special table and comparing this > version stamp to ours. > > > > As the DBDatabase.open does not keep the supplied connection you should > return it back to your connection pool after the open has been performed. > For each request you should then obtain a connection from the pool and use > it for the entire request (in opposition to fetch a new connection for every > operation and return it immediately). We normally see the whole request as a > transaction that we either commit or rollback at the end of the request, > depending on whether an error occurred or not. > > > > For simplicity and to be able to make the connection configurable in our > config file, we do not use a connection pool in our web exsamples but of > course we recommend to do so and the overall layout of your > empire-db-example-struts2 is quite a good example for that. > > All you need to with this example is to create a connection pool and > provide a different implementation for the getPooledConnection() and > releaseConnection(Connection conn) in the class > org.apache.empire.struts2.websample.web.SampleApplication to obtain and > return a connection from the pool rather then use the static one that we > create at the start and that is held on the application object. > > Every time a connection is needed it is then fetched via the SampleRequest > object, which requests it once and release it when the request ends and exit > is called. > > > > I hope this answers your question. > > Regards > > Rainer > > > > > > *from:* exxos [mailto:[email protected]] > *to:* [email protected] > *re:* Re: About the DBDatabase instance opened in a web application > > > > Hi Rainer, > > We need your opinion on that. Could you please add a comment, it will be > great? > > Regards, > exxos. > > On Tue, Aug 24, 2010 at 10:12 AM, Francis De Brabandere < > [email protected]> wrote: > > Hi Exxos, > > I think it's better to wait for Rainer to respond on this one. I would > personally not cache the DB on application level but he has way more > experience with empire-db. Creating a class instance is cheap, and the > db.open does not do that much (select the correct database on the > connection and set up the sequence table object). > > Cheers, > Francis > > > On Tue, Aug 24, 2010 at 9:44 AM, exxos <[email protected]> wrote: > > Hi Francis, > > > > Just to be sure about what we are discussing here. This is about the > > following steps: > > > > MyDB db = new MyDB<DBDatabase>(); > > Connection conn = <DataSrouce>.getConnection(); > > DBDatabaseDriver driver = new DBDatabaseDriverXXX(); > > db.open(driver, conn); > > > > Could you confirm that the instance "db" does not have to be put in > > application session (or in a the static context). > > According to your previous answer, for performance purpose, it is better > to > > reopen and close it for each DB request. > > > > Thank you to confirm. > > > > Regards, > > exxos. > > > > > > On Tue, Aug 24, 2010 at 1:20 AM, Francis De Brabandere < > [email protected]> > > wrote: > >> > >> Oops, thats the answer to a different question but somehow still valid > >> as you should return your connection to the pool at the end of the > >> request. > >> > >> You could have a look at the SampleRequest/SampleApplication in the > >> struts2 example but I have the impression that that example is not > >> that great as I uses one connection on application level which is not > >> what you should do on a production system. > >> > >> Maybe I can add a wicket or plain servlet example one day... > >> > >> These are all good questions :-) might add this one to the faq > >> > >> Rainer? > >> > >> Cheers, > >> Francis > >> > >> On Tue, Aug 24, 2010 at 12:51 AM, Francis De Brabandere > >> <[email protected]> wrote: > >> > Open and close on each request. For higher performance better have > >> > some kind of connection pool like c3po > >> > (http://http://sourceforge.net/projects/c3p0/) or apache commons dbcp > >> > or whatever pooling your appserver has/supports. > >> > > >> > Cheers, > >> > Francis > >> > > >> > On Tue, Aug 24, 2010 at 12:43 AM, exxos <[email protected]> wrote: > >> >> Hi, > >> >> > >> >> Probably a "simple" question... > >> >> > >> >> For a web application, what is preferable? > >> >> > >> >> Keeping a DBDatabase instance opened (and attached to a driver) in > the > >> >> application session (as static for example) or open and close it each > >> >> time a > >> >> db request? > >> >> > >> >> > >> >> Regards, > >> >> exxos. > >> >> > >> > > >> > > >> > > >> > -- > >> > http://www.somatik.be > >> > Microsoft gives you windows, Linux gives you the whole house. > >> > > >> > >> > >> > >> -- > >> http://www.somatik.be > >> Microsoft gives you windows, Linux gives you the whole house. > > > > > > > -- > > http://www.somatik.be > Microsoft gives you windows, Linux gives you the whole house. > > >
