Die Programmiersprache, mit der die Programme entwickelt werden, die auf den [Application Servern|Application Server] [deployed|Deployment] werden. Java-Programme können auch standalone ausgeführt werden, brauchen also nicht notwendigerweise einen Application Server. Im Business Umfeld werden komplexe Anwendungen jedoch fast immer auf Application Servern betrieben, da hier ein permanenter Betrieb und das dynamische Deployment und Undeployment einzelner Komponenten möglich ist.

!!!Java Beispiel
Ein einfaches Java-Programm, das die Zeichenkette "Hello World!" auf der Kommandozeile ausgibt, sieht wie folgt aus:

{{{
    public class MyClass {
        public static void main(String[] args) {
            System.out.println("Hello World!");
        }
    }
}}}

!!!Java Virtual Machine Sourcen
Die Sourcen der Version 6.0 gibts unter [http://download.java.net/jdk6/source/].

!Certificate von Web-Seite im Keystore installieren
Mit folgender Klasse kann ein Zertifikat einer HTTPS-Web-Seite im Keystore der lokalen Java-Installation hinzugefügt werden, sodass dieser Seite immer vertraut wird.

[Java/InstallCert.class]

{{{
java InstallCert <address>:<port>
}}}

Source Code:

[Java/InstallCert.java]

!!!Proxy Konfigurieren
Beim Starten der virtuellen Maschine können Parameter für das Verwenden eines Proxys übergeben werden:

{{{
java -DproxyHost=<host> -DproxyPort=<port>
}}}

Oder die System-Proxy-Einstellungen verwenden:

{{{
System.setProperty("java.net.useSystemProxies", "true");
Proxy proxy = ProxySelector.getDefault().select(new URI("http://intersult.com/")).get(0);
}}}

!!!Java Debug Options
{{{
-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y
}}}

!!!SSL-Zertifikat
Für HTTPS- und allgemein SSL-Verbindungen werden Zertifikate (Trusted Certificate) verwendet. Mit der Kommandozeile ist dies durch das Kommando keytool (%JAVA_HOME%/bin) mögich.

!!!HTTPS-Zertifikate
Der Keystore muss angegeben werden, eine Datei in der die Zertifikate gespeichert werden. Der Default-Keystore, der von Java benutzt wird, lautet %JAVA_HOME%\jre\lib\security\cacerts, das Default-Passwort lautet changeit.

||Aufgabe||Befehl
|Auflisten|keytool -keystore "%JAVA_HOME%\jre\lib\security\cacerts" -storepass changeit -list
|Importieren|keytool -keystore "%JAVA_HOME%\jre\lib\security\cacerts" -storepass changeit -import -file <filename>

!!StartCom-Zertifikate
StartCom ist bei den meisten neuen Browsern bereits enthalten, bei Java jedoch noch nicht. Kann durch folgende Kommandos hinzugefügt werden:

{{{
keytool -keystore "%JAVA_HOME%\jre\lib\security\cacerts" -storepass changeit -import -alias startcom.ca -file ca.pem -trustcacerts
keytool -keystore "%JAVA_HOME%\jre\lib\security\cacerts" -storepass changeit -import -alias startcom.ca.sub -file sub.class1.server.ca.pem -trustcacerts
}}}

Es handelt sich um zwei Zerfitikate in der Key-Chain. Die Dateien ca.pem und sub.class1.server.ca.pem können von [http://www.startcom.org/] besorgt werden:

* [http://www.startssl.com/certs/ca.crt]
* [http://www.startssl.com/certs/sub.class1.server.ca.crt]

!!!Speicher
[Java] benutzt nur begrenzt Speicher. Falls eine Anwendung mehr Speicher braucht, muss dieser manuell erhöht werden. Insbesondere ist davon der sogenannte PermGen-Space betroffen, Speicher der dauerhaft belegt wird:

{{{
-Xmx512M -XX:MaxPermSize=256M
}}}

Zusätzlich kann das Entladen von Java-Klassen aktiviert werden:

{{{
-XX:+CMSClassUnloadingEnabled
}}}

Darüber kann das Verwenden des neuen Garbage-Kollektors noch Vorteile bringen:

{{{
-XX:+UseConcMarkSweepGC
}}}

Also alles zusammen:

{{{
-Xmx512M -XX:MaxPermSize=256M -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC
}}}

!!!Code Metriken und Reporting
Es gibt einige Tools um sich eine Übersicht über Abhängigkeiten und den Zustand von Code zu verschaffen. Praktisch sind Maven-Plugins, da diese automatisch heruntergeladen und ausgeführt werden:

!!JDepend
Mit jdepend:generate kann ein Report generiert werden, hier ein Auszug:

[Java/jdepend.PNG]