Angel,

The example uses a DataSource, which essentialy IS a connection pool.
Have a look at
http://commons.apache.org/dbcp/apidocs/org/apache/commons/dbcp/BasicDataSource.html

Suppose you configure mina with a thread-pool that uses maximum 10 threads,
and you configure
a BasicDataSource to have a fixed size of 10.
Then only 10 connections will be made to the database during the entire
lifecycle of your server,
and a thread should never have to wait for a db-connection to become
available.

One of our servers has constantly 300 tcp connections or more, but uses only
15 db connections.

Maarten

On 11/2/07, Angel.Figueroa <[EMAIL PROTECTED]> wrote:
>
>
> Maarten,
>
>     In you example. Every time messageReceived is called for a IoSession,
> you make a new connection. The cost for the connection will be high,
> particular for a database connection.
>
> But Suppose the example is change to use a Connection Pool. In that way
> every time a new client is connected to the server, a new connection is
> added to the db connection pool, or reuse a connection that is not
> associated to a IOSession.
>
> How this can me implemented in mina.?
>
> Angel Figueroa
>
>
>
> Maarten Bosteels wrote:
> >
> > On 11/2/07, Angel.Figueroa <[EMAIL PROTECTED]> wrote:
> >>
> >>
> >> Maarten,
> >>
> >>    I understand that the messageReceived will never be called
> >> simultaneously
> >> for the same session. But it can be called concurrently for different
> >> IoSession's.
> >>
> >>    Let put a real example. A Server Application that received SQL Query
> >> from
> >> different client connected to it.
> >>    Each client sent a SQL query to the Server. The Server has 10
> >> connections
> >> to the database.
> >>
> >>     How the  messageReceived can process each client request (SQL
> Query)
> >> simultaneously, using the 10 connections  ?
> >
> >
> >
> > The fact that messageReceived can be called simultaneously (by multiple
> > threads)
> > just means that you have to be careful with using shared resources, but
> > other than that, you don't need to worry.
> >
> > Since it's reasonable that any DataSource implementation is thread-safe,
> > you
> > could implement your example like this:
> >
> > public class QuickMina extends IoHandlerAdapter {
> >
> >   DataSource dataSource;
> >
> >   public void setDataSource(DataSource dataSource) {
> >     this.dataSource = dataSource;
> >   }
> >
> >   public void messageReceived(IoSession session, Object message) throws
> > Exception {
> >     // a TextLineDecoder will ensure that passed in message is a string
> >     String sql = (String) message;
> >     Connection connection = dataSource.getConnection();
> >     try {
> >       Statement stmt = connection.createStatement();
> >       try {
> >         int rowsUpdated = stmt.executeUpdate(sql);
> >         session.write("rows updated: " + rowsUpdated);
> >       } catch(SQLException e) {
> >         session.write("failed: " + e.getMessage());
> >       } finally {
> >         stmt.close();
> >       }
> >     } finally {
> >       connection.close();
> >     }
> >
> >   }
> > }
> >
> > Disclaimer:
> > I haven't tested this code, it's just an example. I wouldn't advise you
> to
> > allow clients to send db updates this way :-)
> >
> > Maarten
> >
> >
> >
> >>
> >>
> >>
> >> Maarten Bosteels wrote:
> >> >
> >> > Angel,
> >> >
> >> > Your question is not really clear to me.
> >> > What exactly are you worried about ?
> >> > Note that, by default, messageReceived will never be called
> >> simultaneously
> >> > for the same session.
> >> > But it can be called concurrently for different IoSession's, this
> does
> >> not
> >> > pose a problem by itself.
> >> > You just have to make sure your implementation is thread-safe: don't
> >> store
> >> > conversattional state in instance fields of your IoHandler and
> properly
> >> > synchronize access to shared data.
> >> > This is all very analogous to servlet programming.
> >> >
> >> > Maarten
> >> >
> >> > On 11/1/07, Angel.Figueroa <[EMAIL PROTECTED]> wrote:
> >> >>
> >> >>
> >> >> If more that one message is received at the same time. How to
> control
> >> the
> >> >> execution of the business logic method.
> >> >>
> >> >>     public void messageReceived(IoSession session, Object message)
> >> throws
> >> >> Exception
> >> >>     {
> >> >>
> >> >>
> >> >>
> >>
> //----------------------------------------------------------------------
> >> >>         // received the Request Transaction
> >> >>
> >> >>
> >>
> //----------------------------------------------------------------------
> >> >>         String theMessage = ( String ) message;
> >> >>
> >> >>
> >> //--------------------------------------------------------------
> >> >>         // Process Transaction Code business logic method
> >> >>
> >> //--------------------------------------------------------------
> >> >>         theMessage = transaction.ProcessTransaction
> >> (theMessage,arclient);
> >> >>
> >> >>
> >> >>
> >>
> //----------------------------------------------------------------------
> >> >>         // send the response Transaction Back
> >> >>
> >> >>
> >>
> //----------------------------------------------------------------------
> >> >>         session.write(theMessage);
> >> >>     }
> >> >>
> >> >> --
> >> >> View this message in context:
> >> >>
> >>
> http://www.nabble.com/messageReceived-and-bussiness-logic-tf4729241s16868.html#a13522950
> >> >> Sent from the Apache MINA Support Forum mailing list archive at
> >> >> Nabble.com
> >> >> .
> >> >>
> >> >>
> >> >
> >> >
> >>
> >> --
> >> View this message in context:
> >>
> http://www.nabble.com/messageReceived-and-bussiness-logic-tf4729241s16868.html#a13541041
> >> Sent from the Apache MINA Support Forum mailing list archive at
> >> Nabble.com
> >> .
> >>
> >>
> >
> >
>
> --
> View this message in context:
> http://www.nabble.com/messageReceived-and-bussiness-logic-tf4729241s16868.html#a13546644
> Sent from the Apache MINA Support Forum mailing list archive at Nabble.com
> .
>
>

Reply via email to