I have that *not quite* right - you need to also override the TransactionConfig and specify *that* class in the SqlMapConfig.xml file.
 
Jeff Butler


 
On Sat, Apr 12, 2008 at 7:12 AM, Jeff Butler <jeffgbutler@gmail.com> wrote:
I think your last option is not that bad - it centralizes the initialization of the Connection.
 
Another option with iBATIS is to implement your own transaction manager.  Write a class that subclasses the current transaction manager you are using and override the getConnection() method.  Look in the package com.ibatis.sqlmap.engine.transaction and subpackages to see the code for the iBATIS supplied transaction managers.  In the overridden method, initialize the connection before returning it.
 
In your sqlMapConfig.xml file, you can specify your new transaction manager:
 
<transactionManager type="com.mycompany.MyTransactionManager">
  ...
</transactionManager>
 
For example,
 
public class MyTransactionManager extends JdbcTransaction {
 
  @Override
  public Connection getConnection() throws SQLException, TransactionException {
    Connection conn = super.getConnection();
    Statement stmt = conn.createStatement();
    stmt.execute("set temporary ....");
    return conn;
  }
}
 
Jeff Butler


 
On Sat, Apr 12, 2008 at 6:20 AM, Alex Perez <quimicefa@gmail.com> wrote:
Hi All,

I'm trying to adapt an existing application running with ibatis, to work with sybase.

To write the sqlpmaps, I've just rewrited the SQL server 2000 ones, and just worked ok. The tests were done with Sybase ASA 9.x (the "enterprie version").

The problem begins when trying to get it working with Sybase OEM, that it's the same databae enginte, but ready to embed into applications. My company has a OEM contract to use this engine as an embedded database in our products. But (and here starts the nightmare), due to some license restrictions it's mandatory send a sentence each time you start a connection database like:

SET TEMPORARY OPTION connection_authentication="XXXXXXXXXXXXX" [really a very large string]

Otherwise you'll only be able to send select statements to the database, and get disconnected after 10 seconds aprox.

The first attempt was, in my sybase-database.properties, put a jdbc url:
         jdbc:sybase:localhost:port?ServiceName=database_name?sqlinitstring="set temporary ........"

But I get an exception due to the driver. It seems like the jdbc url cannot be longer than 253 chars, and the auth_string is about 500 chars long.

Also I 've tried to send this "set option" trought an ibatis "update" statements, like an stored procedure, but unsuccessfully.

The last test to get it working, was:
In this code: http://www.mirthproject.org/fisheye/browse/Mirth/tags/1.7.0/server/src/com/webreach/mirth/server/util/SqlConfig.java?r=2754

after the .buildSqlMapClient() call, doing a (in pseudo-code)

conn = sqlMap.getDatasource().getConnection();
Statement stmt = conn.createStatement();
stmt.execute("set temporary ....");
stmt.commit();

To try to bypass Ibatis layer [yes, it's horrible]

Could anyone help me to figure out how can I send the "set temporary option ..." for every connection created to the database ?

thanks in advance.


--
3rd Law of Computing:
Anything that can go wrSegmentation fault -- core dumped.