# JDBC simulieren



## fuexli81 (10. Aug 2006)

Hallo zusammen

Ich habe folgendes Problem: ich bin Server bzw. eine Datenbank und erhalte Anfragen von Clients, die per Definition vorgegeben sind. Ich muss die Anfragen bearbeiten.

Nun will ich die Anfragen erhalten und diese dann nach meinem Gusto bearbeiten. Konkret erhalte ich Stored Procedure-Calls, welche ich jedoch nicht ausführen kann, da nicht die gesammte Datenbank bei mir abgebildet ist. Ich muss die Anfrage also sehen (am liebsten Plaintext) und diese dann manuell analysieren und je nach dem z.B. mit Standardantworten reagieren.

Hat jemand eine Idee wie ich so etwas machen kann? Ich glaube Mock-Objekte helfen da nichts, da diese nur auf Clientseite eingesetzt werden können.
Wahrscheinlich benötige ich einen eigenen JDBC-Connector oder? Weiss jemand wo ich dazu Dokumentation finde? Oder hat vielleicht sogar schon einmal jemand so etwas gemacht??

Danke & Grüsse!


----------



## KSG9|sebastian (10. Aug 2006)

Nun ja, das sieht mir nach ner reichlich schlechten Architektur vom Programm aus, oder etwa nicht?
Gibt es feste Kriterien mit denen du die Anfragen unterscheiden kannst, b.s.p.

call auf Tabelle x -> weiterleiten an Server 1
call auf Tabelle y -> weiterleiten an Server 2

gruß


----------



## fuexli81 (10. Aug 2006)

Nee, es ist so, dass ich einen Simulator schreiben muss, der eine ganze Menge darunterliegende Systeme simuliert. Ich habe keinen Einfluss auf die Architektur.

Und noch zur Frage: es ist egal welche Anfragen dass kommen (oder auf welche Tabelle sie gehen würden), ich will sie alle einfach manuell verarbeiten können. Eigentlich will ich einen Server schreiben, der einen Stream z.B. in ein Logfile schreibt. Nur muss der Streamserver auf JDBC-Art angesprochen werden können, da ich eine Datenbank simuliere...


----------



## bronks (11. Aug 2006)

fuexli81 hat gesagt.:
			
		

> Nee, es ist so, dass ich einen Simulator schreiben muss, der eine ganze Menge darunterliegende Systeme simuliert. Ich habe keinen Einfluss auf die Architektur.
> 
> Und noch zur Frage: es ist egal welche Anfragen dass kommen (oder auf welche Tabelle sie gehen würden), ich will sie alle einfach manuell verarbeiten können. Eigentlich will ich einen Server schreiben, der einen Stream z.B. in ein Logfile schreibt. Nur muss der Streamserver auf JDBC-Art angesprochen werden können, da ich eine Datenbank simuliere...


Schnapp Dir einfach einen OpenSource JDBC-Treiber und wirf einen genauen Blick rein. Danach wirst Du schon wissen wo es lang geht.


----------



## fuexli81 (11. Aug 2006)

Ich hab mir den Mysql-JDBC-Connector geschnappt... das ist aber ein riesen Haufen Code... kennt jemand noch einen etwas kleineren??


----------



## fuexli81 (11. Aug 2006)

Eine ganz andere Frage: ist es möglich auf der Server-Seite einfach ein Socket hinzustellen, dass auf einen entsprechenden Port hört? Kriege ich in diesem Socket dann irgend ein Datenstream der Anfragen?

Kurz meine Vorstellung:
*Client* macht seine Anfrage wie folgt:

```
Connection conn = getConnection("jdbc:oracle:thin:@host:1521:dbname", "user_name", "<pw>");
CallableStatement cs1 = conn.prepareCall ("begin lqs_unitydb_v10.check (:1,:2); end;");
```

*Serverseitig*: hier wartet ein TCP-Socket dass auf Port 1521 hört. Wenn nun der Client eine Anfrage abschickt, was kommt dann auf dem Server raus? Ist so eine Verbindung von JDBC auf Socket überhaupt möglich?? Sehe ich beim Server irgendetwas? Und kann ich vielleicht in dem Socket die Plaintext-Anfrage rausholen?

Danke!


----------



## bronks (11. Aug 2006)

fuexli81 hat gesagt.:
			
		

> Eine ganz andere Frage: ist es möglich auf der Server-Seite einfach ein Socket hinzustellen, dass auf einen entsprechenden Port hört? Kriege ich in diesem Socket dann irgend ein Datenstream der Anfragen?
> 
> Kurz meine Vorstellung:
> *Client* macht seine Anfrage wie folgt:
> ...


@fuexli81:
Lausch mal am Port ...  Schon am Handshake wird es scheitern ...

Du mußt einen JdbcTreiber zerlegen und eine Schicht gegen das austauschen, was mit Deinem Simulator kommuniziert.


----------



## Guest (11. Aug 2006)

Suche mal nach P6Spy + IronTrack SQL

P6Spy wird als JDBC-Treiber verwendet, leitet alles an den eigentlichen Treiber weiter und
loggt das ganze JDBC Hin und Her. Der "richtige" Treiber wird über eine Konfigurationsdatei
eingestellt. Es funktioniert ähnlich wie eine Proxyserver oder Relayserver bei HTTP.
IronTrack SQL ist ein Viewer für diese Loggs. Wenn du den Verbindungsaufbau nicht gerade 
fest im Code stehen hast, ist keine Änderung im Code nötig, um es zu verwenden.


----------



## fuexli81 (14. Aug 2006)

hey super - vielen dank! ich werd mir das auf jedenfall mal zu gemüte führen, denn so wie du das beschreibst ist das genau das was ich suche!
vielen dank & grüsse!


----------

