ReiTerMaNiaC
Grünschnabel
Hi ihrs,
ich hab eine Frage zum Thema Server/Client/Applet...wär super wenn mir jemand einen Tipp geben könnte, da meine Diplomarbeit hieran hängt und die Zeit etwas knapp ist.
Zu meinem Problem: Ich habe ein Programm [4], das folgendes macht:
Es erstellt ein OntModel [1], basierend auf nem Ontologie-File. Dann wird ein Submodel (D2RQ [2]) geaddet, basierend auf einem Mapping, das zwischen Ontologie-File und einer MySQL-DB vermittelt. Aus diesem Model wird dann ein Graph erstellt, in ein Display eingebunden und über ein Panel visualisiert (Visualisierung: prefuse [3]). Im Endeffekt soll das ganze schön in nem Browser von jedermann aufzurufen sein, also wohl per Applet.
Das Problem an der Sache ist: das Einlesen des D2RQ-(Sub)Models dauert ca. 3 Minuten --> für einen browsenden User viel zu lang. Ich dachte mir, ich könnte das Umgehen, indem ein Teil der Prozedur (inkl. v.a. des Model-Initialisierens) als Server-Applikation o.ä. läuft und ein vom User aufgerufenes Applet dann einfach darauf zugreift.
Also simpel ausgedrückt: der zeitaufwendige Teil des Codes soll irgendwie permanent laufen, nur hab ich quasi keine Ahnung, wie.
Habe mir erste Infos über Verteilte Client/Server Programme bzw. RMI angeschaut, aber ich befürchte das ganze wird etwas kompliziert, da ich ja ein ganzes Objekt (das OntModel oder später Graph, GraphDisplay, GraphPanel) übergeben muss. Außerdem weiß ich nicht genau, ob das initialisierte OntModel an dem Punkt "einsatzbereit" ist oder evtl. erst später bei Bedarf auf Datenbank und Ontologie-File zugreift...
Auch ist das OntModel, wenn ich das Prinzip richtig verstanden hab, nicht "serialisierbar", was die Lösung mit RMI wohl problematisch macht.
Was mir sehr helfen würde, wäre ein Stoß in die richtige Richtung, welche "Technologie" ich dafür ranziehen muss (RMI, CORBA, simples Server-Programm, keine Chance mit Applet, Web Service!?, ein einfacher Befehl der die eine Prozedur offen hält), bevor ich mich da mit diversen Sachen rumschlag, obwohl es damit gar nicht funktionieren kann.
Schon mal im Vorraus vielen Dank
Gruß,
Flo
[1] http://jena.sourceforge.net/javadoc/com/hp/hpl/jena/ontology/OntModel.html
[2] http://sites.wiwiss.fu-berlin.de/suhl/bizer/d2rq/javadoc/de/fuberlin/wiwiss/d2rq/ModelD2RQ.html
[3] http://prefuse.org/
[4] Code-Snippet:
ich hab eine Frage zum Thema Server/Client/Applet...wär super wenn mir jemand einen Tipp geben könnte, da meine Diplomarbeit hieran hängt und die Zeit etwas knapp ist.
Zu meinem Problem: Ich habe ein Programm [4], das folgendes macht:
Es erstellt ein OntModel [1], basierend auf nem Ontologie-File. Dann wird ein Submodel (D2RQ [2]) geaddet, basierend auf einem Mapping, das zwischen Ontologie-File und einer MySQL-DB vermittelt. Aus diesem Model wird dann ein Graph erstellt, in ein Display eingebunden und über ein Panel visualisiert (Visualisierung: prefuse [3]). Im Endeffekt soll das ganze schön in nem Browser von jedermann aufzurufen sein, also wohl per Applet.
Das Problem an der Sache ist: das Einlesen des D2RQ-(Sub)Models dauert ca. 3 Minuten --> für einen browsenden User viel zu lang. Ich dachte mir, ich könnte das Umgehen, indem ein Teil der Prozedur (inkl. v.a. des Model-Initialisierens) als Server-Applikation o.ä. läuft und ein vom User aufgerufenes Applet dann einfach darauf zugreift.
Also simpel ausgedrückt: der zeitaufwendige Teil des Codes soll irgendwie permanent laufen, nur hab ich quasi keine Ahnung, wie.
Habe mir erste Infos über Verteilte Client/Server Programme bzw. RMI angeschaut, aber ich befürchte das ganze wird etwas kompliziert, da ich ja ein ganzes Objekt (das OntModel oder später Graph, GraphDisplay, GraphPanel) übergeben muss. Außerdem weiß ich nicht genau, ob das initialisierte OntModel an dem Punkt "einsatzbereit" ist oder evtl. erst später bei Bedarf auf Datenbank und Ontologie-File zugreift...
Auch ist das OntModel, wenn ich das Prinzip richtig verstanden hab, nicht "serialisierbar", was die Lösung mit RMI wohl problematisch macht.
Was mir sehr helfen würde, wäre ein Stoß in die richtige Richtung, welche "Technologie" ich dafür ranziehen muss (RMI, CORBA, simples Server-Programm, keine Chance mit Applet, Web Service!?, ein einfacher Befehl der die eine Prozedur offen hält), bevor ich mich da mit diversen Sachen rumschlag, obwohl es damit gar nicht funktionieren kann.
Schon mal im Vorraus vielen Dank
Gruß,
Flo
[1] http://jena.sourceforge.net/javadoc/com/hp/hpl/jena/ontology/OntModel.html
[2] http://sites.wiwiss.fu-berlin.de/suhl/bizer/d2rq/javadoc/de/fuberlin/wiwiss/d2rq/ModelD2RQ.html
[3] http://prefuse.org/
[4] Code-Snippet:
Code:
// ontology that will be used
String ont = "file:../data/ontology.owl";
// create an empty ontology model using Pellet spec
OntModel p_ontModel = ModelFactory.createOntologyModel(PelletReasonerFactory.THE_SPEC);
// read the file
p_ontModel.read(ont);
// create and add D2RQ model as a submodel
ModelD2RQ d2rqMod = new ModelD2RQ("file:../data/mapping.n3");
p_ontModel.add(d2rqMod);
// Step 1 - Create the directed Prefuse graph from the ontModel
OWLGraphConverter graphConverter = new OWLGraphConverter(p_ontModel, true);
Graph graph = graphConverter.getGraph();
// Step 2 - Create a graph display, using the graph distance filter.
GraphDisplay graphDisp = new GraphDisplay(graph, GRAPH_DISTANCE_FILTER);
// Step 3 - Create a panel for the graph display, showing the legend and the
// widget to control the number of hops of the graph distance filter.
m_graphPanel = new GraphPanel(graphDisp, LEGEND, HOPS_CONTROL_WIDGET);