Leben – FotoMonat Februar

Leben – eigentlich ein sehr breit gefächterter Begriff, doch ob der Jahreszeit hat man das Gefühl es muss etwas anfängliches sein, wie z.B. eine Pflanze.

Diesen Monat war das Thema etwas schwieriger. Leben – eigentlich ein sehr breit gefächterter Begriff, doch ob der Jahreszeit hat man eher das Gefühl es muss etwas anfängliches sein, wie z.B. ein Kind, ein junges Tier, oder eine Pflanze die sich gerade gegen den Himmel zu recken beginnt. Dabei wär eigentlich alles was unser Auge erblickt für dieses Thema zutreffend. Sei es die Straßenbahn in die wir täglich steigen, die Wurstsemmel als Frühstück, eine Straße voller Leute oder gar ein Friedhof.

Ich hab mich trotzdem für etwas Grünes entschieden. Und da nunmal Februar ist musste ich selbst dafür sorgen. Kresse ist ganz leicht selbst angebaut.

Leben

Ähnliche Artikel:

Spring Transaction Propagation Überblick

Nutzt man das Transaktionsmanagement in Spring, kann man als Entwickler über die Propagation einer Transaktion (Eigenschaft z.B. auf der Annotation) bestimmen, wie die aufgerufenen Methoden in Bezug auf die Transaktion gekapselt werden. Verschachtelt, oder in einer großen Transaktion, man hat hier viele Freiheiten. Ich möchte nun die verschiedenen Ausprägungen von Propagation vorstellen und dabei anmerken wie sich diese bei einer Verschachtelung auswirken.

Transaction Propagation – Ein Überblick

Nutzt man das Transaktionsmanagement in Spring, kann man als Entwickler über die Propagation einer Transaktion (Eigenschaft z.B. auf der Annotation) bestimmen, wie die aufgerufenen Methoden in Bezug auf die Transaktion gekapselt werden. Verschachtelt, oder in einer großen Transaktion, man hat hier viele Freiheiten. Ich möchte nun die verschiedenen Ausprägungen von Propagation vorstellen und dabei anmerken, wie sich diese bei einer Verschachtelung auswirken.

REQUIRED

Logik unter REQUIRED nutzt die selbe Transaktion wie eine aufrufende Logik, wenn diese bereits innerhalb einer Transaktion läuft. Wenn noch keine Transaktion vorhanden ist, wird eine neue gestartet. Als Beispiel nehmen wir die Logik OUTER und INNER, beide mit Propagation REQUIRED. OUTER und INNER sind gekoppelt, sprich OUTER nutzt die Funktionalität INNER. Der Aufruf von OUTER erzeugt also eine neue Transaktion, da noch keine vorhanden ist. Nun ruft OUTER die Logik von INNER auf. Es existiert bereits eine laufende Transaktion, daher nutzt INNER diese. Wird nun innerhalb von INNER ein Rollback verursacht, kann auch OUTER nicht mehr Commiten und unterliegt einem Rollback.

REQUIRES_NEW

Kennzeichnet Logik die immer innerhalb einer neuen Transaktion ausgeführt wird. Nehmen wir wieder an OUTER hat eine Transaktion und ruft INNER, welches die Propagation REQUIRES_NEW aufweist, auf, sind diese beiden Transaktionen distinkt. So in INNER ein Rollback erfolgt, bekommt die Transaktion OUTER davon nichts mit und umgekehrt. Während INNER ausgeführt wird ist die Transaktion von OUTER pausiert.

NESTED

Nested Logik nutzt die selbe Transaktion wie der Aufrufer, jedoch werden Savepoints genutzt, um die innere Transaktion von der Äußeren unabhängig(er) zu machen. In der inneren Transaktion kann so ein Rollback erfolgen bis zurück in die äußere Transaktion, ohne dass dieser Teil ebenfalls einem Rollback unterliegt.

MANDATORY

Kennzeichnet Logik, die eine bereits geöffnete Transaktion voraussetzt. Wird sie aufgerufen ohne einer laufenden Transaktion wird eine Exception vom Container geworfen.

NEVER

Beschreibt Logik, die in keiner Transaktion ausgeführt werden darf. Erfolgt dennoch ein Aufruf aus einer Transaktion heraus wird eine Exception vom Container geworfen.

NOT_SUPPORTED

Logik wird hierbei außerhalb der Transaktion aufgerufen. Ist eine Transaktion bereits vorhanden, wird sie für den Aufruf der Logik pausiert.

SUPPORTS

Wenn bereits eine offene Transaktion vorhanden ist, wird die Logik in dieser ausgeführt. Ist keine vorhanden, wird die Logik auch ohne Transaktion durchlaufen.

In diesem Sinne:

@Transactional(propagation=Propagation.REQUIRES_NEW)
public void haveSomeFun(User user) {
    // TODO have fun
}

Ähnliche Artikel:

Tomcat + Apache2 auf Debian

Wär doch toll wenn man die Anwendungen die auf dem Tomcat laufen würden auch über den normalen 80er Zugriff erreichen könnte. Apache mod_jk machts möglich!

Aus Zwei mach Eins

Da ich gerade meinen Heimserver um diverse Entwickler Tools aufstocken möchte (Jenkins, Sonar, Nexus) musste erstmal ein Servlet-Container her: Tomcat
Port 80 ist bereits freigegeben und eigentlich nervt mich das Portgetippe (eh schon wissen: localhost:8080) beim URL Aufruf ziemlich. Wär doch toll wenn man die Anwendungen die auf dem Tomcat laufen würden auch über den normalen 80er Zugriff erreichen könnte, oder?

Naja, dann ran ans Eingemachte!

Installation Tomcat

Java

So noch nicht geschehen sollte sinnvollerweise eine Java Installation am Server vorhanden sein

# apt-get install openjdk-6-jre

Wer auf dem Server auch Programme compiliern will besorgt sich ein jdk. Für die Installatin von Java 7 verweise ich auf einen ausgezeichneten Blog Beitrag von SysadminsLife

Download und Installation

Auf der Tomcat Seite die gewünschte Version (im Falle des Tutorials die neueste 7.0) mit wget herunterladen und entpacken

# tar xvfz apache-tomcat-7.0.35.tar.gz

danach an eine passende Stelle verschieben /opt/tomcat

# mv apache-tomcat-7.0.35 /opt/tomcat

Zum Abschluss noch die Scripts ausführbar machen

# chmod +x /opt/tomcat/bin/*.sh

Tomcat User und Gruppe

# groupadd tomcat
# useradd -g tomcat -d /opt/tomcat tomcat
# usermod -G www-data tomcat
# chown tomcat:tomcat /opt/tomcat -R

Tomcat Startup Script

Unter /etc/init.d/tomcat wird das Tomcat 7 Script von collinpeters abgespeichert (Oh ja, Github rulez! Und gist erst recht – Danke für das schöne Script!)

Natürlich muss das Script noch ausführbar gemacht werden und es soll automatisch starten

# chmod +x /etc/init.d/tomcat
# update-rc.d tomcat defaults

Tomcat Server User

Tomcat will auch abgesichert sein, zumindest ein bisschen. Daher legen wir einen Benutzer für die Admin und Manager Webapps an. Unter /opts/tomcat/conf/tomcat-users.xml ist folgendes zu ergänzen

<tomcat-users>
    <role rolename="manager" />
    <role rolename="manager-gui" />
    <role rolename="admin"/>
    <role rolename="admin-gui"   />
    <user username="USER" password="PASSWORT"
     roles="admin,admin-gui,manager,manager-gui" />
</tomcat-users>

Bitte USER und PASSWORT durch eure Werte ersetzen.

Start und Test

Es wär alles für die Katz würden wir es nicht auch testen. Dafür starten wir das Service

# /etc/init.d/tomcat start

Nun sollte Tomcat unter http://<server-ip>:8080 erreichbar sein.

Installation mod_jk Apache connector

apt-get

Wie immer, als erstes ist das Package zu installieren:

# apt-get install libapache2-mod-jk

Dieses Apache Modul dient als Brücke zwischen dem Webserver und Tomcat

mod_jk Konfiguration

Mit ein paar Zeilen unter /etc/apache2/conf.d/jk.conf wird mod_jk konfiguriert

<ifmodule mod_jk.c>
    JkWorkersFile /etc/apache2/workers.properties
    JkLogFile /var/log/apache2/mod_jk.log
    JkLogLevel error
</ifmodule>

mod_jk Worker

Apache benötigt nun noch eine Konfiguration in der festgehalten wird wie er einen Request auf Tomcat umleitet

Unter /etc/apache2/workers.properties legen wir daher folgende Konfiguratino ab

workers.tomcat_home=/opt/tomcat
workers.java_home=/usr/lib/jvm/java-6-openjdk
ps=/
worker.list=default
worker.default.port=8009
worker.default.host=localhost
worker.default.type=ajp13
worker.default.lbfactor=1

sites-available

Nun muss Apache nur noch erfahren welche Requests er an Tomcat weiterleiten soll. Dazu fügen wir in /etc/apache2/sites-available/default JkMount Zuordnungen ein. Im Falle der Tomcat Manager Applikation wären das folgende Zeilen 8 und 9

<VirtualHost *>
ServerAdmin root@localhost
ServerAlias homeserver

DocumentRoot /var/www/
# weitere Konfiguration

JkMount /manager default
JkMount /manager/* default

</VirtualHost>

Test

Nun muss Apache natürlich neu gestartet werden:

# /etc/init.d/tomcat restart

Das wars, nun sollte unter http://<server-ip>/manager die erste Weiterleitung auf den Tomcat sichtbar sein!

Viel Spaß damit!

Ähnliche Artikel: