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