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

Reply via email to