Oki,

You're right, the current code in CVS doesn't include connection pooling
(the JDBCMailRepository is what I've been working on).  I have to finish the
configuration stuff along with that, and was planning to integrate the
excalibur connection pooling code in with that.  My JDBC driver has a
connection pooling built into it, so at least for my current testing
environment, I could get away without that (temporarily)..

Serge Knystautas
Loki Technologies
http://www.lokitech.com/
----- Original Message -----
From: "Oki DZ" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Friday, July 20, 2001 12:31 AM
Subject: DB connection pooling in 1.3-dev


> Hi,
>
> I just started to test the version 1.3 of James. It works. I don't know
> how much faster it is; I use it on a production machine, so that the
> necessary ports are basically used. Anyway, I think the JDBCUserRepository
> and JDBCMailRepository should use a database connection pooling service,
> so that the server doesn't have to always connecting and disconnecting to
> the db server each time it has to retrieve/store mail.
>
> There is JdbcDataSource class from Avalon Excalibur that does connection
> pooling; unfortunately, it doesn't work (I have posted a message to the
> dev. list). Hopefully, it gets fixed soon. I think it would be pretty
> natural to use the conn. pooling from Avalon; James already uses Avalon,
> so having an extension of it to support the pooling would be the right
> choice.
>
> BTW, if you want to use another pooling implementation, you can use
> Turbine. It would sound a bit overkill to use it just to have the pooling
> service. But for the long run, it might be good. For example, if James
> would implement a web based administration service. Turbine has a
> templating service, and I think Avalon could have a simple servlet
> container in the future. This would be beneficial for those who'd like to
> have James but don't want to install a fullblown servlet container like
> Tomcat.  Additionally, you can choose to have the necessary Turbine
> services to be started; so the memory usage could be set into minimum.
>
> Just in case you want to use Turbine, I already have Turbine got loaded by
> James (ie: Phoenix). Turbine is a singleton, so you want to make sure that
> it gets loaded once (twice or more would be allright, except that it would
> print out some message). The snippet code is in the following:
>
> public class TurbineLoader extends AbstractLoggable
>     implements Block, Configurable, Initializable {
>
>     private String turbinePath, turbineFilename;
>
>     public void configure(Configuration configuration)
> throws ConfigurationException {
> turbinePath = configuration.getChild("properties")
>     .getChild("path")
>     .getValue(".");
> turbineFilename = configuration.getChild("properties")
>     .getChild("filename")
>     .getValue("TurbineResources.properties");
> getLogger().info("Configuration loaded.");
>     }
>
>     public void initialize() throws Exception {
> try {
>     new TurbineConfig(turbinePath, turbineFilename).init();
>     getLogger().info("Turbine initialized.");
> } catch(Exception e) {
>     getLogger().error("Turbine initialization failed." +
>       e.getMessage(), e);
>     throw e;
> }
>     }
> } // TurbineLoader
>
> And in assembly.xml:
>  <block class="com.pindad.james.services.TurbineLoader"
> name="class-loader">
>   </block>
>
> in config.xml:
>   <class-loader name="Turbine">
>     <properties>
>       <path>/some/path/jakarta-james/dist/apps/james/conf</path>
>       <filename>TurbineResources.properties</filename>
>     </properties>
>   </class-loader>
> I think having a "turbine-loader" instead of "class-loader" would be
> nicer.
>
> And some changes in server.xml to have the elements for the appropriate
> logger.
>
> The only problem is that you'd have an additional config file to maintain;
> Turbine needs it. Hopefully, Turbine can be configured by using a
> java.util.Properties in the future, so that the props could be set from
> James' config.xml.
>
> BTW, to get a connection is pretty straightforward:
> // countUsers() in UsersRepository
>     public int countUsers() {
> int numofusers = 0;
> try {
>     DBConnection dbConn = getConnection();
>     count = dbConn.getConnection().prepareStatement(countStr);
>     rs = count.executeQuery();
>     if (rs.next())
> numofusers = rs.getInt(1);
>     rs.close();
>     releaseConnection(dbConn);
> } catch(Exception e) {
>     getLogger().error("Error in getting user count - " +
> e.getMessage(), e);
> }
> return numofusers;
>     }
>
> Oki
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to