Portierung Java DB-Zugriffe von MSSQL2000 nach MSSQL2008;

Gast #2781948
Lesenswert?

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 !
Gast #2781985
Lesenswert?

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
Gast #2781987
Lesenswert?

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.
Persönliche Seite #2781997
Lesenswert?

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?
Gast #2782306
Lesenswert?

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.
Persönliche Seite #2782555
Lesenswert?

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.
Gast #2782771
Lesenswert?

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.
Persönliche Seite #2782801
Lesenswert?

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).
Gast #2782806
Lesenswert?

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.
Persönliche Seite #2783681
Lesenswert?

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...
Gast #2785349
Lesenswert?

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
Gast #2785447
Lesenswert?

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).
Gast #2786225
Lesenswert?

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."
Gast #2786313
Lesenswert?

interrupt schrieb:
> Von welchem MS-Treiber sprichst Du (mssqlserver.jar, sqljdbc.jar,
> sqljdbc4.jar, ...) ?
> Hast Du den selbst im Einsatz ?

ich denke es war dieser hier (bzw. sein vorgänger v3)

http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=11774

> Hast Du den selbst im Einsatz ?
nein, bin von java geheilt. Wir verwenden jetzt c#.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren