Hallo,
ich habe hier mehrere Java-Programme (JProg_x), die alle nach dem
gleichen Muster gestrickt sind und bisher auf einem Windows2000
Server-Betriebssystem mit der Datenbank MSSQL-Server 2000 problemlos
laufen und jetzt auf ein Windows2008 Server Betriebssytem mit dem MSSQL
Server 2008 portiert werden sollen.
Die Java-Programme werden mit dem JSL (Java Server Launcher) als Dienste
installiert und die Konfigurationsdaten für den Datenbankzugriff werden
jeweils aus der Datei "config\configuration.xml" in dem
programmspezifischen Verzeichnis gelesen.
Dort ist der Datenbankzugriff so konfiguriert :
<database>
<driver>com.microsoft.jdbc.sqlserver.SQLServerDriver</driver
<url>jdbc:microsoft:sqlserver://192.168.24.4:1433;DatabaseName=db_xy;Sel
ectMethod=Cursor;</url>
<user>db_xyu</user>
<password>xyz</password>
</database>
Der Datenbankzugriff mit dem Programm "JProg_1.jar" funktioniert damit
offenbar (es kommen jedenfalls keine Exception-Meldungen o.ä. im
Logfile, auch wenn ein näherer Test mangels aktueller Daten, auf die das
Programm reagieren müsste, schlecht möglich ist).
Die beiden praktisch identischen Programme "JProg_2.jar" und
"JProg_3.jar" mit dem gleichen Datenbanktreiber bekommen jedoch keine
Datenbankverbindung und bringen u.a. diese Fehlermeldung :
ERROR 2012-07-10 01:20:01,081 [Timer-0] (?:?):Could not connect to
Database (Driver: com.microsoft.jdbc.sqlserver.SQLServerDriver URL:
jdbc:microsoft:sqlserver://192.168.24.10:1433;DatabaseName=db_xy;SelectM
ethod=direct User: db_xyu Password: xyz)! Maybe in the next run!
de.?????.????.common.exceptions.ConfigurationRwisException: Could not
connect to Database (Driver:
com.microsoft.jdbc.sqlserver.SQLServerDriver URL:
jdbc:microsoft:sqlserver://192.168.24.10:1433;DatabaseName=swis_regio;Se
lectMethod=directUser: db_xyu Password: xyz)!
Kann es sein, dass mit dem oben angegebenen Treiber bei der
Betriebsystem- / Datenbankkombination "W2008 Server / MSSQL2008" ev. nur
ein Programm eine Datenbankverbindung aufbauen kann und zusätzliche
Verbindungen von anderen Programmen aus nicht möglich sind ?
Hat jemand Tipps für ev. besser geeignete Java-Datenbanktreiber für die
Betriebsystem- / Datenbankkombination "W2008 Server / MSSQL2008", die
man in dem Konfigurationsfile angeben könnte?
Compiliert wird der Java-Code mit einem Ant- buildfile (build.xml) unter
Eclipse, Java Version 1.6
Danke !
interrupt schrieb:> Kann es sein
... Testfall schreiben bringt Gewissheit. Exception und Konfiguration
scheinen sich zu unterscheiden (cursor versus direkt).
Eventuell musst du den Instanznamen noch angeben.
Läubi .. schrieb:> ... Testfall schreiben bringt Gewissheit. Exception und Konfiguration> scheinen sich zu unterscheiden (cursor versus direkt).
Ich habe schon "cursor" und "direct" ausprobiert, hat in beiden Fällen
nicht funktioniert.
Hast du die datenbank auch passend auf den Gemischten anmeldemodues
eingestellt? Im Standard verwendet die Datenbank nur Windows-Anmeldungen
da kommt man mit einem Passwort nicht rein.
Peter II schrieb:> Hast du die datenbank auch passend auf den Gemischten anmeldemodues> eingestellt? Im Standard verwendet die Datenbank nur Windows-Anmeldungen> da kommt man mit einem Passwort nicht rein.
Ja, eingestellt ist SQL-Authentifizierung, und wie gesagt, mit einem
Programm scheint der Zugriff ja zu funktionieren.
Peter II schrieb:> steht der anmeldeversuch im Log der Datenbank?
Gute Frage, muss ich nachsehen.
Unabhängig davon : Welche Datenbanktreiber verwendet ihr bei der
Kombination "W2008 Server / MSSQL2008"
interrupt schrieb:> und wie gesagt, mit einem> Programm scheint der Zugriff ja zu funktionieren
Dann scheint es ja auch kein Problem zu geben... Geh doch einfach mal
systematisch auf Fehlersuche anstatt im Nebel zu stochern...
interrupt schrieb:> nur> ein Programm eine Datenbankverbindung aufbauen kann und zusätzliche> Verbindungen von anderen Programmen aus nicht möglich sind ?
Ja da war was. Ich musste damals in die Login-Daten rein schreiben (mit
dem String, mit dem ich mich verbinde), dass ich Multiple Verbindungen
haben will
interrupt schrieb:> Unabhängig davon : Welche Datenbanktreiber verwendet ihr bei der> Kombination "W2008 Server / MSSQL2008"
per ODBC verwenden wir einfach den Systemtreiber der geht mit der 2000
un dem 2008 Server.
Auch unter linux mit FreeTDS musst ich keinen Treiber welchseln wo wir
von 2000 auf 2008 umgellt haben.
Ich glaube MS hat bei der anmeldung nichts geändert, und wenn eine
anwendung geht wird as Problem wo anders sein. (Andere Port, falsche IP
usw).
> Could not connect to Database
Kommt die meldung sofort, oder scheint es ein Timeout zu sein
Läubi .. schrieb:> Dann scheint es ja auch kein Problem zu geben... Geh doch einfach mal> systematisch auf Fehlersuche anstatt im Nebel zu stochern...
Es gibt SICHER ein Problem, das zeigt ja das Logfile.
Die Frage war ja auch, ob mit dem Treiber ev. nur EINE DB-Verbindung
möglich ist, was das Verhalten ja erklären, aber auch einen anderen
Treiber notwendig machen würde.
Troll schrieb:> Ja da war was. Ich musste damals in die Login-Daten rein schreiben (mit> dem String, mit dem ich mich verbinde), dass ich Multiple Verbindungen> haben will
Hast Du dazu einen Beispielstring ?
interrupt schrieb:> Die Frage war ja auch, ob mit dem Treiber ev. nur EINE DB-Verbindung> möglich ist, was das Verhalten ja erklären, aber auch einen anderen> Treiber notwendig machen würde.
Und was hält dich davon ab einfach ein Testprogramm zu schreiben welches
deine Vermutung bestätigt? Und wie viele Alternative JDBC Treiber hast
du den zur Verfügung/getestet?
Läubi .. schrieb:>> Die Frage war ja auch, ob mit dem Treiber ev. nur EINE DB-Verbindung>> möglich ist, was das Verhalten ja erklären, aber auch einen anderen>> Treiber notwendig machen würde.>> Und was hält dich davon ab einfach ein Testprogramm zu schreiben welches> deine Vermutung bestätigt? Und wie viele Alternative JDBC Treiber hast> du den zur Verfügung/getestet?
Meine begrenzte Zeit. Und weil Diskussionsforen einem den Aufwand
ersparen sollten, das Rad immer wieder neu zu erfinden.
Alternative JDBC-Treiber habe ich noch keine getestet und zur Verfügung,
aber es sollte wohl kein grosses Problem sein, welche herunterzuladen,
wenn jemand einen funktionierenden kennt.
Ausserdem könnte das Thema durchaus von breiterem Interesse sein.
Was hältst Du davon, eine System-DSN zu konfigurieren und Dein JDBC via
ODBC darauf zugreifen zu lassen? Dann musst Du alle
verbindungsspezifischen Dinge nur noch bei der System-DSN einstellen,
und nicht für Deine Java-Programme.
Obacht allerdings, den ODBC-Administrator gibt es unter x64 zweimal, in
grenzdebiler Weise hat MS entschieden, daß System-DSNs getrennt für
32-Bit- und für 64-Bit-Prozesse eingerichtet werden müssen.
Das dafür zuständige Programm odbcad32.exe liegt entweder unter
%systemroot%\system32 (dann ist es logischerweise die x64-Variante) oder
unter %systemroot%\syswow64 (dann ist es auch logischerweise die
x86-Variante.
Im Startmenü und über die Systemsteuerung ist nur die x64-Variante zu
finden.
Rufus Τ. Firefly schrieb:> Was hältst Du davon, eine System-DSN zu konfigurieren und Dein JDBC via> ODBC darauf zugreifen zu lassen?
Danke für den Hinweis, Rufus.
Habe ich schon gemacht, es handelt sich um ein 64-Bit-System, für die
32-Bit-Programme habe ich aber auch eine System DSN ODBC-Verbindung
eingerichtet und die funktioniert auch mit verschiedenen Programmen
(mehrere CPP-Programme und auch ein Java-Programm, alles
Windows-Dienste)
Da aber der Zugriff mit weiteren praktisch identisch gestrickten
Java-Programmen nicht funktioniert, hatte ich den Verdacht, dass der
verwendete Java-Treiber nur eine Verbindung zur Datenbank gleichzeitig
aufbauen kann.
Bei den Java-Datenbank-Treibern gibt es ja auch vier verschiedene Typen,
wovon nur ein Typ die ODBC-Schnittstelle nutzt.
Von welchem Typ der momentan eingesetzte Treiber
<url>jdbc:microsoft:sqlserver://192.168.24.10:1433;DatabaseName=db_xyz;S
electMethod=Direct;</url>
ist, konnte ich bisher noch nicht eindeutig herausfinden.
interrupt schrieb:> Von welchem Typ der momentan eingesetzte Treiber>> <url>jdbc:microsoft:sqlserver://192.168.24.10:1433;DatabaseName=db_xyz;S> electMethod=Direct;</url>>> ist, konnte ich bisher noch nicht eindeutig herausfinden.
Na, das wird der native Treiber für MS SQL-Server sein, ODBC nutzt das
Ding nicht.
Würdest Du via ODBC auf eine eingerichtete System-DSN zugreifen, müsste
Dein Verbindungsstring so aussehen:
jdbc:odbc:myDSN
(statt "myDSN" natürlich der Name Deiner System-DSN).
aber über ODBC von JAVA aus zugehen ist doch unsinn. Wenn schon MS eine
java treiber liefert sollte man ihn nutzen.
Vergiss das ODBC zeug an dieser stelle.
Finde erstemal raus ob die verbindung überhaupt zu stande kommt. Zur not
netzwerk mitlesen. Verwende ein andere Paswort - schau ob sie die
meldung ändert. Ändere die IP - schau was passiert.
interrupt schrieb:> Meine begrenzte Zeit. Und weil Diskussionsforen einem den Aufwand> ersparen sollten, das Rad immer wieder neu zu erfinden.
Es geht hier doch garnicht ums neuerfiden, sondern dass duversuchst hier
hilfe für ein Problem zu finden was möglicherweise garnicht existiert!
Bau doch die Verbindung einfach per Hand auf, und parrallel dazu eine
zweite dann siehst du sofort was Sache ist. Das dauert keine 5 Minuten
und anhand der pezifischen Fehlermeldung kann man dann gerne nach einer
Lösung fragen... aber glauben und programmieren gehört einfach nicht
zusammen.
interrupt schrieb:> Alternative JDBC-Treiber habe ich noch keine getestet und zur Verfügung,> aber es sollte wohl kein grosses Problem sein, welche herunterzuladen,> wenn jemand einen funktionierenden kennt.
sollte könnte hätte...
interrupt schrieb:> Ausserdem könnte das Thema durchaus von breiterem Interesse sein
ja könnte... dann wäre es dir aber sicher möglich auf andere Seiten zu
verweisen welche ein Ähnliches Problem beschreiben...
Der Datenbankzugriff funktioniert jetzt, nachdem ich einen anderen
Treiber verwende und den TCP/IP-Port 1433 für den SQL Server nochmal
explizit freigegeben habe :
1.) Freier JTDS-Treiber von http://jtds.sourceforge.net
<driver>net.sourceforge.jtds.jdbc.Driver</driver> <!-- für
"jtds-1.2.5-dist.jar" -->
<url>jdbc:jtds:sqlserver://localhost/db_xyz</url> <!-- für
"jtds-1.2.5-dist.jar" url=jdbc:jtds:sqlserver://SERVER-NAME/DB-NAME -->
2.) Freigabe TPC/IP Port 1433
Start Alle Programme Microsoft SQL Server 2008 R2 / Configuration
Tools SQL Server Configuration Manager SQL Server Network
Configuration Protocols for SQL xyz TCP/IP / IP Adresses :
Bei IP1 - IP5 und IPAll den Wert für "TCP Port" auf "1433" gesetzt
getestet mit den Java-Version jdk1.6.0.7 und jdk1.6.0.20
interrupt schrieb:> Der Datenbankzugriff funktioniert jetzt, nachdem ich einen anderen> Treiber verwende und den TCP/IP-Port 1433 für den SQL Server nochmal> explizit freigegeben habe :
dann wird es aber nicht im Treiber gelegen haben. War ja klar das es am
ende etwas mit den etzwerk zu tun hat. Aus dem Grund hatte ich ja
geschrieben du sollst mal das netzwerk mitlesen.
Der MS Treiber soll etwas besser sein, der TDS Treiber hat(te) ein
Probme mit Datumswerten (War zumindest vor 4Jahren so).
Peter II schrieb:> Der MS Treiber soll etwas besser sein,
Von welchem MS-Treiber sprichst Du (mssqlserver.jar, sqljdbc.jar,
sqljdbc4.jar, ...) ?
Hast Du den selbst im Einsatz ?
Bei den Treibern sqljdbc.jar UND sqljdbc4.jar kam bei mir diese Meldung
:
"java.lang.UnsupportedOperationException: Die Java-Laufzeitumgebung
(Java Runtime Environment, JRE), Version 1.6, wird von diesem Treiber
nicht unterstützt. Verwenden Sie die Klassenbibliothek 'sqljdbc4.jar',
die Unterstützung für JDBC 4.0 bietet."