Java

Informationen

Java Platform Group, Product Management Blog       Oracle Java SE Releases FAQ

Java Code Geeks

javatips.net

Java User Group Schweiz

Java Enterprise

Informationen

Jakarta EE

OpenJDK

Homepage

JPA

Java Persistence 2.0 API Specification

Java Persistence Wikibook

Hibernate

Homepage

Apache OpenJPA

Homepage

Hibernate

Homepage

Dokumentation

Naming and Directory Operations JNDI, LDAP, Active Directory

Tutorial Oracle

Apache Directory LDAP API Homepage

EclipseLink

EclipseLink team blog

EclipseLink wiki documentation

JPA 2.0 with EclipseLink - Tutorial

payara Server

Homepage  Ablösung von GassFish

JBoss

Informationen

EJB, Enterprise Java Beans Application Server

WildFly Homepage

JBoss Homepage

JBoss Community

JBoss Application Server

Understanding web Security using web.xml

FORM-based declarative authentication against MySQL Realm

How to setup JAAS in Jboss7

Cargo

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

JSR 353

JSON Processing - Reference Implementation

Projekt JSON

Homepage

JSON in Java

Projekt GSON

Homepage

Windows Office API

Apache POI Homepage

Projekt Lombok

Anleitung

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

Reference Guide Java 7

Java Cryptography Architecture Oracle Providers Documentation

Informationsquellen

JCP Java Community Process

Homepage Angelika Langer

Bücher

Beschreibung und Beispiele mit Java 5.

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.

Web Applikationen

web-app_2_4.xsd

EJB

Enterprise Java Beans, Java JEE.

Beschreibung auf Wikipedia.

Java EE at a Glance von Oracle

Java EE 6 Technologies

Java EE 6 Tutorial

OpenEJB

Apache Tomcat

Homepage

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

Homepage

JPA Concepts

XML

Website mit Erklärungen und Beispielen zu XML, JAXP, StAX, SAX, DOM und JDOM mit Java

JAXB

JAXB Project

Users Guide

JAXB Reference Implementation Project Homepage Tutorial

JDO

Java Data Objects

JMS

OpenJMS

Apache ActiveMQ

HornetQ

JUnit

Homepage

Guice

Projekt Homepage

Spring

SpringSource.org

SpringSource.com

Oracle ADF Mobile

Homepage


Sonar

Informationen

Homepage

Doku (codehaus)

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&amp;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

Homepage

GUI Test

Liste mit Testing Tools

HtmlUnit

Homepage

Selenium

Homepage

JWebUnit

Homepage

API Doku assert Methoden


JEE

Informationen

Spezifikation JEE 6 (JSR 316)


Web Services

Informationen

JAX-WS Reference Implementation, Projekt Metro Maven Plugin

Client Side Certificate Handling in Secure Metro Web Services

Apache Webservices Project

Apache Axis

Axis2/Java

axis2M Axis2 Entwicklung mit Maven

Developer Portal for Opensource SOAP Web Services

Tutorial

Werkzeuge

SoapUI

TCPMon

CRaSH The Shell for the Java Platform

Jetty

Informationen

Projekt Homepage

TomEE

Informationen

Projekt Homepage

Verzeichnis der in TomEE enthaltenen Komponenten in Wikipedia

CDI

Allgemein

JSR 299

Javadoc als Teil von JEE

Control CDI Containers in SE and EE (Struberg's Blog)

4 areas of possible confusion in JEE 6

Produkte

OpenWebBeans

Homepage

Apache DeltaSpike

Homepage

Testing your application with Apache DeltaSpike CdiCtrl

Test

CDI-Unit Homepage

Java Tool IP Options

set JAVA_TOOL_OPTIONS=-Djava.net.preferIPv4Stack=true