Java
Informationen
Java Platform Group, Product Management Blog Oracle Java SE Releases FAQ
Java Enterprise
Informationen
OpenJDK
JPA
Java Persistence 2.0 API Specification
Hibernate
Apache OpenJPA
Hibernate
Naming and Directory Operations JNDI, LDAP, Active Directory
Apache Directory LDAP API Homepage
EclipseLink
EclipseLink wiki documentation
JPA 2.0 with EclipseLink - Tutorial
payara Server
Homepage Ablösung von GassFish
JBoss
Informationen
EJB, Enterprise Java Beans Application Server
Understanding web Security using web.xml
FORM-based declarative authentication against MySQL Realm
Weld JSR-299 Java Contexts and Dependency Injection for the Java EE platform (CDI).
Notizen
JNDI View von der Commandline ansehen: /subsystem=naming:jndi-view
JSON
Informationen
JSON Processing - Reference Implementation
Projekt JSON
Projekt GSON
Windows Office API
Apache POI Homepage
Projekt Lombok
Java Grundlagen
Design und Implementierung
Die folgenden Ideen sollen helfen, robuste, einfache und verständliche Software zu realisieren.
Code-Konventionen
Identifier Reihenfolge:
public, protected, private, abstract, static, final, transient, volatile, synchronized, native, strictfp
Namenskonventionen
- Methoden entsprechend Bean-Naming verwenden, insbesondere in Klassen die auch in JSP verwendet
werden könnten. Beispiel: nicht size() sondern getSize() - Wenn voraussehbar ist, dass von einem Objekt sicher auch z.B. eine Liste verlangt wird, das
Einzelobjekt mit ...Item bezeichnen. So wird ein eindeutiger Name erreicht.
Beispiel: UserItem (nicht User) und UserList - Klassennamen nicht mit Abstract versehen, da es wenn im Code für Typing verwendet haesslich aussieht.
- Klassennamen mit einem Projekt-Prefix versehen.
Vererbung
Liskov Substitution Principle
Ein Objekt eines Untertyps muss jederzeit das Objekt des Obertyps ersetzen können.
Wohlgeformte Hierarchie
Siehe Design by Contract:
- eine Unterklasse kann die Nachbedingungen unverändert lassen oder verschärfen
- eine Unterklasse kann die Vorbedingungen unverändert lassen oder aufweichen
Setter
Set-Methoden wenn möglich vermeiden, da diese die Konsistenz von Objekten gefährden können,
bzw. die Gefahr besteht, unvollständige Objekte zu erzeugen. Objekte statt dessen mit Create- bzw.
Factory-Methoden konsistent erzeugen.
Ausnahme:
Beans schreiben Setter- und Getter-Methoden vor.
Log- und Konsolen Output
Log-Module für Konsolen Output verwenden (wenig Aufwand).
Wenn die Steuermöglichkeiten des Log-Moduls nicht reichen, separates Konsol-Modul implementieren.
Exceptions
Wo immer möglich sollten Standard Exceptions aus dem JDK verwendet werden (nicht neu erfinden).
Müssen applikationsspezifische Exceptions behandelt werden, gibt es immer zwei Möglichkeiten,
bzw. eine Mischform davon:
- eine Exception-Klasse mit allen möglichen Exception-Code und Meldungen pro Code
- oder für jede mögliche Exception eine Klasse
Welche Variante gewählt werden soll, muss von Fall zu Fall abgeklärt werden.
Methoden mit "throws Exception" sind nicht erlaubt, es muss eine spezifische Exception definiert
werden.
Ausnahme:
Methoden "testEtwas" in Unittests (Junit).
Achtung:
Runtime-Exceptions müssen nicht abgefangen und demzufolge auch nicht dokumentiert werden.
Checked oder Runtime Exception:
Faustregel: Kann der Aufrufer etwas mit der Exception anfangen, dann eine Checked Exception
verwenden, sonst eine Runtime Exception.
Review Checkliste
- keine überflüssigen Variablen (in Eclipse Deklaration anklicken)
- Javadoc aktuell
- sind Konstanten-Definitionen in der richtigen Klasse und nur einmal vorhanden
Frameworks
- Wichtige Klassen, die abgeleitet werden müssen, sollten nicht direkt, sondern über eine eigene
Klasse verwendet werden. So kann man Code an einer zentralen Stelle definieren (Beispiel:
Struts Action Klasse).
Notizen zu Java
Native Libraries können nur von einem Classloader geladen werden. Die alte Library kann nicht entfernt
werden, auch nicht wenn der alte Classloader zerstört wird.
Enable Strong Cryptography in Java
Install the unlimited strength policy JAR files.
To utilize the encryption/decryption functionalities of the JCE framework without any limitation, first make a copy of the original JCE policy files (us_export_policy.jar and local_policy.jar in the standard place for JCE jurisdiction policy JAR files) in case you later decide to revert to these "strong" versions. Then replace the strong policy files with the unlimited strength versions extracted in the previous step.
The standard place for JCE jurisdiction policy JAR files is:
JAVA$ROOT:[JRE.LIB.SECURITY]
e.g.
$ RENAME/LOG JAVA$ROOT:[JRE.LIB.SECURITY]LOCAL_POLICY.JAR -
LOCAL_POLICY-ORIGINAL
$ COPY/LOG VSI_BIN:LOCAL_POLICY.JAR JAVA$ROOT:[JRE.LIB.SECURITY]
$ RENAME/LOG JAVA$ROOT:[JRE.LIB.SECURITY]US_EXPORT_POLICY.JAR US_EXPORT_POLICY-ORIGINAL
$ COPY/LOG VSI_BIN:US_EXPORT_POLICY.JAR JAVA$ROOT:[JRE.LIB.SECURITY]
Set protection like original files.
Java Secure Socket Extension JSSE
SSL, Keystores, Zertifikate
Java Cryptography Architecture Oracle Providers Documentation
Informationsquellen
Bücher
Beschreibung und Beispiele mit Java 5.
Java 6 ist auch eine Insel (lokal)
Beschreibung und Beispiele mit Java 6.
Java Umgebung
JAR Search
Search Engine sucht jar Files, die eine gesuchte Klasse enthalten.
Executable Wrapper
Mit Launch4j kann man ein jar File in ein exe verpacken.
Daemon und Service
Eine Java Server Applikation als Daemon (Unix) bzw. Service (Windows) starten.
- Apache Commons Projekt Daemon mit jsvc und procrun und speziell für Unix ein Blog von Ralf Ebert.
- Tanuki Software
- Yet Another Java Service Wrapper Homepage
Web Applikationen
EJB
Enterprise Java Beans, Java JEE.
Beschreibung auf Wikipedia.
Java EE at a Glance von Oracle
Apache Tomcat
Web Application Specifications
Konfiguration HTTPS
Das Passwort für den Keystore wird im Connector mit keystorePass gesetzt.
Hat der private Key ein anderes Passwort, kann dieses mit keyPass gesetzt werden.
Apache TomEE
XML
Website mit Erklärungen und Beispielen zu XML, JAXP, StAX, SAX, DOM und JDOM mit Java
JAXB
JAXB Reference Implementation Project Homepage Tutorial
JDO
JMS
JUnit
Guice
Spring
Oracle ADF Mobile
Sonar
Informationen
Einführung
Die Analyse von Sonar basiert auf sogenannten Quality Profiles. Es werden Profiles mitgeliefert, eines ist als Default gesetzt.
Eigene Profiles können komfortabel erzeugt werden, vollständig neu oder durch Vererbung eines vorhandenen Profiles.
Profile
In Sonar werden verschiedene Profile mitgeliefert.
Abweichungen
Code Conventions
Folgende Punkte kann man diskutieren:
- Sollen für "static final" Variablen nur Grossbuchstaben verwendet werden. Das ist im Fall eines Loggers im Code hässlich.
- Für Instanzvariablen müsste am Anfang ein Underline zulässig sein, da in JSON teilweise Variablen so verwendet werden (Java Reflection).
Verwendung auf Windows PC
Sonar auf lokalem PC
ZIP downloaden und auspacken.
Service installieren.
Mit dem default Setup werden die Daten in einer H2 Datenbank gespeichert.
Sonar Server starten, Link
Soll eine andere Datenbank, z.B. MySQL verwendet werden, ist die Beispielkonfiguration in ./conf/sonar.properties vorhanden.
Achtung: Auf MySQL Datenbank "sonar" neu erstellen und Sonar Service restarten.
Maven
Analyse
mvn clean install
mvn sonar:sonar
Konfiguration
Anderes als Default Quality Profile:
<sonar.profile>basic</sonar.profile>
Andere Datenbank, z.B. MySQL:
<sonar.jdbc.url>jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8</sonar.jdbc.url>
<sonar.jdbc.driverClassName>com.mysql.jdbc.Driver</sonar.jdbc.driverClassName>
<sonar.jdbc.username>root</sonar.jdbc.username>
<sonar.jdbc.password>root</sonar.jdbc.password>
Sonar Server:
<sonar.host.url>URL</sonar.host.url>
Sourcecode kann von der Analyse ausgeschlossen werden.
Dazu wird im pom.xml eine Property mit Komma getrennten Definitionen definiert:
<sonar.exclusions>com/corvil/**/*</sonar.exclusions>
Java Entwicklung
Projekt einrichten
Verwendete Werkzeuge:
- Maven
- Eclipse
Einfaches Single Modul Projekt "app" mit Maven erzeugen:
cd C:\LOCAL\de ! Basisverzeichnis
mkdir app\workspace
cd app\workspace
mvn archetype:generate -DarchetypeArtifactId=maven-archetype-quickstart -DgroupId=ch.rua.app -DartifactId=app
cd app
mvn clean test
Setup für Eclipse:
mvn eclipse:eclipse
nicht ausführen, gibt Probleme!
Eclipse starten:
start "AppIde" %ECLIPSE_HOME%\eclipse.exe -clean -showlocation -data C:\LOCAL\de\app\workspace -vm %JAVA_HOME%\bin\javaw.exe
In Eclipse das Projekt importieren:
Import->Maven->Existing Maven Projects
Tutorials
Java EE 6 mit Eclipse, Maven und JBoss
Unit Test
JUnit
GUI Test
HtmlUnit
Selenium
JWebUnit
JEE
Informationen
Web Services
Informationen
JAX-WS Reference Implementation, Projekt Metro Maven Plugin
Client Side Certificate Handling in Secure Metro Web Services
axis2M Axis2 Entwicklung mit Maven
Developer Portal for Opensource SOAP Web Services
Werkzeuge
CRaSH The Shell for the Java Platform
Jetty
Informationen
TomEE
Informationen
Verzeichnis der in TomEE enthaltenen Komponenten in Wikipedia
CDI
Allgemein
Control CDI Containers in SE and EE (Struberg's Blog)
4 areas of possible confusion in JEE 6
Produkte
OpenWebBeans
Apache DeltaSpike
Testing your application with Apache DeltaSpike CdiCtrl
Test
CDI-Unit Homepage
Java Tool IP Options
set JAVA_TOOL_OPTIONS=-Djava.net.preferIPv4Stack=true