java über Kommandozeile auf Linux-Server installieren

Java-Version installieren

Zunächst wird die aktuelle Java-Version (derzeit 1.7.45) heruntergeladen. Der Download kann über die Java-Download-Seite erfolgen, oder mittels folgendem Kommando:
wget --no-cookies --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com" "http://download.oracle.com/otn-pub/java/jdk/7u45-b18/jdk-7u45-linux-i586.tar.gz"

Danach kann Java wie auf http://www.java.com/de/download/help/linux_install.xml beschrieben installiert werden.

Dazu auf der Konsole den Befehl
tar zxvf jdk-7u45-linux-i586.tar.gz
absetzen. Der Benutzer muss sich dazu in einem Verzeichnis befinden, in dem er Schreibrechte hat, siehe dazu http://www.java.com/de/download/help/linux_install.xml#Java for Linux Platforms. Anschließend sollten noch die Pfad-Angaben ergänzt werden.

Jboss-Einrichtung auf Linux-Server

Dieser Artikel beschreibt, wie jboss auf einem Linux-Server (ManagedServer) von domainFactory eingerichtet werden kann. Annahme: der Application Server wird über das Webfrontend im Admin-Bereich der Webverwaltung installiert und muss anschließend konfiguriert werden. Das Zielsystem beinhaltet einen Java-Webservice, welcher mit einer MySQL-Datenbank kommuniziert.

Vorbedingungen:

  • jboss 6.0.0 wurde installiert und gestartet
  • SSH-Zugriff ist möglich
  • Java ist bereits installiert

jboss Application Server und MySQL-Connection einrichten

Nachdem jboss installiert wurde, kann eingetragen werden, dass er automatisch gestartet werden soll. Dies kann im Webfrontend unter Serverkonfiguration->systemSTARTUP erfolgen. Über diesen Menüeintrag kann der Server auch komfortabel gestartet und gestoppt werden.

Die Integration von MySQL erfolgt mittels einer XML-Datei, die im Ordner deploy (JBOSS-HOME/server/default/deploy/) angelegt wird. Der Inhalt kann dabei wie folgt aussehen (andere Einstellungen sind natürlich denkbar):

<?xml version="1.0" encoding="UTF-8"?>
<datasources>
  <local-tx-datasource>
    <jndi-name>mydatasourcename</jndi-name>
    <connection-url>jdbc:mysql://mysql5.servername:3306/database</connection-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <user-name>db-username</user-name>
    <password>db-password</password>
    <min-pool-size>0</min-pool-size>
    <max-pool-size>5</max-pool-size>
    <idle-timeout-minutes>5</idle-timeout-minutes>
    <exception-sorter-class-name>com.mysql.jdbc.integration.jboss.ExtendedMysqlExceptionSorter</exception-sorter-class-name>
    <valid-connection-checker-class-name>com.mysql.jdbc.integration.jboss.MysqlValidConnectionChecker</valid-connection-checker-class-name>
  </local-tx-datasource>
</datasources>

Die MySQL-Jar-Datei (zum Beispiel mysql-connector-java-5.1.26-bin.jar) muss in den Lib-Ordner gelegt werden. Zunächst platzierte ich die Datei in JBOSS-HOME/server/all/lib/, doch wie sich herausstellte, verursachte dies einen Fehler – dazu gleich mehr.

Die korrekte Einrichtung kann beispielsweise mit der Adminkonsole überprüft werden. Dazu zunächst den Server stoppen und danach wieder starten. In der Adminkonsole unter Resources->Datasources sollte nun die soeben erstellte Datasource zu finden sein. Angenommen jboss läuft auf Port 8080, kann die Adminkonsole mittels lynx mit folgendem Aufruf gestartet werden:
lynx http://localhost:8080
Nach Auswahl von Administration Console (siehe Screenshot), gelangt der Benutzer zur Maske zum Eingeben der Login-Daten. Das Passwort wurde bei der Installation von jboss hinterlegt.

Jboss-Admin-Konsole
Adminkonsole von jboss

Eine War-Datei kann deployed werden, in dem sie in den Ordner JBOSS-HOME/server/default/deploy/ gelegt wird. Beim Deployen der War-Datei bin ich auf ein Problem gestoßen. Obwohl der verwendete MySQL-Treiber zur Datenbank passen sollte, gab es folgende Fehlermeldung:

Throwable while attempting to get a new connection: null: org.jboss.resource.JBossResourceException: Could not create connection; - nested throwable: (org.jboss.resource.JBossResourceException: Apparently wrong driver class specified for URL: class: com.mysql.jdbc.Driver, url: jdbc:mysql://mysql5.servername.de:3306/databasename)

Interessanterweise wurden die Tabellen dennoch richtig angelegt. Um die Fehlermeldung los zu werden, musste die MySQL-Lib in den Ordner JBOSS-HOME/server/default/lib/ verschoben werden.

In der Persistence-Datei muss die MySQL-Verbindung angegeben werden, was in nachfolgendem Code-Ausschnitt zu sehen ist.

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
    xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
          http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
  <persistence-unit name="persistenceunitname">	
    <jta-data-source>java:/mydatasourcename</jta-data-source> 
    <properties>
    	<property name="hibernate.show_sql" value="true" />
    	<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
    	<property name="hibernate.hbm2ddl.auto" value="create-drop" />
    	<property name="hibernate.connection.useUnicode" value="true" />
		<property name="hibernate.connection.characterEncoding" value="UTF-8" />
    </properties>
  </persistence-unit>
</persistence>

Glassfish-Installation

Im Folgenden habe ich eine kleine Anleitung zusammengetragen, wie der Glassfish Application Server auf einer frischen Suse-Umgebung installiert werden kann. Diese Anleitung ist entstanden, als ein System aufgesetzt wurde, auf dem ein Java-Webservice unter dem Glassfish Application Server und eine PHP-Applikation laufen sollten. Im Artikel sind weitere hilfreiche Seiten mit zusätzlichen Informationen verlinkt.

Kleine Checkliste:

– java jdk 7u21 installiert
– Ordner /usr/glassfishv3/ erstellt
– /etc/profile.local erstellt, Inhalt:
export JAVA_HOME=/usr/java/jdk1.7.0_21
export GLASSFISH_HOME=/usr/glassfishv3/glassfish
export PATH=$JAVA_HOME/bin:$GLASSFISH_HOME/bin:$PATH
– source /etc/profile.local aufgerufen
– glassfish ogs-3.1.2.2.zip runtergeladen und installiert (http://www.iniy.org/?p=275)

MysqlDataTruncation: Data truncation: Data too long for column

Beim Speichern eines neuen Datensatzes in einem Java-Webservice, bin ich auf den Fehler „Data too long for column“ gestoßen. Eigentlich eine klare Sache – doch nicht in diesem Fall.

Die Entwicklungsumgebung:

  • jboss application server
  • Java 1.7, JPA und Hibernate
  • MySQL-Datenbank

Die Java-Bean hat ein Feld namens myclass vom Typen MyClass (Klassennamen wurde geändert ;-)). Das sieht ungefähr so aus:

@Column(nullable=false);
private MyClass myclass;

Das Bauen der War-Datei und das Deployen funktioniert reibungslos. Auch können andere Datensätze problemlos eingetragen werden. Doch sobald oben erwähnter Datensatz mittels em.persist in Die Datenbank übernommen werden soll, erscheint eine recht lange Fehlermeldung. Ein Auszug der Fehlermeldung:

Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'myclass' at row 1
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4188) [mysql-connector-java-5.1.20.jar:]
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4122) [mysql-connector-java-5.1.20.jar:]
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570) [mysql-connector-java-5.1.20.jar:]
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731) [mysql-connector-java-5.1.20.jar:]
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2818) [mysql-connector-java-5.1.20.jar:]
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2157) [mysql-connector-java-5.1.20.ja
r:]
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2460) [mysql-connector-java-5.1.20.jar:
]
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2377) [mysql-connector-java-5.1.20.jar:
]
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2361) [mysql-connector-java-5.1.20.jar:
]
at org.jboss.jca.adapters.jdbc.WrappedPreparedStatement.executeUpdate(WrappedPreparedStatement.java:493)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:133) [hibernate
-core-4.2.0.Final-redhat-1.jar:4.2.0.Final-redhat-1]

Ein Blick in die Datenbank zeigt, dass die Spalte als tinyblob angelegt wurde. Offensichtlich weiß JPA also nicht genau, was ich in dieser Spalte speichern möchte und nimmt an, dass es sich um einen größeren Wert handeln könnte. Daher muss die Spalte etwas genauer spezifiziert werden:

@OneToOne(cascade={CascadeType.REFRESH,CascadeType.MERGE},fetch = FetchType.EAGER)
@JoinColumn(nullable=false)
private MyClass myclass;

Aus @Column wurd ein @JoinColumn und die One-To-One-Beziehung wurde explizit hinzugefügt. Beim Erstellen der Datenbank-Tabelle ist aus dem Feld ein INT mit der Länge 11 geworden und das Hinzufügen des Datensatzes funktioniert wie erwartet.

Das Vorgehensmodell Scrum

Scrum

Der Begriff Scrum hat seinen Ursprung in der Sportart Rugby und heißt aus dem Englischen übersetzt Gedränge. Das angeordnete Gedränge ist dabei die Standardsituation, das Spiel nach Unterbrechungen fortzusetzen. Im Rugby geht es sehr rau zu, allerdings werden die Rugby-Regeln dabei stets verfolgt. Ähnlich verhält es sich zu Scrum: es gibt nicht viele Regeln im Scrum-Alltag, doch diese werden eingehalten und machen Scrum aus.

Auf den nachfolgenden Beitragsseiten geht es um die Rollen im Scrum-Prozess, die einzelnen Meetings, die unterschiedlichen Backlogs, Iterationen und schätzen mit Hilfe von Story Points.

scrum-cloud-300x116

2014 findet ein VHS-Kurs zum Thema Scrum und agiles Projektmanagement statt.