Galera blz, preciso da ajuda de vcs, existe um projeto legado aqui na empresa onde trabalho e o mesmo veio para nós damos manutenção nele. Queria saber da opinião de vcs visto a lista de problemas abaixo se a mudança que estou propondo fazer irá solucionar ?
Problemas
org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544336. deadlock
update conflicts with concurrent update No message for code 335544878 found at
Erro: GDS Exception. 335544569. Dynamic SQL Error 335544569
SQL error code = -504
Invalid cursor reference
Cursor is not open
Erro: GDS Exception. 335544336. deadlock
update conflicts with concurrent update
No message for code 335544878 found.
org.firebirdsql.gds.impl.GDSHelper.fetch(268)
org.firebirdsql.jdbc.FBStatementFetcher.fetch(201)
org.firebirdsql.jdbc.FBStatementFetcher.next(119)
org.firebirdsql.jdbc.AbstractResultSet.next(250)
Mudança
Hoje a conexão está sendo feita assim
[code]public static void conectar() {
try {
Class.forName(“org.firebirdsql.jdbc.FBDriver”);
connection = DriverManager.getConnection(Variaveis.caminhoBanco, ParametrosLocais.getParametro(ParametrosLocais.USER_BANCO), ParametrosLocais.getParametro(ParametrosLocais.PASS_BANCO));
connection.setAutoCommit(false);
connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
isConnected = true;
}
catch (ClassNotFoundException cnfex) {
isConnected = false;
ultimoErro = cnfex.toString();
}
catch (SQLException sqlex) {
sqlex.printStackTrace();
isConnected = false;
ultimoErro = sqlex.toString();
}
}[/code]
Eu sei muito bem que a conexão dessa forma da problema mas o pessoal não acredita e a solução que proponho é mudar para pool de conexões geranciado pelas propria API do firebird
[code] public static void conectar() {
try {
String caminhoBanco = Variaveis.caminhoBanco;// jdbc:firebirdsql:127.0.0.1/23050:/home/alex/apoio/apoio.fdb?lc_ctype=WIN1252
caminhoBanco = caminhoBanco.replace(“jdbc:firebirdsql:”, “”);
caminhoBanco = caminhoBanco.replace("?lc_ctype=WIN1252", “”);
FBWrappingDataSource pool = new org.firebirdsql.pool.FBWrappingDataSource();
pool.setMaxPoolSize(5);
pool.setMinPoolSize(2);
pool.setMaxStatements(300);
pool.setMaxIdleTime(30 * 60 * 60);
pool.setDatabase(caminhoBanco);
pool.setPooling(true);
pool.setCharSet("WIN1252");
pool.setUserName(ParametrosLocais.getParametro(ParametrosLocais.USER_BANCO));
pool.setPassword(ParametrosLocais.getParametro(ParametrosLocais.PASS_BANCO));
pool.setUseStreamBlobs(true);
connection = pool.getConnection();
connection.setAutoCommit(false);
connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
isConnected = true;
} catch (Exception sqlex) {
sqlex.printStackTrace();
isConnected = false;
ultimoErro = sqlex.toString();
} finally {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}[/code]
Alguém já passou por esse problema e sabe me responder se estou no caminho certo ?