You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ibatis.apache.org by "Mark Nabours (JIRA)" <ib...@incubator.apache.org> on 2005/02/04 17:50:25 UTC
[jira] Commented: (IBATIS-66) com.ibatis.common.util.Throttle not decrementing Session counter causes application to hang
[ http://issues.apache.org/jira/browse/IBATIS-66?page=comments#action_58604 ]
Mark Nabours commented on IBATIS-66:
------------------------------------
Regarding the uploaded SqlMapExecutorDelegate.java:
This is a proposed patch implemented by my colleague Jeff Roberts. The added line of code is the pushSession(session); line in setUserProvidedTransaction that ends up decrementing the session counter, and therefore preventing the freeze in Throttle.
public void setUserProvidedTransaction(SessionScope session, Connection userConnection) {
if (session.getTransactionState() == TransactionState.STATE_USER_PROVIDED) {
session.recallTransactionState();
}
if (userConnection != null) {
Connection conn = userConnection;
session.saveTransactionState();
session.setTransaction(new UserProvidedTransaction(conn));
session.setTransactionState(TransactionState.STATE_USER_PROVIDED);
} else {
session.setTransaction(null);
pushSession(session);
}
}
> com.ibatis.common.util.Throttle not decrementing Session counter causes application to hang
> -------------------------------------------------------------------------------------------
>
> Key: IBATIS-66
> URL: http://issues.apache.org/jira/browse/IBATIS-66
> Project: iBatis for Java
> Type: Bug
> Components: SQL Maps
> Versions: 2.0.9
> Environment: WSAD/WebSphere 5.1, Windows XP Pro
> Reporter: Mark Nabours
> Attachments: SqlMapClientSessionTest.java, SqlMapExecutorDelegate.java
>
> Hello,
> I have a rather serious problem to which we need a quick resolution.
> In brief, the increment method on the Throttle class is being called for
> sessions after executing SqlMapClient.setUserConnection() but the
> corresponding decrement method is never being called. After we reach the
> session limit configured in sql-map-config.xml the application hangs hard!
> Here are some of the specifics, we are using iBATIS to map data from a
> database to our own set of data objects. However, we are not using iBATIS
> to acquire the database connections; we are externally providing them to
> the iBATIS SqlMapClient through the setUserConnection method, and we clear
> the transaction out by calling setUserConnection and passing null for the
> connection. We have our own connection acquisition code that we use and
> therefore we do not even have a transactionManager element configured
> within sql-map-config.xml -- we would prefer not to have to configure it
> since it requires a data source to be configured and our connection
> acquisition code if highly flexible to use different types of connection
> ion various environments. It's my understanding that it is perfectly
> acceptable to use iBATIS by providing external connections as long as you
> handle all of your transactional requirements (which we do).
> I have attached the following test case that illustrates the problem. We
> have configured the maximum session count to 75. Don't read too much into
> our test case code as it acquires a single connection and immediately
> closes it so that we don't leave the connection open when the test case
> freezes. We loop 80 times and we hang after 75 iterations.
> /*
> * Created on Feb 3, 2005.
> */
> package com.alliancesys.common.ibatis.testing;
> import java.io.Reader;
> import java.sql.Connection;
> import java.sql.SQLException;
> import com.alliancesys.common.jdbc.DatabaseConnectionService;
> import com.ibatis.common.resources.Resources;
> import com.ibatis.sqlmap.client.SqlMapClient;
> import com.ibatis.sqlmap.client.SqlMapClientBuilder;
> import junit.framework.TestCase;
> /**
> * <code>{@link SqlMapClientSessionTest}</code>
> *
> */
> public class SqlMapClientSessionTest extends TestCase {
> private int threadCounter = 0;
> public SqlMapClientSessionTest(String arg0) {
> super(arg0);
> }
> public static void main(String[] args) {
> junit.textui.TestRunner.run(SqlMapClientSessionTest.class);
> }
> private synchronized void writeCount(){
> threadCounter++;
> System.out.println("Thread " + threadCounter + " completed.");
> }
> public void testThrottleSessionLock() throws Exception {
> final Connection connection =
> DatabaseConnectionService.getNewConnection();
> connection.close();
> Reader reader =
> Resources.getResourceAsReader(
> getClass().getClassLoader(),
> "sql-map-config.xml");
> final SqlMapClient sqlMapClient =
> SqlMapClientBuilder.buildSqlMapClient(reader);
> for (int i = 0; i < 80; i++) {
> Runnable runnable = new Runnable() {
> public void run() {
> try {
> SqlMapClient client = sqlMapClient;
> Connection cn = connection;
> client.setUserConnection(cn);
> client.setUserConnection(null);
> writeCount();
> } catch (SQLException e) {
> e.printStackTrace();
> }
> }
> };
> Thread t = new Thread(runnable);
> t.start();
> }
> }
> }
> If you run it, you will notice that if you have max sessions configured to
> 75 it hangs after completion of the 75 thread.
> Our sql-map-config.xml file is as follows:
> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
> <!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "
> http://www.ibatis.com/dtd/sql-map-config-2.dtd">
> <sqlMapConfig>
> <properties
> resource="ibatis.properties" />
> <settings
> cacheModelsEnabled="true"
> enhancementEnabled="true"
> maxSessions="75"
> maxTransactions="20"
> maxRequests="140" />
> <sqlMap resource="Contact.xml" />
> </sqlMapConfig>
> We are hoping that it is a configuration problem, but we suspect that the
> decrement method on Throttle needs to be called internally.
> Let me thank you in advance for you help. iBATIS is an great product, but
> this is currently preventing us from moving through QA into production.
> Thanks,
> Mark Nabours
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
http://www.atlassian.com/software/jira