On 11/2/07, Angel.Figueroa <[EMAIL PROTECTED]> wrote:
>
>
> Maarten,
>
> If you have a class that make the connection to the database and
> process the sql query. Is recommended to has a class instance for each
> IOSession? How you associated the class instance with the ioseccion?
No, I would use a stateless singleton: one instance that is used by all
IoSession's.
In fact, I would use Spring's JdbcTemplate.
Do you have an example that describe the use to the basicdatasource with
> mina.
Just look at the docs of DBCP. The fact that you use it from an MINA app
really doesn't matter.
Maarten
Angel Figueroa
>
>
>
> Maarten Bosteels wrote:
> >
> > 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
> >> .
> >>
> >>
> >
> >
>
> --
> View this message in context:
> http://www.nabble.com/messageReceived-and-bussiness-logic-tf4729241s16868.html#a13547580
> Sent from the Apache MINA Support Forum mailing list archive at Nabble.com
> .
>
>