Lua als Konfigurationsdatei nutzen - ein Krampf

Breas

Mitglied
Hallo zusammen,

ich würde gerne eine Lua - Datei als Konfigurationsfile für eine Java Anwendung nutzen.
Nun habe ich mir in LuaEdit mehrere Tabellen angelegt wie es in vielen Tutorials beschrieben ist.

Schaut so aus = >
Code:
> t1 = {}
> t1[1] = "moustache"
> t1[2] = 3
> t1["brothers"] = true
> t2 = {[1] = "groucho", [3] = "chico", [5] = "harpo"}
> t3 = {[t1[1]] = t2[1], accent = t2[3], horn = t2[5]}
> t4 = {}
> t4[t3] = "the marx brothers"
> t5 = {characters = t2, marks = t3}
> t6 = {["a night at the opera"] = "classic"}

Das parsen des Lua Files scheint auch zu funktionieren. Hier ist der Java Code für das parsen =>
Java:
try {
			String file = "main.lua";
			LuaParser parser = new LuaParser(new FileInputStream(file));
			Chunk chunk = parser.Chunk();
			chunk.accept( new Visitor() {
				public void visit(Exp.NameExp exp) {
					System.out.println("Name in use: "+exp.name.name
						+" line "+exp.beginLine
						+" col "+exp.beginColumn);
				}
			} );
		} catch ( ParseException e ) {
			System.out.println("parse failed: " + e.getMessage() + "\n"
				+ "Token Image: '" + e.currentToken.image + "'\n"
				+ "Location: " + e.currentToken.beginLine + ":" + e.currentToken.beginColumn 
				         + "-" + e.currentToken.endLine + "," + e.currentToken.endColumn);
		}

Leider ist mir bisher nicht gelungen irgendetwas brauchbares auszulesen. Ich habe auch keine Ahnung was da schief läuft.

Bei Ausführung des Codes erhalte ich folgende Ausgabe :
Name in use: files line 1 col 1
Name in use: files line 2 col 1

oder so etwas : ( wenn ich versuche an irgendwelche Werte zu kommen )
[Ljava.lang.reflect.Field;@27d6c5e0

Hoffentlich kann mir jemand von euch helfen. Ich finde auch im Internet nicht wirklich etwas verwertbares außer eben die Dinge die ich hier auch verwende.

Gruß
Breas
 
Zuletzt bearbeitet von einem Moderator:

kaoZ

Top Contributor
Wenn jede Zeile deiner LUA Datei mehrere einträge enthalten kann, solltest du beigehen und dann dementsprechend entweder daraus String oder Object Arrays machen , mit welchen du dann Arbeitest, die Frage ist dann auch noch was am ende erwartet wird, Strings ? Integer ? Beides in Kombination ?

Das Problem was ich da erkenne ist das es alles gemischt ist , boolsche Werte, Strings , Integer, und da stellt sich mir halt die Frage wie das dann weiterverarbeitet werden soll.

Denn das entscheidet dann wie du was parsen musst.

EDIT : ist der LUA-Parser deiner Feder entsprungen oder nutzt du eine API ?
 
Zuletzt bearbeitet:

Breas

Mitglied
Hallo kaoZ,

ich habe glaube ich den falschen Antwort Button benutzt :)

Ich nutze Zur Zeit eine XML Konfigurationsdatei - das blöde sind die vielen Getter und Setter die JAXB benötigt und die damit entstehenden Klassen. Wenn das alles ineinander geschachelt wird, beginnt dies ziemlich recht unübersichtlich und es entsteht unter Umständen ein richtiger Klassen und Listenwald.

Deshalb wollte ich das ganze mit Lua ersetzen und Tabellen für jeden Konfigurationsparameter nutzen. Da diese sich auch verändern und größer oder kleiner (bzgl. der Tabellengrösse ) werden können. Die Konfiguration soll auch speicherbar sein.

Ich dachte ich könnte die Geschwindigkeit von Lua nutzen da ich es unbedingt vermeiden möchte XML Dateien zu parsen. Da XML recht langsam ist und an der Anwendung gründlich an der Performance zerren würde.

Gruß Breas
 

dzim

Top Contributor
Hm... Also a) niemand zwingt dich bei JAXB getter und setter nutzen zu müssen, das hängt davon ab, wie es per Annotation konfiguriert ist. Jaxb verwendet per default halt klassische Beans. Die sehen so aus.
b) XML ist per se nicht langsam. Warum? XML ist eine Beschreibungssprache (Tock tock: "Markup") - die sogar über SGML mit HTML verwandt ist. Wenn, dann sind die Parser langsam. Da die meisten APIs IMHO intern Pull-Parser verwenden, kaum der Rede wert. Was der Rede wert ist, ist der Memory-Footprint (der Parser, sowie mitunter der Objekte).

Da es hier um eine "Konfigurationsdatei" geht, verstehe ich aber Betrachtungen über die Geschwindigkeit nicht, da diese i.d.R. eher klein sind.
Geht es dir um Flexibilität? Dann nutze ein XML-Schema und parse es mit xjc in Klassen. Schneller kann man sich keine Konfigurationsstruktur bauen! Dein Lua ist zwar interessant, das gebe ich zu, aber eigentlich Overkill.
Und wenn dir XML nicht liegt, dann verwende nur den Teil bis xjc, aber lass dir dann mit Jackson einfach JSON-Dateien in das selbe Format übersetzen (Ausgangsposition wäre natürlich, dass das grundsätzliche Format von XML und JSON identisch ist). Und wenn du weiter spinnen möchtest und die Konfig noch einfacher werden soll, gibt es bestimmt auch einen Objektrelationalen Mapper für YAML. Wie gesagt: Luas flexibilität in allen Ehren, aber du erkaufst dir das hier gerade sehr teuer auf der JAva-Seite, daher würde ich eher auf bereits etablierte Formate auf Java-Seite suchen, die generell eine hohe Verbreitung haben (was sehrt stark für JSON spricht).

Aber das ist nur meine Meinung.

Grüsse,
dzim
 

Breas

Mitglied
Hallo dzim,

vielen Dank für deinen Rat an JSON oder YAML hab ich bisher noch gar nicht gedacht.
Ich werde mir das auf jedenfall anschauen und sicherlich das ein oder andere ausprobieren.

Gruß
Breas
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
HarleyDavidson Best Practice Wohin mit der Konfigurationsdatei für Desktopapplikationen? Allgemeine Java-Themen 3
W Konfigurationsdatei für Java-App Allgemeine Java-Themen 11
J Konfigurationsdatei einlesen Allgemeine Java-Themen 21
S Auslesen einer Konfigurationsdatei Allgemeine Java-Themen 4
R Eigene Konfigurationsdatei für größere Projekte. Allgemeine Java-Themen 4
Zrebna Wieso sollte man Null-Prüfungen nicht mit Optional-Objekten nutzen? Allgemeine Java-Themen 13
berserkerdq2 Shapes als Buttons nutzen, schlechter Programmierstyle? Allgemeine Java-Themen 1
B HTTP Allgemeine Fragen über Suchmaschine nutzen mit Java Allgemeine Java-Themen 20
M pfx-Zertifikat in Tomcat für SSL-Verschlüsselung nutzen Allgemeine Java-Themen 14
berserkerdq2 Threads, wie genau läuft das in Java ab? (Ich kann Threads erstellen und nutzen, nur das Verständnis) Allgemeine Java-Themen 6
X Java gewerblich nutzen mit externe Bibliothek. Was zu beachten? Allgemeine Java-Themen 18
F Junit Test + Cucumber - JSON auslesen und in einem weiteren Schritt nutzen Allgemeine Java-Themen 0
xYurisha Nutzen von Importmethoden bei Klasseninstanzen Allgemeine Java-Themen 12
Neumi5694 Best Practice Vorhandene Programminstanz nutzen Allgemeine Java-Themen 3
S Eclipse Github Projekt in eigenes Projekt einbinden und nutzen Allgemeine Java-Themen 13
R Variable durch mehrere Methoden ändern und nutzen Allgemeine Java-Themen 17
I Programm im Hintergrund bei Windows zur Steuerung der Tastatur nutzen Allgemeine Java-Themen 2
Neumi5694 Offenes Programm nutzen Allgemeine Java-Themen 4
T javax.script (JavaScript): Nicht-JRE-Packages importieren/nutzen Allgemeine Java-Themen 4
S Welche Nutzen bringen Lamda Expressions? Allgemeine Java-Themen 1
F Über Java Google Suche nutzen Allgemeine Java-Themen 11
A COM und JAVA nutzen Allgemeine Java-Themen 1
J C++ Projekt (QT) in Java mit Klassen (nicht imperativ) nutzen (BridJ? JavaCPP? SWIG? JNA? JNI?) Allgemeine Java-Themen 2
D Nutzen, erst deklarieren, oder neu erstellen? Allgemeine Java-Themen 11
S lp_solve mit Java nutzen - Can't find dependent libraries Allgemeine Java-Themen 8
T HTTP HttpWebRequest in Swing-Projekt nutzen Allgemeine Java-Themen 4
M DLL aus jar extrahieren und als lib nutzen Allgemeine Java-Themen 24
G RXTX in proprietärer Software nutzen?! Allgemeine Java-Themen 10
C Variablen Variable einer Klasse in einer anderen Klasse Nutzen Allgemeine Java-Themen 8
thetagman Programmidee: VirtualCorkboard - Evaluation, Nutzen & Meinung Allgemeine Java-Themen 12
D Darf ich jakarta bibliotheken ohne weiteres nutzen? Allgemeine Java-Themen 10
S Profiler-Funktionen in eigener Applikation nutzen..? Allgemeine Java-Themen 5
C Kann Methode nicht aus Klassenname implements Runnable nutzen Allgemeine Java-Themen 7
G C# DLL in Java nutzen Allgemeine Java-Themen 4
T cpp Programm via jna in java nutzen Allgemeine Java-Themen 3
Meldanor Datei aus jar nutzen Allgemeine Java-Themen 4
J Alte version nutzen Allgemeine Java-Themen 4
M Rechenweg in Datenbank speichern und nutzen Allgemeine Java-Themen 6
G konstanter String[] laesst sich nicht in Annotation nutzen Allgemeine Java-Themen 2
G Variable global nutzen Allgemeine Java-Themen 4
D Welches Pattern kann ich nutzen? Allgemeine Java-Themen 9
H StartupFolder nutzen! Aber wie? Allgemeine Java-Themen 4
D Einfaches Nutzen von Plugins mittels generischer Methode Allgemeine Java-Themen 3
V Setter zum Berechnen nutzen? Allgemeine Java-Themen 5
G Was nutzen statt Mehrfachvererbung? Allgemeine Java-Themen 7
R Wie Google & Co mit Java nutzen? Allgemeine Java-Themen 16
W InputStream öfters nutzen Allgemeine Java-Themen 9
H einzelner Thread --> Nutzen?! Allgemeine Java-Themen 3
L Wie Pattern anwenden um Cipher zu nutzen Allgemeine Java-Themen 2
G DB connection in anderen Klassen nutzen! Allgemeine Java-Themen 7
K Warum static-Methoden nutzen Allgemeine Java-Themen 26
E NT-Anmeldung in Java Client-Applikation nutzen. JAAS ? Allgemeine Java-Themen 5
M java api offline nutzen? Allgemeine Java-Themen 4
J COM-Port unter Windows nutzen Allgemeine Java-Themen 2
B Programm unter GPL nutzen Allgemeine Java-Themen 6
K Problem mit Vererbung - Kein wirklicher Nutzen. Allgemeine Java-Themen 10
T GPL Code inkommerzieller Software nutzen? Allgemeine Java-Themen 26
G Funktionstasten nutzen Allgemeine Java-Themen 3
S Klassen aus JDK 1.5. außerhalb von 1.5. nutzen Allgemeine Java-Themen 6
S MediaTracker nutzen um festzustellen ob schreibvorgang ende. Allgemeine Java-Themen 5
M Webstart nutzen? Allgemeine Java-Themen 9
thE_29 Externe (unbekannte) Klasse nutzen Allgemeine Java-Themen 11
P DLLs nutzen Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben