Architektur-Problem? 2 Servlets, ein Objekt

Sekundentakt

Bekanntes Mitglied
Hallo Gemeinde,

bisher sieht meine Architektur so aus:

In der init-Methode eines Servlets wird meine Applikation gestartet.

Java:
Application app = new Application();
Das ist alles.

Ich möchte jetzt aber, dass die Applikation außerhalb des Servlets lebt, weil ich über verschiedene Servlets die Applikation ansprechen möchte.

Ein Servlet ist für Reads zuständig, das nächste für Updates, ein anderer für das Erzeugen neuer Einträge etc.
Ich könnte das alles auch in einem Servlet unterbringen, möchte diese Logiken aber voneinander trennen.

Was mich auch schon immer gestört hat, war, das die Applikation erst dann startet, wenn tatsächlich auch jemand eine Anfrage an das Servlet sendet (könnte ich umgehen, in dem ich die Application im Servlet-Konstruktor initialisiere).

Meine Vorstellung von der Architektur des Ganzen sah auch immer wie eine Pyramide aus:

Die Spitze ist die Schnittstelle nach Außen hin (View). In diesem View wird die Applikation initialisiert.
Der View bereitet dann die Daten so auf, dass die Applikation sie verarbeiten kann. Der Rest der Business-Logik findet in der App statt.
Die App gab dann einen Response in Form eines Strings zurück, den der View dann ausgeben konnte bzw. weiterverarbeiten kann.

Zielsetzung war, dass die App in einer Desktopumgebung, aber auch in einem Webservice sinnvoll einsetzbar ist.

Das Problem an diesem pyramidenhaften Aufbau ist nun, dass ich nicht nur einen View haben will, sondern den View aufsplitten will (einen für Updates, einen für Reads etc.).

Mir fehlt jetzt ein Lösungsansatz oder Stichwort unter dem ich mich mal informieren kann, wie ich ein und das selbe Objekt mit mehreren Servlets parallel ansprechen kann.

Btw.: Ich denke das "View" das falsche Wort ist, weil der "View" in meinem Modell auch Aufgaben des Controllers übernimmt. Ich hoffe das schadet dem Verständnis aber nicht.

Danke!

Beste Grüße

EDIT:
Folgende Idee kam mir gerade:
Ich könnte ja ein Servlet erzeugen, dass die Applikation initialisiert.
Das Servlet beantwortet jedoch keine HTTP-Requests.
Stattdessen wird es über den ServletContext von anderen Servlets (z.b. dem Update-Servlet) aufgerufen und man holt sich dann über die Methode getApp() die App-Instanz.

Was haltet ihr davon?
 
Zuletzt bearbeitet:
M

maki

Gast
Deine WebApp startet wenn sie deployed wird, oder der Server gestartet wird,, nicht erst beim 1. Request. Servlets "starten" spätestens bveim 1. request, kommt auch auf die Konfig in der web.xml an.

Ansonsten hört sich das alles sehr umständlich/wirr an, denke du hast dich mit den Grundlagen noch nicht ausreichend auseinandergesetzt, sonst würdest du einfach den ServletContext nehmen und da per setAttibute dein Objekt setzen ;)

Dann bist du aber immer noch ziemlich an Servlets gekoppelt, nix mit DesktopApp.
Solltest dich frage ob du das wirklich willst, ist nämlich recht komplex und aufwändig, Eclipse RAP macht das von Haus aus, oder du machst dir selber was, IoC hilft dabei, zB. Spring.
 

Sekundentakt

Bekanntes Mitglied
Hi Maki,

danke für Deinen Beitrag!

Die App wird zurzeit in der init()-Methode des Servlets gestartet. Und die wird erst dann aufgerufen, wenn ein Request reinkommt, vorher nicht. Das geht zumindest aus meinen Beobachtungen hervor.

Die App selbst kapselt auch die gesamte Business-Logic.
Was sie nicht kapselt und auch nicht kapseln soll, ist, wie auf die App zugegriffen wird (Webservice oder Desktop-Interface).

Im Moment orientiere ich mich sehr an Servlets, weil der Usecase Webservice heißt.
Das Design ist aber modular genug, um die Business-Logic auch in eine Desktop-App zu implementieren.

Dein Stichwort mit setAttribute erscheint mir sinnvoller, als mein Vorschlag den ich im EDIT geäußert habe.

Ich würde jetzt in jedem Servlet erfragen, ob das Objekt bereits im Context existiert, oder nicht.
Wenn nicht, wird es erzeugt, ansonsten wird es einfach via .getAttribute() zurückgegeben.

Gibt es Garantien bezüglich der Sichtbarkeit der im ServletContext abgelegten Objekte?

Ich denke hier an eine Race-Condition: Update- und Read-Servlet erhalten zeitgleich eine Anfrage und wollen beide an das App-Object, stellen fest es ist nicht da, und erstellen sie.
Damit nur ein Servlet von beiden die App-Instanz erstellt, müsste ich ein Flag im Context setzen.

Hälst Du das für sinnvoll?
 
M

maki

Gast
Die App wird zurzeit in der init()-Methode des Servlets gestartet. Und die wird erst dann aufgerufen, wenn ein Request reinkommt, vorher nicht. Das geht zumindest aus meinen Beobachtungen hervor.
Wenn du "die App" sagst meinst du also nicht die WebApp die man meint wenn man von Servlets spricht sondern etwas eigenes und für mich unbekanntes :)
Anstatt WebApp könnte man auch "Context" sagen.

Dein Einwand mit den Raceconditions ist richtig, aber diese können immer WebApp Bereich auftreten.
Da währe wohl ein ServletContextListener angebracht: : Interface ServletContextListener
Damit sollte klar sein wer & wo "die App" erzeugt.

Garantien, Konventioenen etc. entnimmst du am besten der Spec ;)
 

Sekundentakt

Bekanntes Mitglied
Okay, hier treten ein paar Missverständnisse auf :)

Ich habe eine komplexe Applikation geschrieben, die ich so instantiieren kann:

Java:
MyApplication app = new MyApplication("config.xml");

Das kann ich im Konstruktor eines Servlets oder sonstwo machen.

Wenn ich "App" sage, meine ich MyApplication.

Die MyApplication ist EIN Bestandteil der WebApp, das ist mir klar ;)

Ich schaue mir mal besagtes Interface an und studiere mal die Specs.
Eventuell klären sich da einige Fragen.

Danke Dir!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Model2-Architektur Servlets Web Tier 0
T Unterschied Tier3-Architektur und MVC-Entwurfsmuster Web Tier 1
N JSF Architektur/Design einer JEE 6 + JSF 2.x Webanwendung mit Subdomänen Web Tier 4
F Web-Architektur Web Tier 15
F Prinzipielle Architektur einer Web-Anwendung Web Tier 4
N Architektur einer Such-Webanwendung Web Tier 4
O MVC Architektur - grundlegendes Verständnis Web Tier 13
S AJAX/RestController Post Problem Web Tier 18
pkm Problem beim Import eines dynamischen Webprojekts als .zip Web Tier 2
O JSF Java Unsigned Applet PrivilegedActionException Problem Web Tier 2
F JSF preRenderView Problem Web Tier 0
J Funktion für AJAX - Problem mit Return Web Tier 14
S Problem mit Checkboxen im Servlet erkennen Web Tier 3
N JSF JSF Selected Item & GesBetrag Problem Web Tier 1
Shams Problem mit der verwirklichung einer Readmethode in einer Chatapplikation Web Tier 3
F JSF Problem mit Primefaces Web Tier 7
F JSF Problem mit Primefaces Web Tier 4
F JSP Problem mit Property Web Tier 0
D Java EE Servlet login Problem Web Tier 1
L java.io.NotSerializableException für domain Objekte - Design Problem? Web Tier 12
T JSF Character Encoding Problem Web Tier 2
T JSF Problem mit JSF und Foreign Key Tabellen Web Tier 8
H JSF Problem mit Converter Web Tier 2
M Zeichensatz Problem? Web Tier 3
T JSF Problem wenn Session abgelaufen ist Web Tier 6
K JSF websphere application server 8 tomahawk problem Unable to find resource Web Tier 3
D JSF RichFaces Tree-Beispiel Problem Web Tier 2
J JSF Problem mit Bearbeiten von Datensätzen Web Tier 7
M JSF Problem mit CSS und Unterverzeichnissen Web Tier 2
M JSP Problem beim deployen auf Tomcat Web Tier 2
P Servlet getWidth(); - getHight(); Problem Web Tier 3
J JSP Problem bei Hibernate mit JSP Web Tier 2
M JSF mit Tobago Problem: ServletContextListener Web Tier 5
J Facelets javascript compiler problem Web Tier 3
T Tomcat mit Servlets Problem Web Tier 7
T Servlet Problem bei gwt rpc Web Tier 7
S Servlet Problem mit Tomcat Web Tier 3
J JSF Kein Methodenaufruf mit Button möglich durch PhaseListener (redirect) Problem? Web Tier 2
P rich:panelMenuGroup --> expanded Parameter Problem Web Tier 3
F.S.WhiTeY Tmplating/CSS Problem bei JSF Web Tier 7
A ice:inputText Converter Problem Web Tier 2
B JSF Tomcat Windows Linux equals Problem Web Tier 3
R JSF JSF Composite Components: Problem mit Attributliste und Referenzierung Web Tier 2
M Problem mit Hibernate und GWT Web Tier 6
O JSP struts2 tag: Problem mit Dezimalzahlen Web Tier 2
P Struts Struts2 if tag Problem mit getText() Web Tier 3
B Java EE 6 Problem (EL) Web Tier 4
ruutaiokwu beanshell scope problem... Web Tier 7
P Problem mit HTML.Tag.OPTION Web Tier 3
N Problem mit Datei Streaming Web Tier 2
M Problem mit Verlinkung JSP Dynamische Tabelle Web Tier 7
F.S.WhiTeY JSF:org.apache.jasper.JasperException Problem Web Tier 2
H Richfaces - Taglib Problem gelb unterstrichen Ajax Output Web Tier 6
N Servlet: Problem mit getParameterValues Web Tier 4
7 Struts und Ajax. Problem mit Actions Web Tier 2
J GWT - RPC Problem Web Tier 6
F Problem mit JSF Anwendung Web Tier 9
I Logout - Problem => Bei Zurück Web Tier 2
I AJAX - Problem Web Tier 18
F Problem mit Struts Web Tier 2
I selectOneMenu - Problem Web Tier 6
H Firefox Background-Image Problem Web Tier 4
E GWT Server-Client Problem Web Tier 3
J Log4j problem Web Tier 7
F Problem mit der Methode request.getRemotePort() Web Tier 2
S GWT Problem Web Tier 4
M Problem mit Velocity Web Tier 2
S OSGi Bundle Problem - ClassNotFound Web Tier 4
J JSF Locales Problem Web Tier 3
J Problem mit Login Web Tier 4
MQue jsp- Problem Web Tier 4
P Problem der Parameterübergabe aus Iframe Web Tier 15
A Tomcat: beim Start des Servers einmalige Aktion aufrufen (Problem gelöst) Web Tier 2
R JSF <rich:datatable> problem Web Tier 4
S JSF Problem - Terminverwaltung - Ändern eines vorhandenen Termins Web Tier 2
S Filter Problem? Web Tier 6
E Problem mit t:saveState Web Tier 7
S Problem mit Anzeige zweier JSP's Web Tier 4
M Problem mit JSP und Bean Web Tier 2
F RichFaces, Problem mit PickList Web Tier 2
S Problem mit Servlet und Zugriff auf Orace XE Datenbank Web Tier 2
E Problem mit request.getParameter Web Tier 5
B getServletContext.getRealPath("/") Problem Web Tier 6
C Problem mit Hibernate und IceFaces Web Tier 2
S Problem mit Session - Übergabe von Kontext zu Kontext Web Tier 2
H problem bei Parameterübergabe mit beans Web Tier 3
U JSP form-Daten (ohne name-Attribut) an Servlet = Problem Web Tier 6
S jsf: übles problem mit <f:convertDateTime> Hilfe! Web Tier 2
A Selectbox Problem in JSP Web Tier 12
T Problem bei Session-Timeout Web Tier 3
S problem mit resultset Web Tier 6
U Problem bei Validierung mit Struts 2 Web Tier 1
A JSF-Ctrl h:inputText Problem mit Umlauten Web Tier 4
D Servlet EJBs in Servlets verwenden? Web Tier 4
S JSF, JSP, Servlets - ich verstehe nur noch Bahnhof Web Tier 4
M Best practice JSP und Servlets Web Tier 1
A Aufruf eines Servlets auf einer JSP Seite funktioniert nicht Web Tier 10
A Wartezeit nach Tomcat start wegen Servlets zu hoch Web Tier 2
T Einsteigerfragen zu Servlets/Webprogrammierung mit Java Web Tier 11
C Kommunkation Servlets/Browseraufruf Servlet Web Tier 4

Ähnliche Java Themen

Neue Themen


Oben