Fehler beim Starten des Java DB servers

Allgemeine Themen rund um Java

Moderator: wegus

Antworten
Trzuez
Beiträge: 2
Registriert: 03.02.2014, 20:57

Fehler beim Starten des Java DB servers

Beitrag von Trzuez » 03.02.2014, 21:26

Hallo Leute,

ich will kurz erklären, wie mein Background aussieht: Ich möchte ein Programm schreiben, dass eine Datenbank braucht und die Daten aus dieser nutzt und verrechnet usw. Den Rechenalgorithmus habe ich schon. Da ich ein Neuling bin in Java und nicht weiß, wie man eine Datenbank implementiert, habe ich ein Youtube-Tutorial gefunden, das zeigt, wie man ganz einfach mit Netbeans so eine Datenbank erstellen kann. Alles schön und gut, aber irgendwie klappt es nicht so, wie ich es möchte.
Hier der Link zum Tutorial-Video: http://www.youtube.com/watch?v=D5TkdXSRzsM
Das Tutorial erklärt es folgendermaßen: Man muss zuerst den Java DB Server starten(zu finden unter Services/Databases), bevor man eine DB erstellen kann.
Beim Serverstart erhalte ich aber folgende Meldung:

Code: Alles auswählen

Mon Feb 03 21:48:17 CET 2014 : access denied ("java.net.SocketPermission" "localhost:1527" "listen,resolve")
java.security.AccessControlException: access denied ("java.net.SocketPermission" "localhost:1527" "listen,resolve")
	at java.security.AccessControlContext.checkPermission(AccessControlContext.java:372)
	at java.security.AccessController.checkPermission(AccessController.java:559)
	at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
	at java.lang.SecurityManager.checkListen(SecurityManager.java:1134)
	at java.net.ServerSocket.bind(ServerSocket.java:375)
	at java.net.ServerSocket.<init>(ServerSocket.java:237)
	at javax.net.DefaultServerSocketFactory.createServerSocket(ServerSocketFactory.java:231)
	at org.apache.derby.impl.drda.NetworkServerControlImpl.createServerSocket(Unknown Source)
	at org.apache.derby.impl.drda.NetworkServerControlImpl.access$000(Unknown Source)
	at org.apache.derby.impl.drda.NetworkServerControlImpl$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.apache.derby.impl.drda.NetworkServerControlImpl.blockingStart(Unknown Source)
	at org.apache.derby.impl.drda.NetworkServerControlImpl.executeWork(Unknown Source)
	at org.apache.derby.drda.NetworkServerControl.main(Unknown Source)
Und wenn man weiter macht nach dem Tutorial, dann kommt folgende Fehlermeldung:

Code: Alles auswählen

"An error occurred while creating the database: java.sql.SQLNonTransientConnectionException: java.net.ConnectException:Fehler beim Herrstellen der Verbindung zum Server localhost am Port 1527. Nachricht: Connection refused: connect.."
Was ich bisher getan habe:
- Apache Treiber installieren; ich habe mich am offiziellen Installationsguide gehalten; ob alles nach Anleitung geklappt hat, weiß ich nicht
-GlassFish installieren; ist installiert, hat aber nichts gebracht irgendwie, habe mich an offiziellen Netbeans-Anleitungen gehalten.
- gegoogelt und nichts gefunden


Was ist los? Was kann ich tun, damit ich die DBs erstellen kann? Wo liegt das Problem und wie kann es gelöst werden?

Außerdem noch ein paar generelle Fragen:
-Kann ich überhaupt über andere Programme auf die Daten der Datenbank zugreifen und nutzen?
-Kann ich diese DB in eine App integrieren? Ich habe nämlich vor, mein Programm als App für Smartphones zu realisieren.
-Kann man die Datenbank so gestalten, dass die Nutzer der App sie selber erweitern können?
-Wenn das alles funktionieren sollte, wie kann es realisiert werden?

Vielen Dank im Voraus,

Trzuez.

ebaumann
Beiträge: 285
Registriert: 22.01.2009, 08:53
Wohnort: Würzburg
Kontaktdaten:

Re: Fehler beim Starten des Java DB servers

Beitrag von ebaumann » 04.02.2014, 08:34

Die Exception besagt, dass Kommunikation über den Port 1527 nicht erlaubt ist. Vermutlich ist dieser durch die Firewall des Betriebssystems gesperrt.

Ich sehe folgende Probleme: Du schreibst, dass du Java noch nicht ausreichend beherrscht. Dann möchtest du gleich einen Datenbankserver benutzen, ohne dessen Grundlagen zu verstehen, in diesem Fall, wie Derby funktioniert - es hat zwei Möglichkeiten: Eingebettete Datenbank oder den komplexeren Server-Modus, der über einen Port - Default 1527 - mit Derby-Clients kommuniziert. Für Datenbankanbindungen in Java sollte man zumindest JDBC verstehen, auch wenn man später vielleicht Abstraktionen wie JPA z.B. via Hibernate nutzt.

Das verlinkte Video finde ich ungeeignet, sowohl für Anfänger - denen wird nicht erklärt was überhaupt geschieht - als auch für Fortgeschrittene, da nicht erklärt wird, wie man jenseits von Klick, klick, klick konfiguriert (Port, Verzeichnis der Datenbankdaten etc.. Eigentlich kommen Fortgeschrittene von selbst auf die Lösung). Man kann nicht in 7 Minuten eine sinnvolle Basis für Anfänger geben, wie in Java Datenbankanwendungen programmiert werden. Es ist besser, erst die Grundlagen von Java zu lernen - besonders den Unterschied zwischen der Sprache und damit realisierten Bibliotheken wie dem JDK, dann wie damit sinnvolle Anwendungen programmiert werden, das heißt brauchbare "Frameworks" zu nutzen, beispielsweise der NetBeans Platform. Das ist monatelange Arbeit.

Vielleicht braucht die Anwendung gar keine Datenbank? Das lässt sich aus den Informationen nicht herleiten. Sollen mehrere Benutzer die gleichen Daten benutzen, ist ein Datenbankserver die richtige Wahl, z.B. Derby, dann sollte man das Apache Derby-Manual vorher lesen, Einstieg: http://db.apache.org/derby/quick_start.html Das gibt eine wesentlich solidere Basis als ein kurzes Video. In dem Zusammenhang kann man JDBC lernen, daraufhin vielleicht JPA, alles parallel zum Lernen Sprache Java und dem JDK. Das Tutorial ist ein guter Startpunkt: http://docs.oracle.com/javase/tutorial/ ... index.html

Trzuez
Beiträge: 2
Registriert: 03.02.2014, 20:57

Re: Fehler beim Starten des Java DB servers

Beitrag von Trzuez » 04.02.2014, 15:37

Hallo ebaumann,

vielen Dank, dass du so schnell geantwortet hast. Also sollte ich all das eher aus einer ganzheitlicheren Sicht angehen und nicht alles überstürzen. Ich finde deinen Ansatz sinnvoll und werde mir alles Stück für Stück beibringen. Am Ende bin ich ja der verantwortliche für die App. Ich lasse das Thema noch offen, falls andere etwas hinzuzufügen haben.


Vielen Dank nochmal, ebaumann.

Edit: Muss der Port für andere Dinge auch entsperrt sein?

ebaumann
Beiträge: 285
Registriert: 22.01.2009, 08:53
Wohnort: Würzburg
Kontaktdaten:

Re: Fehler beim Starten des Java DB servers

Beitrag von ebaumann » 05.02.2014, 07:49

Trzuez hat geschrieben:Muss der Port für andere Dinge auch entsperrt sein?
Welche anderen Dinge? Vielleicht lässt sich auf dem Apache Derby-Site herausfinden, welche Protokolle (TCP, UDP) freigegeben werden müssen und weiteres Sicherheitsrelevantes. Das wäre sicher eine interessante Ergänzung dieses Threads. Da ich in einem abgeschlossenen Netzwerk arbeite, sind bei mir die Freigaben erst einmal relativ großzügig. Je höher die Sicherheitsanforderungen sind, desto mehr ist es natürlich erforderlich, alleine die Minimalanforderungen freizugeben, nicht mehr. Die Konfigurationsdatei des Derby-Servers sollte dann ebenfalls genutzt werden, in ihr ist einzutragen, von welchen IP-Adressen der Derby-Server Anfragen akzeptiert.

vlastaK
Beiträge: 1
Registriert: 21.02.2014, 22:36

Re: Fehler beim Starten des Java DB servers

Beitrag von vlastaK » 23.02.2014, 11:49

Hallo Trzuez,

dieser Fehler ist eigentlich kein Fehler, sondern eine Art Sicherheitsvorkehrung und hat nichts mit Portsperren oder Sperren des Systems zu tun.

Es gibt dazu eine Datei names java.policy. Sie befindet sich in dem Installationsverzeichnis des JDK :
jdkXYZ/jre/lib/security/java.policy

Als Administrator/ oder root (je nach BS)
  • Datei sichern (Sicherungskopie erstellen)
    Eintrag einfügen (im zweiten grant-block)
    • // permission for java-db
      permission java.net.SocketPermission "localhost:1527", "listen,resolve";
Sollte dann so aussehen :

Code: Alles auswählen

// Standard extensions get all permissions by default

grant codeBase "file:${{java.ext.dirs}}/*" {
        permission java.security.AllPermission;
};

// default permissions granted to all domains

grant {
        // Allows any thread to stop itself using the java.lang.Thread.stop()
        // method that takes no argument.
        // Note that this permission is granted by default only to remain
        // backwards compatible.
        // It is strongly recommended that you either remove this permission
        // from this policy file or further restrict it to code sources
        // that you specify, because Thread.stop() is potentially unsafe.
        // See the API specification of java.lang.Thread.stop() for more
        // information.
        permission java.lang.RuntimePermission "stopThread";

        // allows anyone to listen on dynamic ports
        permission java.net.SocketPermission "localhost:0", "listen";

        // permission for standard RMI registry port
        permission java.net.SocketPermission "localhost:1099", "listen";

	// permission for java-db
	permission java.net.SocketPermission "localhost:1527", "listen,resolve";

        // "standard" properies that can be read by anyone

        permission java.util.PropertyPermission "java.version", "read";
        permission java.util.PropertyPermission "java.vendor", "read";
        permission java.util.PropertyPermission "java.vendor.url", "read";
        permission java.util.PropertyPermission "java.class.version", "read";
        permission java.util.PropertyPermission "os.name", "read";
        permission java.util.PropertyPermission "os.version", "read";
        permission java.util.PropertyPermission "os.arch", "read";
        permission java.util.PropertyPermission "file.separator", "read";
        permission java.util.PropertyPermission "path.separator", "read";
        permission java.util.PropertyPermission "line.separator", "read";

        permission java.util.PropertyPermission "java.specification.version", "read";
        permission java.util.PropertyPermission "java.specification.vendor", "read";
        permission java.util.PropertyPermission "java.specification.name", "read";

        permission java.util.PropertyPermission "java.vm.specification.version", "read";
        permission java.util.PropertyPermission "java.vm.specification.vendor", "read";
        permission java.util.PropertyPermission "java.vm.specification.name", "read";
        permission java.util.PropertyPermission "java.vm.version", "read";
        permission java.util.PropertyPermission "java.vm.vendor", "read";
        permission java.util.PropertyPermission "java.vm.name", "read";

};

Schon sollte der nächste Start funktionieren.

Mfg
Vlasta

Antworten