Unterschied Java EE und Java SE

Java SE

Standard Edition. This is the core Java programming platform. It contains all of the libraries and APIs that any Java programmer should learn (java.lang, java.io, java.math, java.net, java.util, etc…).

Java SE ist die Standard Edition. Es handelt sich hierbei um die Kernplattform von Java. Es beinhaltet alle Libraries und APIs die ein Java Entwickler kennen sollte wie java.lang, java.io, java.math ,java.net und java.util)

Java EE

Java EE ist die Enterprise Edition der Unterschied laut Wikipedia:

The Java platform (Enterprise Edition) differs from the Java Standard Edition Platform (Java SE) in that it adds libraries which provide functionality to deploy fault-tolerant, distributed, multi-tier Java software, based largely on modular components running on an application server.

In anderen Worten falls es sich um eine große Applikation die auf verteilten Systemen läuft sollte die Java EE verwendet werden. Diese setzt auf die JAVA SE auf und erweitet sie um eineige Funktionen. Wie zum Beispiel Database Access(JDBC, JPA, Remote Method Invocation (RMI), Messaging (JMS), Web Services und XML Processing. Es definiert auch die STandard APIs für Enterprise JavaBeans, SErvlets, Portlets und Java Server Pages.

Java EE arbeite grundsätzlich auf BAsis eines Applikation-Servers (z.B. JBoss). Für diesen werden spezielle Enterprise Java Beans (EJB) geschrieben. Diese sind auch nur auf den Applikationsserver lauffähig. Einer der Vorteile dabei ist, dass der Server für die Instanzerzeugung verantwortlich ist (Dependency Injection).

Einige Teile der EE waren so erfolgreich, das sie auch für SE zugänglich gemacht wurden, ein gutes Beispiel hierfür ist Hibernate.

 

Singleton Pattern

Der Singleton Pattern ist einer der einfachsten Patterns. Er gehört zur Art der Creational Patterns.

Definition des Patterns laut der Gang of Four:

„Sichere ab, dass eine Klasse genau ein Exemplar besitzt, und stelle einen globalen Zugriffspunkt darauf bereit.“

Singleton Patterns werden verwendet wenn es nur eine Instanz von einer Klasse erlaubt ist. Dieses Pattern findet öfters Verwendung bei Verwaltung der Benutzerrechte einer Applikation.

Realisierung

Um die Realisierung in Java zu gewährleisten muss der Konstruktor auf private gesetzt werden. Damit ist der Zugriff nur innerhalb der Klasse oder durch andere Instanzen der Klasse möglich.

Als nächstes wird eine Methode definiert, die eine Instanz erstellt falls es noch keine gibt. Die Instanz der Klasse wird an den Aufrufer zurück gegeben.

Mithilfe eines statischen Feldes wird eine Referenz auf die Instanz gehalten. Wichtig ist die Instanz zum spät Möglichsten Zeitpunkt zu erstellen. Sprich bei der ersten Verwendung während der Laufzeit (lazy instantiation).


public class SingletonPattern {
  private staticSingletonPattern instance = null;
  private SingletonPattern() {}
  public static SingletonPattern getInstance() {
    if(instance == null) {
       instance = new SingletonPattern();
    }
    return instance;
  }
}

Kritik an Singleton

  • Jede Klasse soll sich nur auf eine Aufgabe konzentrieren. (Single Responsability Prinzip). Der Singleton Pattern hält sich nicht an dieses Prinzip. Sowohl Geschäftslogik als auch die Objekterzeugung wird in dieser Klasse umgesetzt.
  • Wie bei globalen Variablen ist die Abhängigkeit nicht sofort sichtbar. Ob eine Klasse die Singleton-Klasse verwendet ist nur im Code ersichtlich.
  • Singleton erschaffen eine Art von „globalen“ Zustand und erschweren somit die Testbarkeit.
  • Sofern die Instanz selber Attribute besitzt sind diese überall verfügbar.

Zusammenfassung

  • Singleton wird eingesetzt, wenn eine Klasse nur eine Instanz besitzen darf
  • Die Instanz braucht einen globalen Zugriffspunkt
  • Die Instanz soll zum spät Möglichsten Zeitpunkt erzeugt werden