Und? Ich finde es keinen schlechten Stil, die Daten genau dort und in dem Moment zu sammeln, in dem man sie wirklich braucht. Und wirklich Arbeit ist das auch nicht, es reduziert sich doch auf einen getAttribute-Aufruf auf dem ServletContext.
Naja, das mag jetzt kein total schlechter Stil sein, aber Vorteile sehe ich keine.
Im Gegensatz dazu würde der gleiche get Aufruf im worker zu einer schlankeren Schnittstelle führen, was immerhin der Übersichtlichkeit und Vereinfachung dienen würde.
Zu Anfang habt ihr ja allerdings schon gesagt, dass ich vom worker aus nicht an den ServletContext dran komme. Somit scheint das ja leider gar keine Option zu sein.
Man braucht absolut kein static in so einem Falle
Da ich mit static bisher wenig rumgespielt habe, mag ich da noch nicht ganz sattelfest sein.
Ich habe beispielsweise einige Tabellen, die konstante Werte für verschiedene Dinge enthalten (Item-Informationen, Skill-Informationen, etc.). Diese lese ich aktuell beim Start des Server einmalig aus der Datenbank aus und speichere sie in einer statischen Liste, die ich über statische Methoden abfrage.
Das fand ich ganz praktisch und das meinte ich auch mit der "read-only Informationen".
Spricht hier was gegen die static Nutzung?
Oder ist das mit dem Domänenmodell (also bspw. Klasse Player für alle eingeloggten Spieler) klar? Und dass man in Request-, Session- und ApplicationScope auch solche Objekte oder sogar Listen, Sets, Maps solcher Objekte ablegen kann auch?
Den Begriff Domänenmodell habe ich zwar noch nicht gehört, aber vom Beispiel her würde ich sagen: ja

Auch das man in den verschiedenen Scopes Daten speichern kann ist bekannt (Mit ApplicationScope meinst du den ServletContext, oder?).
Und worum es eigentlich geht, ist eine Art Zugriffs-Schicht auf die Daten? Das wäre gut, es zu machen. Definiere Dir Interfaces für Deine Services. Schreibe Dir Implementierungen dieser. Wenn ein Service die Dienste eines anderen braucht, schreibe einen Konstruktor, der das entspr. Service-Interface als Parameter entgegennimmt und in einer privaten finalen Instanzvariablen speichert.
Wie kriegst Du jetzt Instanzen dieser Services zu fassen? Ein Standardweg, dies zu tun ist Dependency Injection. Da Du eh schon auf Servlets unterwegs bist, würde ich zu JSF 2.0. raten. Da kann man mit Annotationen viele Services zusammenstöpseln und in diverse Stellen injizieren. Ein anderer Weg, wäre, einen ServletContext-Listener zu schreiben und in dessen contextInitialized-Methode das alles selbst aufzubauen.
Dieser Weg hört sich sehr interessant an!
Über Dependency Injection die jeweiligen Services zu holen wäre ja noch einfacher, als sich die Sachen immer aus dem ServletContext zu holen.
Habe bis jetzt nur in einer Spring Schulung vor einigen Jahren mal Berührungspunkte mit DI gehabt, aber selber noch nie genutzt.
Wie wäre dann der grobe Ablauf?
Die Service Klasse würde einmalig initialisiert und dem DI Framework zur Verfügung gestellt. Dieses injiziert die dann jeweils über z. B. Annotationen wie du beschrieben hast.
Hört sich noch übersichtlicher an

und wäre ein guter Grund sich in die Thematik einzuarbeiten!
Ich nutzte das ganze Projekt sowieso größtenteils als "selbstständige Fortbildungsmaßnahme".
Stolper grad nur über den Vorschlag JSF zu nutzen.
wiki sagt dazu "JavaServer Faces (kurz: JSF) ist ein Framework-Standard zur Entwicklung von grafischen Benutzeroberflächen für Webapplikationen."
Mir sagte JSF auch mehr aus dem Frontend Bereich etwas. Wie passt das die DI rein?