# Dinge, die man nicht tun sollte



## JanHH (5. Mrz 2009)

Hallo,

ich benutze in meinem Servlet diverse Dinge, die man laut Spezifikation wohl nicht tun sollte. Läuft allerdings trotzdem problemlos. Frage mich nur: Kann man halbwegs drauf vertrauen, dass es das auch in Zukunft tun wird, oder sollte ich die betroffenen Stellen schleunigst umbauen?

Konkret handelt es sich um:

- Benutzen von Dateien (lesen/schreiben)
- neue Threads starten
- Erzeugen von Objekten mit Class.newInstance()

Einigermassen tolerierbar, oder leichtsinnig?

Gruß+Danke
Jan


----------



## The_S (5. Mrz 2009)

Class.newInstance() nicht verwenden? Warum das denn? Bitte klärt mich auf!

In Dateien lesen und schreiben ... naja ... bei J2EE steht normal eine Datenbank dahinter, die solltest du auch nutzen. Wenn du weißt, was du tust (und die Anwendung nicht auf physikalisch getrennten Server läuft oder ähnliches), gehts evtl. gut. 

Threads würde ich nicht verwenden, das ist ein absolutes No-Go (ebenso wie static).


----------



## JanHH (5. Mrz 2009)

Warum sind gerade Threads so kritisch?

Generell ist geplant, all den Kram mal umzubauen, so das das alles nicht mehr verwendet wird, die Frage ist nur, wann.. vielleicht innerhalb der nächsten zwei Jahre mal, aber früher seh ich da keine Zeit für.


----------



## megachucky (12. Mrz 2009)

> Warum sind gerade Threads so kritisch?



Hm, ich würde sagen, weil sich darum in JEE Apps der Applikation Server kümmert ?!


----------



## maki (12. Mrz 2009)

> ich benutze in meinem Servlet diverse Dinge, die man laut Spezifikation wohl nicht tun sollte


Stimmt nicht, die Servlet Spek., verbietet diese Dinge nicht.
Die EJB Spek. dagegen verbietet diese Dinge und noch einige mehr


----------



## JanHH (12. Mrz 2009)

Hab mich jetzt entschieden, als allgemeine Grundlage für meine Programme JSF fürs Frontend, JPA (mittels der Hibernate-Implementierung) für Persistenz und einen Tomcat als Servlet-Container zu verwenden. Mehr nicht. Liegt auch daran, das mir die Zeit fehlt, mich nebenbei noch in Dinge wie seam usw. einzuarbeiten, und es mir auch vorerst leistungsfähig genug erscheint. Das dürfte also diverse Probleme lösen.


----------



## FArt (23. Mrz 2009)

JanHH hat gesagt.:


> - Benutzen von Dateien (lesen/schreiben)
> - neue Threads starten
> - Erzeugen von Objekten mit Class.newInstance()



Du bewegst dich in einer Containerumgebung, die z.B. den Lifecycle deines Servelts übernimmt. Je nach Ausprägung und Konfiguration des Containers, hast du mit obigen Punkten Probleme, besonder bei hoch optimierten Containerumgebungen (Cachingmechansimen, Mechanismen um den Speicherbedarf zu optimieren (Passivierung), ...) , in Clustern bzw. in HA Umgebungen.

Dateien (Filesystemzugriffe) sind eine Abhängigkeit aus der Webapplikation heraus in das Betriebssystem. Threads bedürfen einer Kontrolle bzgl. ihres Lebenszyklus, den du oft nicht garantieren kannst. Reflection ist kein Thema, aber das Problem ist in der Regel ein Class.forName(), da Containerumgebungen in der Regel auch eigene Classloaderkonstrukte mitbringen => ContextClassLoader verwenden!


----------

