Fragen zu meinem geplanten Projekt

Sebastian29

Erfahrenes Mitglied
Hi an alle!

Server: Linux
Client: WindowsXP, Windows2000

Also, ich möchte gerne eine javabasierte Server-Anwendung mit DB unter Linux und eine Client-Anwendung unter WindowsXP oder Windows2000 bauen! Diese Anwendung hat nichts mit Java EE zu tun, sondern es soll alles mit Java SE verwendet werden.

Wie man diese Anwendung baut, ist für mich kein Problem!
Meine Fragen sind nur folgendes:

- Welche JavaSE - Version ist es sinnvoll, da ich bei dem anderen fertigen Projekt nur mit der Version 1.4.2 unter Windows gebaut habe, d.h. Version 5 oder 6 oder JavaSE unter Linux ist für mich noch neu, aber kein Problem zum Nachschlagen bzw. zum Googlen! ;-)

- Welche DB ist es für die großen Daten sinnvoll? Ich habe irgendwo gelesen, dass DB in Java 6 schon mitdrin ist! Stimmt das? Wenn ja, lohnt sich das auch für die großen Daten? Welche DB ist denn schneller, sauberer und hat bei den großen Daten weniger Probleme, usw.?

- Java ist doch plattformunabhängig und es ist doch toll, dass die Server-Anwendung im Server unter Linux und die Client-Anwendung unter Windows greift auf die Server-Anwendung zu, um die Daten ständig vom Server, der aus der DB holt, auszutauschen. Das würde doch funktioneren oder habe ich noch was vergessen, was man noch wissen muss, z.B. Sicherheit-, Performance-, Ressourcen-, Speicher-, o.a. Probleme?

Habt ihr vielleicht noch andere Fragen bzw. andere Idee zu meinem Projekt?

Danke im voraus!

Gruß
Sebastian29
 
Hallo erstmal.

Also zum Thema der Datenbank würde ich dir empfehlen das ganze so zu realisieren,
dass die Datenbank austauschbar ist.
Also am besten eine Datenbankfactory schreiben, die die Verwaltung der Zugriffe, unterschiedliche Beuntzerrechte usw. managed. Wenn du dir Interfaces schreibst, die du dann nurnoch Datenbankspezifisch implementieren musst, hast du hinterher nicht so viel Ärger falls du doch von zum Beispiel einer MySql DB auf eine Oracle DB umsattelst.

Ein weiterer Punkt der in diesen Bereich fällt ist die Frage ob du nicht vielleicht dir einen Haufen arbeit ersparen willst und einfach einen OR-Wrapper benutzt (ich glaube so hießen die Dinger.)

Ansonsten kann man dir im mom wenig zum Thema Performance, Security und Design weiterhelfen, da dafür die nötigen Infos fehlen, was das ganze überhaupt realisieren/abbilden soll.

Grüße

Gora
 
Hallo erstmal.

Also zum Thema der Datenbank würde ich dir empfehlen das ganze so zu realisieren,
dass die Datenbank austauschbar ist.
Also am besten eine Datenbankfactory schreiben, die die Verwaltung der Zugriffe, unterschiedliche Beuntzerrechte usw. managed. Wenn du dir Interfaces schreibst, die du dann nurnoch Datenbankspezifisch implementieren musst, hast du hinterher nicht so viel Ärger falls du doch von zum Beispiel einer MySql DB auf eine Oracle DB umsattelst.

Das handhabt doch schon die JDBC.
 
Das handhabt doch schon die JDBC.

Ich denke, was er meint, ist, dass er den verwendeten Datenbank-Treiber kapseln soll. Es gibt ja unterschiedliche Treiber für Mysql und Konsorten.

Davon abgesehen, würde ich Benutzerrechte nicht in der Anwendung abbilden. Dafür hat man einen Datenbank-Server. Einfach dort die Rechte definieren, hat auch den Vorteil, dass es keinen Super-User geben muss, über den dann alles läuft.
 
Es ist Irrsinn zu glauben, dass man von Hand Datenbankunabhängigen Code schreiben kann. Jede nicht-triviale Anwendung benötigt "mehr" SQL als es der SQL-92 Standard vorgibt. Die genannten Kandidaten Oracle / MySQL sind grad gute Beispiele. Autoincrement? Geht in der MySQL, ist in der Oracle auch möglich. Allerdings mit völlig anderer DDL. Schonmal versucht MySQL LIMIT in ner Oracle umzusetzen? Viel Spass...

DB Unabhängigkeit geht eigentlich nur mit einem OR Mapper, im Idealfall JPA. Allerdings ist die auch recht beschränkt, so dass man meist bei Hibernate landet. Doch auch damit ist eine Datenbankmigration aufwändig. Datenbankunabhängigkeit im Code reicht nämlich nicht, sobald erstmal Daten in der DB drin sind.

Also nochmal: Datenbankunabhängigkeit ist ein theoretisches Märchen!

Zum Thema:

Wenn du auf Client und Serverseite Java verwendest, empfielt sich RMI als Remotingtechnologie. Auf Serverseite aber eigentlich auch auf Clientseite kann dir Spring bei der Implementierung der technischen Belange sehr entlasten. RMI ist mit Spring z.B. eine Sache der Konfiguration - keine Zeile Code notwendig ;).

Als Datenbank ist MySQL unangefochtener Kandidat im OpenSource Sektor, d.h. der Name fiele relativ schnell.

Grundsätzlich sollten solche Entscheidungen auf den Analyse von funktionalen und nichtfunktionalen Anforderungen geschehen. Von daher kann man sowas schlecht so ins Blaue beantworten.

Gruß
Ollie
 
Hallo,

- Welche JavaSE - Version ist es sinnvoll, da ich bei dem anderen fertigen Projekt nur mit der Version 1.4.2 unter Windows gebaut habe, d.h. Version 5 oder 6 oder JavaSE unter Linux ist für mich noch neu, aber kein Problem zum Nachschlagen bzw. zum Googlen!
Ich würde dir hier zu Java 1.6u10 raten.

- Welche DB ist es für die großen Daten sinnvoll? Ich habe irgendwo gelesen, dass DB in Java 6 schon mitdrin ist! Stimmt das? Wenn ja, lohnt sich das auch für die großen Daten? Welche DB ist denn schneller, sauberer und hat bei den großen Daten weniger Probleme, usw.?
Definiere große Daten? Im Java 6 JDK ist die Java DB enthalten. Das Java DB DBMS ist eine Apache Derby DB die sowohl im Standalone als
auch im Client/Server-Betrieb verwendet werden kann. Dieses DBMS ist für kleine (im Umfang einer kleinen Adressdatenbank, Projektverwaltung DB < 20 MB) Datenmengen ausreichend robust und sehr schnell, jedoch skaliert dieses DBMS IMHO nicht so gut bei mittleren bis größeren Datenmengen (DB > 100 MB) und bietet relativ wenig Tuningmöglichkeiten im Gegensatz zu Datenbanksystemen wie Oracle, MSSQL Server, Mysql, Postgresql und DB2.

Mittlerweile kann man aus dem Open Source Umfeld MySql 5.x und Postgresql 8.x gleichermaßen zu den stärksten verfügbaren freien DBMS zählen.
Siehe: http://www.wikivs.com/wiki/MySQL_vs_PostgreSQL
Welches DBMS schneller ist kann man schwer sagen, da jedes DBMS so viele unterschiedliche Tuningmöglichkeiten bietet und es so schwer wird einen
Vergleich anzustellen, da es immer irgendwo eine Option geben wird, mit der es noch einen Tick schneller geht.

Je nachdem was du vor hast können aber auch kommerzielle Produkte wie Oracle 11g, MSSQL Server oder DB2 für dich von interesse sein.

Ich würde hier bei kleinen / mittleren Client / Server Anwendugen auch auf MySQL als DBMS setzen, aber eher deshalb, weil ich mich damit
am besten auskenne.

- Java ist doch plattformunabhängig und es ist doch toll, dass die Server-Anwendung im Server unter Linux und die Client-Anwendung unter Windows greift auf die Server-Anwendung zu, um die Daten ständig vom Server, der aus der DB holt, auszutauschen. Das würde doch funktioneren oder habe ich noch was vergessen, was man noch wissen muss, z.B. Sicherheit-, Performance-, Ressourcen-, Speicher-, o.a. Probleme?
Aus diesem Satzmonster lese ich nur heraus:
Du willst Daten aus einer Datenbank über einen Linux Server durch einen Windows Client zugreifbar machen und bearbeiten. Klar ist das machbar, aber dein Szenario ist noch ziemlich grob.

Wie Oliver schon schrieb hast du mit "Sicherheit-, Performance-, Ressourcen-, Speicher-, o.a. Probleme" schon einige der sogenannten nicht funktionalen
Anforderungen angesprochen zusätzlich wäre u.a. noch zu nenen Skalierbarkeit, Erweiterbarkeit, Verfügbarkeit, Zuverlässigkeit, Verwaltbarkeit, Asynchronität, etc. Diese musst du schon etwas spezialisieren um klare Technologieaussagen treffen zu können.

Ansonsten kann man nur sehr wage Empfehlungen geben wie etwa, nimm Spring auf client und Serverseite um deine Komponenten zusammen zu stecken, verknüpfe beide Seiten über RMI (oder Hessian, oder Burlap, oder HTTP Remoting, und oder JMS), verwende Data Tansfer Objects, nutze JPA mit oder nur Hibernate als O/RM Persitencelayer und JDBC bzw. Spring JDBC für mehr Komfort um Umgang mit Massendaten. Server entweder als "Standalone"-Anwendung oder im Tomcat als "pseudo" Webapp laufen lassen. Hier noch ein paar Aspekte für Security, Transaktionshandling, Caching, Audit und Recovery und schon sollte das ganze tun. Ach ja, für den Client empfiehlt sich als Basis entweder die Netbeans 6.0 oder die Eclipse Rich Client Platform zu nehmen und und und...

Gruß Tom
 
Zurück