From eee8999d92ecd485af6d159ba7323b80fe17623f Mon Sep 17 00:00:00 2001
From: ulrich
Date: Tue, 24 Feb 2026 16:35:56 +0000
Subject: [PATCH] Beschreibung der Factory ergaenzt.
---
src/de/uhilger/neon/Factory.java | 53 +++++++++++++++++------------------------------------
1 files changed, 17 insertions(+), 36 deletions(-)
diff --git a/src/de/uhilger/neon/Factory.java b/src/de/uhilger/neon/Factory.java
index 800a944..25e6813 100644
--- a/src/de/uhilger/neon/Factory.java
+++ b/src/de/uhilger/neon/Factory.java
@@ -18,7 +18,6 @@
package de.uhilger.neon;
import de.uhilger.neon.entity.ActorDescriptor;
-import com.google.gson.Gson;
import com.sun.net.httpserver.Authenticator;
import com.sun.net.httpserver.Filter;
import com.sun.net.httpserver.HttpContext;
@@ -28,17 +27,12 @@
import de.uhilger.neon.entity.NeonDescriptor;
import de.uhilger.neon.entity.ServerDescriptor;
import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.InetSocketAddress;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
@@ -49,15 +43,14 @@
import java.util.logging.Level;
import java.util.logging.Logger;
import de.uhilger.neon.Scanner.ScannerListener;
-import java.util.Set;
/**
- * Einen Neon-Server aus einer Beschreibungsdatei herstellen
+ * Einen Neon-Server aus einer Beschreibungsdatei herstellen und starten
*
* Die Werte aus der Beschreibungsdatei werden in die Attribute der HttpContext-Objekte geschrieben,
* die zu jedem Server eroeffnet werden.
*
- * Die Entitaeten stehen wie folgt in Beziehung: HttpServer -1:n-> HttpContext -1:1-> HttpHandler
+ * Die Entitaeten stehen wie folgt in Beziehung: HttpServer -1:n-> HttpContext -1:n-> HttpHandler.
*
* Die Factory legt die Kontexte, Handler sowie die Verbindung zu den Actors selbsttaetig an. Alle
* Parameter aus 'attributes'-Elementen der Beschreibungsdatei werden als Attribute in den
@@ -66,6 +59,7 @@
*
* @author Ulrich Hilger
* @version 1, 6.2.2024
+ * @version 2, 24.2.2026
*/
public class Factory implements ScannerListener {
@@ -74,30 +68,6 @@
public Factory() {
listeners = new ArrayList<>();
actorMap = new HashMap<>();
- }
-
- /**
- * Beschreibungsdatei lesen
- *
- * @param file die Datei, die den Server beschreibt
- * @return ein Objekt, das den Server beschreibt
- * @throws IOException wenn die Datei nicht gelesen werden konnte
- */
- public NeonDescriptor readDescriptor(File file) throws IOException {
- //Logger logger = Logger.getLogger(Factory.class.getName());
- //logger.log(Level.INFO, "reading NeonDescriptor from {0}", file.getAbsolutePath());
-
- StringBuilder sb = new StringBuilder();
- BufferedReader r = new BufferedReader(new FileReader(file));
- String line = r.readLine();
- while (line != null) {
- sb.append(line);
- line = r.readLine();
- }
- r.close();
-
- Gson gson = new Gson();
- return gson.fromJson(sb.toString(), NeonDescriptor.class);
}
public void runInstance(Class c, NeonDescriptor d)
@@ -133,7 +103,7 @@
IllegalAccessException, IllegalArgumentException, InvocationTargetException, IOException {
Logger.getLogger(Factory.class.getName()).log(Level.FINER, System.getProperty("java.class.path"));
-
+
List<ServerDescriptor> serverList = d.server;
for (ServerDescriptor sd : serverList) {
HttpServer server = HttpServer.create(new InetSocketAddress(sd.port), 0);
@@ -154,23 +124,34 @@
server.setExecutor(Executors.newFixedThreadPool(10));
server.start();
}
- fireInstanceStarted();
+
+ fireInstanceStarted();
}
private Authenticator createAuthenticator(NeonDescriptor d) {
+ Logger.getLogger(Factory.class.getName()).log(
+ Level.FINER, "{0} ", new Object[]{"creating Authenticator"});
Authenticator auth = null;
if (d.authenticator != null) {
try {
+ Logger.getLogger(Factory.class.getName()).log(
+ Level.FINER, "Authenticator className {0} ", new Object[]{d.authenticator.className});
Object authObj = Class.forName(d.authenticator.className)
.getDeclaredConstructor().newInstance();
if (authObj instanceof Authenticator) {
auth = (Authenticator) authObj;
+ Logger.getLogger(Factory.class.getName()).log(
+ Level.FINER, "Authenticator className {0} created", new Object[]{d.authenticator.className});
return auth;
}
} catch (ClassNotFoundException | NoSuchMethodException | SecurityException
| InstantiationException | IllegalAccessException | IllegalArgumentException
| InvocationTargetException ex) {
// Klasse nicht gefunden. Muss das geloggt oder sonstwie behandel werden?
+ Logger.getLogger(Factory.class.getName()).log(
+ Level.FINER, "Authenticator className {0} not created, error {1}",
+ new Object[]{d.authenticator.className, ex.getLocalizedMessage()});
+
return null;
}
}
@@ -384,7 +365,7 @@
l.serverCreated(server);
}
}
-
+
private void fireHandlerCreated(HttpContext ctx, HttpHandler h) {
for (FactoryListener l : listeners) {
l.handlerCreated(ctx, h);
--
Gitblit v1.9.3