ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Clinton Begin <clinton.be...@gmail.com>
Subject Re: Problem with ibatis3 in jboss5.1 - Not closing connection.
Date Thu, 14 Jan 2010 05:46:45 GMT
It wouldn't be hard to change that, but first, the best thing might be to
just write your own transaction manager that works... it's pretty easy.

You can pass any class name in place of "MANAGED" in your configuration.

For example, here's the Managed connection implementation...

public class ManagedTransactionFactory implements TransactionFactory {
  public void setProperties(Properties props) {
  }
  public Transaction newTransaction(Connection conn, boolean autoCommit) {
    return new ManagedTransaction(conn);
  }
}

public class ManagedTransaction implements Transaction {
  private Connection connection;
  public ManagedTransaction(Connection connection) {
    this.connection = connection;
  }
  public Connection getConnection() {
    return connection;
  }
  public void commit() throws SQLException {
    // Does nothing
  }
  public void rollback() throws SQLException {
    // Does nothing
  }
  public void close() throws SQLException {
    // Does nothing
  }
}


On Wed, Jan 13, 2010 at 10:28 PM, Stefan Hagström <stha721@gmail.com> wrote:

> Hi, thanks!
>
> Its a managed connection (CMT).
> When using plain JBDC in an SLSB the jdbc connection is opened and closed
> in each method.
> When closing a method it is not really closed but rather returned to the
> connection pool.
>
> The container is afaik responsible for commit/rollback of the current
> transaction, not closing the "checked out"
> connection.
>
> Does this make sense? does anyone else got ibatis working with jboss 5.1?
>
>
> BR
> Stefan
>
>
> 2010/1/14 Clinton Begin <clinton.begin@gmail.com>
>
> If it's a managed connection, it will not be closed, even if you call
>> session.close().  The underlying container / transaction manager is
>> responsible for closing it.  So the transaction scope for your SLSB should
>> be opening and closing the connection.  Otherwise, change the transaction
>> type to JDBC.
>>
>> Clinton
>>
>>
>> On Wed, Jan 13, 2010 at 2:43 PM, Stefan Hagström <stefan@iserv.se> wrote:
>>
>>>
>>>
>>>
>>>
>>> Hi!
>>>
>>> I'm new to Ibatis, and have tried to create a simple slsb as a dao with
>>> ibatis 3 with jboss 5.
>>>
>>> However it seems like connection are not closed/returned. Jboss is
>>> complaining about connections not beeing closed:
>>>
>>> 21:32:15,146 INFO  [CachedConnectionManager] Closing a connection for
>>> you.  Please close them yourself:
>>> org.jboss.resource.adapter.jdbc.jdk5.WrappedConnectionJDK5@8cffca
>>> java.lang.Throwable: STACKTRACE
>>>
>>>  I've attached the configuration and slsb, any ideas?
>>>
>>>
>>> <configuration>
>>> <settings>
>>> <setting name="cacheEnabled" value="false"/>
>>> <setting name="lazyLoadingEnabled" value="false"/>
>>> </settings>
>>>   <typeAliases>
>>>     <typeAlias type="dto.valuecode.ValueCode" alias="ValueCode"/>
>>>   </typeAliases>
>>>
>>>   <environments default="prod">
>>>
>>>        <environment id="prod">
>>>        <transactionManager type="MANAGED">
>>>        </transactionManager>
>>>        <dataSource type="JNDI">
>>>          <property name="data_source" value="java:/kalenderDB"/>
>>>        </dataSource>
>>>      </environment>
>>>   </environments>
>>>
>>>
>>>   <mappers>
>>>     <mapper resource="META-INF/ValueCode.xml"/>
>>>   </mappers>
>>> </configuration>
>>>
>>>
>>>
>>> @Stateless
>>> public class ValueCodeDao implements ValueCodeDaoInterface {
>>>
>>> SqlSessionFactory sqlSessionFactory=null;
>>>
>>> @PostConstruct
>>> public void setup(){
>>>
>>> System.out.println("Reading Ibatis configuration for ValueCodeDao");
>>>
>>> String resource = "META-INF/ibatis.xml";
>>> Reader reader;
>>> try {
>>> reader = Resources.getResourceAsReader(this
>>> .getClass().getClassLoader(),resource);
>>> sqlSessionFactory =  new SqlSessionFactoryBuilder().build(reader);
>>>
>>>
>>> } catch (IOException e) {
>>>
>>> e.printStackTrace();
>>> }
>>>
>>> }
>>>
>>>
>>> public int getNextValueCodeNumber(){
>>>
>>> SqlSession session = sqlSessionFactory.openSession();
>>> session.close();
>>>
>>> return 1;
>>>
>>> }
>>>
>>>
>>> }
>>>
>>>
>>
>

Mime
View raw message