Servertechnologien....was nehmen?

Anime-Otaku

Erfahrenes Mitglied
Webservicetechnologien....was nehmen?

Hallo java Gemeinde,

ich und ein Freund wollen zusammen eine Client zu (und zurück) Datenbankserver Verbindung bauen.
Der Client kann unsere jsp Webseite oder unser Client Programm(hauptsächlich geht es um dieses) sein.
Die Clients(können viel werden...>1000) lesen und schreiben Daten aus der Datenbank. Die Clients dürfen natürlich die Logindaten zur Datenbank nicht kennen, deshalb muss eine Abstraktionsserver her, welcher vielleicht auch die Daten von der Webseite entgegennimmt, keine Ahnung ob das sinnvoll ist. Vielleicht die wichtigsten SQL Geschichten in eine lib packen für beide.

Die Frage, die ich mir stelle ist, welche Server/Service ist da gut zu Verwenden?


Ich habe aus geschäftlichen Zweigen schon Erfahrungen mit Axis und einem Servlet, welches die Daten per Http Post bekam, gemacht, aber so richtig weiß ich nicht, ob das das richtige für diesen Zweck ist.
 
Zuletzt bearbeitet:
Ich würde Euch zu JSPs und HttpSession raten.
Umgesetzt ist das Ganze recht gut in Struts.

Download-Link:
http://struts.apache.org/download.cgi
Dort gibt es auch gut verständliche Beispielprogrämmchen zum Download, um den Umgang mit Struts zu erleichtern.

Zu Beginn verwirrt natürlich die Konfiguration des Ganzen.

Einfach erklärt:
Es gibt nur ein Servlet (der Controller) und erstmal für jeden Link/Seite eine Action, die aus Java-Klasse (von Action abgeleitet) und der JSP besteht.
Für den Austausch zwischen Java-Klasse und JSP werden Struts-Tags verwendet.
Was die Datenbank angeht, kann Struts ein Connection-Pool selbständig verwalten:

Ergänzung in der struts-config.xml:
HTML:
  <data-sources>
    <data-source type="org.apache.commons.dbcp.BasicDataSource">
    <set-property
      property="driverClassName"
      value="com.mysql.jdbc.Driver" />
    <set-property
      property="url"
      value="jdbc:mysql://localhost:4444/TestDB?autoReconnect=true" />
    <set-property
      property="username"
      value="root" />
    <set-property
      property="password"
      value="" />
    <set-property
      property="maxActive"
      value="10" />
    <set-property
      property="maxWait"
      value="5000" />
    <set-property
      property="defaultAutoCommit"
      value="false" />
    <set-property
      property="defaultReadOnly"
      value="false" />
    <set-property
      property="validationQuery"
      value="select * from Testtabelle" />
    </data-source>
  </data-sources>

Benutzen innerhalb der Action-Klasse:
Code:
    Connection con = dataSource.getConnection();
      Statement stmt = con.createStatement();
      ResultSet result = stmt.executeQuery("select ID from Testtabelle");
      while (result.next()) {
        id = result.getInt("ID");
        stmt.executeUpdate("update ZweitTesttabelle set ID = " + id + " where RAD < 7");
      }
 
Möglichkeiten gibt's sicherlich wie Sand am Meer. Jeder tendiert dazu die Technologien vorzuschlagen, welche er am besten kennt.

Ideen:

1) Client JavaApplet
Server in (z.B.) PHP
(Hierbei ist der Vorteil, dass in PHP keine GUI's erstellt werden müssen. Dafür sind Änderungen im ClientInterface (Applet) aufwändiger.
Schön dabei ist auch, dass die serverside Lösung völlig abgekoppelt vom Client existieren kann.

2) Ein App. Server wie z.B. WebObjects. Hierbei muss kein SQL geschrieben werden, das ganze basiert auf einem OR-Mapping. Es ist ein ziemlich genialer Ansatz, wenn man "es" mal begriffen hat, sind sehr schnell gute Lösungen möglich - dabei verliert man die Lust an PHP vollends. :-)
Auf der anderen Seite ist die Einarbeitungszeit relativ hoch.

Viel Glück und vor allem Können! ;-)
 
Wie vielleicht aus der ersten Erklärung nicht direkt erkennbar gewesen ist, ist die jsp Seite erstmal nebensächtlich.

Mir geht es eher darum, was für einen Server/Service man nimmt, damit das Client Programm nicht direkt auf die DB zugreift, sondern dies ein Server/Service dazwischen tut.

Später wird es eine JSP Seite geben, die dann natürlich auch irgendwie auf die Datenbank zurgeift und darum meinte ich, ob man das vielleicht nicht verbindet.

Aber bleib mir blos weg mit php. Ich finde es schon schlimm genug, dass ich es in der Schule lernen muss.Das versaut mir noch meine ganze Software Note.(bitte nicht persönlich nehmen).
 
Hallo,

hier gibts natürlich zahlreiche Möglichkeiten, je nach Anforderungen (Performance / Sicherheit / Skalierbarkeit / Verfügbarkeit).
Ich würde das (mit den bescheidenen Informationen die dein Post hergibt) wahrscheinlich so aufziehen:

Es gibt einen Server der mit der Datenbank kommuniziert. Die Datenbank lauscht nur auf dem lokalen Netzwerkinterface des Servers und kann nicht direkt von außerhalb angesprochen werden. Dieser Server bietet eine (schlanke) wohldefinierte Service-Schnittstelle nach außen über eine Remoting-Technologie (RMI, Spring HTTP Remoting, whatever) an. Datenbankzugriff ist nur indirekt über dieses Service Interface möglich.
Dieser Service Ist komplett zustandslos. Die User müssen sich bei mir registrieren und bekommen dann ein Token zugeschickt (ähnlich dem Verfahren das Amazon für dessen Webservice verwendet). Dieses Token würd bei jedem Serviceaufruf (verschlüsselt") übermittelt, so das ich 1) weis wer gerade versucht meinen Service zu benutzen und 2) ungültige Serviceaufurufe einfach ignorieren kann. Weiterhin würde ich noch verschiedene Mechanismen einbauen um DoS -Angriffen gegenüber gefeilt zu sein. Das Remoting (RMI / Spring HTTP Remoting) würde ich über HTTPS Tunneln.
Usw...

Ich denke dein Post beinhaltet einfach zu wenig Informationen darüber was du genau machen möchtest... damit kannst du keine brauchbaren Vorschläge zusammen bekommen.

Gruß Tom
 
Zurück