Looks like I have problems in loading configuration, or in my checkConnection() method
So I have 2 questions:
1. What is the right way to check connection (e.g. can we process QUERRIES, is DB alive or NOT) ?
2. What is the right way to connect to the DB with provided login password. Sorry Andrus, I remember we had talk about it, but I can`ty find that info.
My solutions (almost sure - they are wrong/ugly):
1. To check connection :
try {
DataSource ds =
Configuration.getSharedConfiguration().getDomain()
.getNode(Messages.getString("LoginManager.DomainName")) //$NON-NLS-1$
.getDataSource();
Connection con = ds.getConnection();
if (!con.isClosed()) {
return ResourceLogin.CONNECTION_RETURN_CONNECTED;
} else {
return ResourceLogin.CONNECTION_RETURN_DISCONNECTED;
}
} catch (SQLException e) {
..... // Process errorr msg and find cause: LOGIN/PSW - wrong, DB server downed, etc.
2. I`m loading configuration, but after that setting login and password to the datasource:
Thread.currentThread().setContextClassLoader(
this.
getClass().
getClassLoader()
);
DefaultConfiguration conf = new DefaultConfiguration();
conf.addClassPath(ResourceLogin.CAYENNE_XML_CONFIGURATIUON_PATH);
Configuration.initializeSharedConfiguration(conf);
Configuration.bootstrapSharedConfiguration(this.getClass());
DataSource dataSource;
try {
dataSource =
new PoolManager("net.sourceforge.jtds.jdbc.Driver", //$NON-NLS-1$
Messages.getString("LoginModel.jdbcConnectParam"), //$NON-NLS-1$
ResourceLogin.DB_MIN_CONNECTIONS,
ResourceLogin.DB_MAX_CONNECTIONS,
login,
password);
Configuration config = Configuration.getSharedConfiguration();
DataDomain domain = config.getDomain();
DataNode node = domain.getNode(Messages.getString("LoginManager.DomainName")); //$NON-NLS-1$
node.setDataSource(dataSource);
return Configuration.getSharedConfiguration().getDomain()
.createDataContext();
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
As well it is good to say that everething this is Eclipse RCP application, so
cayenne.jar is packed as separate plugin (Therefore I`m setting ContextClassLoader).
>I am not sure if you've followed this recent thread, and tried any of
>the suggestions:
>
>http://objectstyle.org/cayenne/lists/cayenne-user/2005/11/0168.html
>
>In short - two likely causes of exhausted connection pool are many
>slow queries being run in parallel or users working at the JDBC (or
>Cayenne ResultIterator) level forgetting to close the connections
>explicitly.
>
>Andrus
>
>
>On Nov 30, 2005, at 5:57 PM, noban wrote:
>> Hi!
>>
>> I`m recieving strange error.
>>
>> After 10 successfull inserts into DB my program recieves error,
>> that I`ve reached max connections count, as you can imagine my max
>> connections count param is set to 10.
>> So my gues is that I`m just wrongly using Cayenne for desktop client.
>>
>> I`m using it in such a way:
>>
>> ...
>> DataContext dataContext = MyConnectionModel.getDataContext();
>> MyTableClass tableClassObj = (MyTableClass)
>> dataContext.createAndRegisterNewObject(MyTableClass.class);
>> tableClassObj .setColumn1Value(value);
>> tableClassObj .setColumn2Value(value);
>> ...
>> try {
>> dataContext.commitChanges();
>> } catch (Exception e) {
>> e.printStackTrace();
>> }
>>
>> Is this right way to do things?
>>
>> I mean taht, my program opens all 10 connections, and thats, all.
>> What I should do to prevent from opening new connections, and
>> how to use opened one`s, or at least close them after:
>> ctxt.commitChanges()?
>>
>> And actually how I can check my hypothesis (that program is opening
>> new connections and holding old one`s)?
>>
>
-- Сегодня удачный день, чтобы завести почту на Яндексе http://mail.yandex.ru
This archive was generated by hypermail 2.0.0 : Thu Dec 01 2005 - 10:08:56 EST