|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Feb 2010
Messaggi: 1
|
[JAVA] problema jdbc (sql server)+linux
Salve ragazzi, sono nuovo e vi rompo subito con un problema che ci sta portando via una marea di tempo.
Vi spiego bene, perchè è una situazione un po' strana: Come in ogni rete aziendale, c'è la dmz dove girano i webserver (ubuntu 9.10 con glassfish v3, ip:192.168.40.x), l'applicazione è scritta in zk + un framework fatto da noi in java. Nel portale devo far visualizzare dei report che vengono memorizzati (presi di notte da sap, tramite dei job pianificati) in un db sqlserver esterno alla dmz (ip:192.1.1.x), ovviamente la connessione avverrà via jdbc. premessa 1: i report devono eseguire un numero smisurato di query sulla stessa tabella (Anche 200 consecutive). premessa 2: i webserver sono tutti emulati con esxi 3.5 ed (in una prova) l'sql server Sulla mia macchina locale (anch'essa esterna alla dmz ip:192.168.70.x) non ho problemi e vedo i report tranquillamente in tempi accettabili (20 sec in tutto per il report con le 200 chiamate). prova 1: deployo il war sul webserver (in dmz) iniziano i dolori, le chiamate sono lentissime (circa 2 secondi a query), quindi moltiplicandole per 200 chiamate, i tempi sono bibblici. prova 2: sposto il webserver nella rete interna (ip:192.168.10.x) nessun problema prova 3: sposto il webserver e l'sql server nella dmz (ip:192.168.40.x) le chiamate sono più snelle, ma circa a metà inizia a loggarmi delle exception di socket error ed i report vengono troncati prova 4: dal mio pc interrogando l'sql server in dmz, vedo i report senza problemi. prova 5: sposto il webserver nella rete interna (ip:192.168.10.x) ed interrogo l'sql server in dmz le chiamate sono molto lente come nella prova 1 Ho testato ogni sorta di driver JDBC (1.0, 1.1, 1.2, 2.0), ho provato ad aggiungere il parametro sendStringParameterAsUnicode=false nella connection string, ho provato ad aumentare il loginTimeout=55, nulla. La connection string è questa: "jdbc:sqlserver://" + DB_HOST + ";databaseName=" + DB_NAME + ";user=" + DB_USER + ";password=" + DB_PASS; premetto che la connessione viene creata 1 volta sola ed infine chiusa Codice:
.
.
.
if (null != this._list) {
final Connection connection = this.createConnection();
if (null != connection) {
try {
.
.
.
.
.
.
} catch (Throwable t) {
super.getLogger().log(Level.SEVERE, t.toString());
} finally {
this.closeConnection(connection);
}
}
return this._list;
}
return new ArrayList<AgentAquiredProduct>();
}
// -----------------------------------------------------------------------------
// p r i v a t e
// -----------------------------------------------------------------------------
private Connection createConnection() {
try {
final SQLServerDriver driver = new SQLServerDriver();
DriverManager.registerDriver(driver);
return DriverManager.getConnection(SqlServerDb.CONN_STR);
} catch (SQLException ex) {
super.getLogger().log(Level.SEVERE, ex);
}
return null;
}
private void closeConnection(final Connection connection) {
if (null != connection) {
try {
connection.close();
} catch (SQLException ex) {
super.getLogger().log(Level.SEVERE, ex);
}
}
}
}
es: Codice:
// get a query statement final String qryProdList = SqlServerDb.getProductListByCustomerCod(_agentCode, customerCode, _selectedYear, _previousYear, _month); // get live data from sql server final ResultSet prodSet = SqlServerDb.executeQuery(connection, qryProdList); // convert to arraylist if data exist final List<Map> prodList = null != prodSet ? ConversionUtils.toArrayList(prodSet, 1000, true, true) : new ArrayList<Map>(); prodSet.close(); Codice:
public final static ResultSet executeQuery(final Connection connection, final String sqlStatement) throws SQLException {
if (null != connection) {
final Statement statement = connection.createStatement(TYPE_FORWARD_ONLY, CONCUR_READ_ONLY);
return statement.executeQuery(sqlStatement);
}
return null;
}
sinceramente non credo sia tanto un problema di codice, ma più un problema di incompatibilità tra linux e jdbc per sql server, oppure un problema sistemistico di configurazione delle varie subnet. qualcuno di voi ha qualche idea? Ultima modifica di andrewb80 : 16-02-2010 alle 13:21. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:43.



















