Kapitel 4. Tools und Tipps

4.1. Ressourcen, die bei der Migration helfen sollen

4.1.1. Ressourcen, die bei Ihrer Migration helfen sollen

Folgendes ist eine Liste von Ressourcen, die Ihnen bei der Migration von Applikationen auf die JBoss EAP 6 helfen sollen.
Tools
Es gibt mehrere Tools, die bei der Automatisierung einiger der Konfigurationsänderungen helfen. Weitere Informationen finden Sie unter: Abschnitt 4.1.2, »Machen Sie sich mit den Tools vertraut, die Ihnen bei der Migration helfen können«.
Tipps zur Fehlerbehebung
Eine Liste der häufigsten Ursachen und der Behebungen von Problemen und Fehlern, die bei Ihrer Migration Ihrer Applikation auftreten können, finden Sie hier: Abschnitt 4.2.1, »Fehler- und Problembehebung bei der Migration«.
Beispielmigrationen
Beispiele von Applikationen, die zur JBoss EAP 6 migriert wurde finden Sie hier: Abschnitt 4.3.1, »Übersicht der Migration der Beispielapplikationen«.

4.1.2. Machen Sie sich mit den Tools vertraut, die Ihnen bei der Migration helfen können

Zusammenfassung

Es gibt mehrere Tools, die Ihnen bei der Migration helfen. Nachfolgend sehen Sie eine Liste dieser Tools einschließlich einer Beschreibung davon, was diese tun.

Tattletale
Aufgrund der Änderung am modularen Klassenladen müssen Sie Applikationsabhängigkeiten finden und korrigieren. Tattletale kann Ihnen bei der Identifizierung abhängiger Modulnamen helfen und die Konfigurations-XML für Ihre Applikation generieren.
IronJacamar Migrationstool
Bei der JBoss EAP 6 werden Datenquellen und Ressourcenadapter nicht mehr in einer separaten Datei konfiguriert. Sie werden jetzt in der Serverkonfigurationsdatei konfiguriert und verwenden neue Schemas. Das IronJacamar Migrationstool kann Ihnen bei der Konvertierung der alten Konfiguration in das von der JBoss EAP 6 erwartete Format helfen.

4.1.3. Verwendung von Tattletale zum Auffinden von Applikationsabhängigkeiten

Zusammenfassung

Aufgrund modularer Klassenladeänderungen bei der JBoss EAP 6 können ClassNotFoundException oder ClassCastException im JBoss-Protokoll auftreten, wenn Sie Ihre Applikation migrieren. Um diese Fehler zu beheben, müssen Sie die JARs auffinden, die die von den Ausnahmen spezifizierten Klassen enthalten.

Tattletale ist ein ausgezeichnetes Drittanbieter-Tool, das Ihre Applikation rekursiv scannt und ausführliche Berichte zu deren Inhalten liefert. Tattletale 1.2.0.Beta2 oder später enthält zusätzlichen Support um mit dem neuen JBoss Modules Klassenladen in JBoss EAP 6 zu helfen. Tattletales "JBoss AS 7" Bericht kann zur automatischen Identifizierung und Generierung abhängiger Modulnamen zum Einschluss in die jboss-deployment-structure.xml-Datei Ihrer Applikation verwendet werden.

Prozedur 4.1. Installation und Ausführung von Tattletale zum Auffinden von Applikationsabhängigkeiten

Anmerkung

Tattletale ist ein Drittanbieter Tool und wird nicht als Teil von JBoss EAP 6 unterstützt. Die aktuellste Dokumentation zur Installation und Verwendung von Tattletale finden Sie auf der Tattletale Website unter http://tattletale.jboss.org/.

4.1.4. Download und Installation von Tattletale

Prozedur 4.2. Download und Installation von Tattletale

  1. Laden Sie sich die Tattletale Version 1.2.0.Beta2 oder neuer unter http://sourceforge.net/projects/jboss/files/JBoss%20Tattletale.
  2. Entpacken Sie die Datei im Verzeichnis Ihrer Wahl.
  3. Bearbeiten Sie die TATTLETALE_HOME/jboss-tattletale.properties-Datei wie folgt:
    1. Fügen Sie der profiles-Property ee6 und as7 hinzu.
      profiles=java5, java6, ee6, as7
    2. Entfernen Sie die Kommentierung aus den scan- und reports-Properties.

4.1.5. Erstellen und Prüfen des Tattletale Berichts

  1. Erstellen Sie mitteldes des folgenden Befehls einen Tattletale Bericht: java -jar TATTLETALE_HOME/tattletale.jar APPLICATION_ARCHIVE OUTPUT_DIRECTORY
    Zum Beispiel: java -jar tattletale-1.2.0.Beta2/tattletale.jar ~/applications/jboss-seam-booking.ear ~/output-results/
  2. Öffnen Sie in einem Browser die OUTPUT_DIRECTORY/index.html-Datei und klicken Sie auf "JBoss AS 7" unter dem "Reports"-Abschnitt.
    1. Die linke Spalte listet die von der Applikation verwendeten Archive. Klicken Sie auf das ARCHIVE_NAME-Link um weitere Informationen zu dem Archiv zu erhalten, so etwa zum Speicherort, Manifestinformationen und Klassen, die es enthält.
    2. Das jboss-deployment-structure.xml-Link in der rechten Spalte zeigt wie die Modulabhängigkeit für das in der linlken Spalte genannte Archiv festgelegt wird. Klicken Sie auf dieses Link um zu sehen, wie die Informationen zum Deployment-Abhängigkeitsmodul für dieses Archiv definiert werden.

4.1.6. Verwendung des IronJacamar Migrationstools zur Migration der Datenquellen- und Ressourcenadapterkonfigurationen

Zusammenfassung

In früheren Versionen des Applikationsservers wurden Datenquellen und Ressourcenadapter unter Verwemdung einer Datei mit dem Suffix *-ds.xml konfiguriert und deployt. Die IronJacamar 1.1 Distribution enthält ein Migrationstool, das zur Konvertierung dieser Konfigurationsdateien in das von der JBoss EAP 6 erwartete Format verwendet werden kann. Das Tool parst die Quellkonfigurationsdatei der vorherigen Release, erstellt und schreibt dann die XML-Konfiguration in eine Output-Datei im neuen Format. Diese XML kann dann kopiert und im korrekten Untersystem in der JBoss EAP 6 Serverkonfigurationsdatei eingefügt werden. Dieses Tool versucht möglcihst effektiv alte Attribute und Elemente in das neue Format zu konvertieren, jedoch ist es möglich, dass zusätzliche Änderungen an der generierten Datei vorgenommen werden müssen.

Anmerkung

Das IronJacamar Migrationstool ist ein Drittanbieter-Tool und wird nicht als Teil der JBoss EAP 6 unterstützt. Weitere Informationen zu IronJacamar finden Sie unter http://www.ironjacamar.org/. Die aktuellste Dokumentation zur Installation und Verwendung des Tools finden Sie unter http://www.ironjacamar.org/documentation.html.

4.1.7. Download und Installation des IronJacamar Migrationstools

Anmerkung

Das Migrationstool ist nur in IronJacamar 1.1 Version oder höher verfügbar und erfordert Java 7 oder höher.
  1. Laden Sie die neuste Ausgabe von IronJacamar hier herunter: http://www.ironjacamar.org/download.html
  2. Entpacken Sie die heruntergeladene Datei im Verzeichnis Ihrer Wahl.
  3. Finden Sie das Converter-Skript in der IronJacamar_Distribution.
    • Das Linux-Skript befindet sich hier: IRONJACAMAR_HOME/doc/as/converter.sh
    • Die Windows Batch-Datei befindet sich hier: IRONJACAMAR_HOME/doc/as/converter.bat

4.1.8. Verwenden Sie das IronJacamar Migrationstool für die Konvertierung einer Datenquellen-Konfigurationsdatei

Anmerkung

Das IronJacamar Converter-Skript erfordert Java 7 oder höher.

Prozedur 4.4. Konvertierung einer Datenquellen-Konfigurationsdatei

  1. Öffnen Sie eine Befehlszeile und navigieren Sie zum IRONJACAMAR_HOME/doc/as/-Verzeichnis.
  2. Führen Sie das Converter-Skript durch Eingabe des folgenden Befehls aus:
    • Für Linux: ./converter.sh -ds SOURCE_FILE TARGET_FILE
    • Für Microsoft Windows: ./converter.bat -ds SOURCE_FILETARGET_FILE
    Die SOURCE_FILE ist die Datenquelle -ds.xml-Datei aus der vorherigen Release. Die TARGET_FILE enthält die neue Konfiguration.
    Um zum Beispiel die sich im aktuellen Verzeichnis befindende jboss-seam-booking-ds.xml-Datenquellen-Konfigurationsdatei zu konvertieren, würden Sie folgendes eingeben:
    • Für Linux: ./converter.sh -ds jboss-seam-booking-ds.xml new-datasource-config.xml
    • Für Microsoft Windows: ./converter.bat -ds jboss-seam-booking-ds.xml new-datasource-config.xml
    Beachten Sie, dass der Parameter für die Datenquellenkonversion -ds lautet.
  3. Kopieren Sie das <datasource>-Element aus der Zieldatei und fügen Sie es unter dem <subsystem xmlns="urn:jboss:domain:datasources:1.1"><datasources>-Element in die Serverkonfigurationsdatei ein.

    Wichtig

    Sie müssen den Server stoppen, ehe Sie die Server Konfigurations-Datei bearbeiten, damit Ihre Änderungen bei einem Server-Neustart als dauerhaft erstellt werden.
    • Falls Sie mit einer Managed Domain arbeiten, so kopieren Sie die XML in die EAP_HOME/domain/configuration/domain.xml-Datei.
    • Falls Sie mit einem Standalone Server arbeiten, kopieren Sie die XML in die EAP_HOME/standalone/configuration/standalone.xml-Datei.
  4. Bearbeiten Sie die generierte XML in der neuen Konfigurationsdatei.
    Hier ist ein Beispiel der jboss-seam-booking-ds.xml Datenquellen-Konfigurationsdatei für das Seam 2.2 Booking-Beispiel, das mit der JBoss EAP 5.x geliefert wurde:
    <?xml version="1.0" encoding="UTF-8"?>
    <datasources>
      <local-tx-datasource>
        <jndi-name>bookingDatasource</jndi-name>
        <connection-url>jdbc:hsqldb:.</connection-url>
        <driver-class>org.hsqldb.jdbcDriver</driver-class>
        <user-name>sa</user-name>
        <password></password>
      </local-tx-datasource>
    </datasources>
    Nachfolgend sehen Sie die Konfigurationsdatei, die durch Ausführung des Converter-Skripts generiert wurde. Die generierte Datei enthält ein <driver-class>-Element. Die bevorzugte Weise der Definition der Treiberklasse bei der JBoss EAP 6 ist mittels eines <driver>-Elements. Hier ist die resultierende XML in der JBoss EAP 6 Konfigurationsdatei mit Änderungen, um das <driver-class>-Element auszukommentieren und das entsprechende <driver>-Element hinzuzufügen:
    <subsystem xmlns="urn:jboss:domain:datasources:1.1">
      <datasources>
        <datasource enabled="true" jndi-name="java:jboss/datasources/bookingDatasource" jta="true"
                pool-name="bookingDatasource" use-ccm="true" use-java-context="true">
          <connection-url>jdbc:hsqldb:.</connection-url>
          <!-- Comment out the following driver-class element 
               since it is not the preferred way to define this.
               <driver-class>org.hsqldb.jdbcDriver</driver-class>     -->
          <!-- Specify the driver, which is defined later in the datasource  -->
          <driver>h2<driver>
          <transaction-isolation>TRANSACTION_NONE</transaction-isolation>
          <pool>
            <prefill>false</prefill>
            <use-strict-min>false</use-strict-min>
            <flush-strategy>FailingConnectionOnly</flush-strategy>
          </pool>
          <security>
            <user-name>sa</user-name>
            <password/>
          </security>
          <validation>
            <validate-on-match>false</validate-on-match>
            <background-validation>false</background-validation>
            <use-fast-fail>false</use-fast-fail>
          </validation>
          <timeout/>
          <statement>
            <track-statements>false</track-statements>
          </statement>
        </datasource>
        <drivers>
          <!-- The following driver element was not in the 
         XML target file. It was created manually. -->
          <driver name="h2" module="com.h2database.h2">
            <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
            </driver>
          </drivers>
      </datasources>
    </subsystem>
    

4.1.9. Verwenden Sie das IronJacamar Migrationstool für die Konvertierung einer Ressourcenadapter-Konfigurationsdatei

Anmerkung

Das IronJacamar Converter-Skript erfordert Java 7 oder höher.
  1. Öffnen Sie eine Befehlszeile und navigieren Sie zum IRONJACAMAR_HOME/docs/as/-Verzeichnis.
  2. Führen Sie das Converter-Skript durch Eingabe des folgenden Befehls aus:
    • Für Linux: ./converter.sh -ra SOURCE_FILE TARGET_FILE
    • Für Microsoft Windows: ./converter.bat -ra SOURCE_FILE TARGET_FILE
    Die SOURCE_FILE ist die Ressourcenadapter -ds.xml-Datei der vorherigen Release. Die TARGET_FILE enthält die neue Konfiguration.
    Um zum Beispiel die mttestadapter-ds.xml-Ressourcenadapter-Konfigurationsdatei im aktuellen Verzeichnis zu konvertieren, würden Sie folgendes eingeben:
    • Für Linux: ./converter.sh -ra mttestadapter-ds.xml new-adapter-config.xml
    • Für Microsoft Windows: ./converter.bat -ra mttestadapter-ds.xml new-adapter-config.xml
    Beachten Sie, dass der Parameter für die Konvertierung des Ressourcenadapters -ra ist.
  3. Kopieren Sie das gesamte <resource-adapters>-Element aus der Zieldatei und fügen Sie es in der Serverkonfigurationsdatei unter dem <subsystem xmlns="urn:jboss:domain:resource-adapters:1.1">-Element ein.

    Wichtig

    Sie müssen den Server stoppen, ehe Sie die Server Konfigurations-Datei bearbeiten, damit Ihre Änderungen bei einem Server-Neustart als dauerhaft erstellt werden.
    • Falls Sie mit einer Managed Domain arbeiten, so kopieren Sie die XML in die EAP_HOME/domain/configuration/domain.xml-Datei.
    • Falls Sie mit einem Standalone Server arbeiten, kopieren Sie die XML in die EAP_HOME/standalone/configuration/standalone.xml-Datei.
  4. Bearbeiten Sie die generierte XML in der neuen Konfigurationsdatei.
    Nachfolgend sehen Sie ein Beispiel für die mttestadapter-ds.xml-Ressourcenadapter-Konfigurationsdatei aus der JBoss EAP 5.x TestSuite:
    <?xml version="1.0" encoding="UTF-8"?>
      <!-- ==================================================================== -->
      <!-- ConnectionManager setup for jboss test adapter                       -->
      <!-- Build jmx-api (build/build.sh all) and view for config documentation -->
      <!-- ==================================================================== -->
    <connection-factories>
      <tx-connection-factory>
        <jndi-name>JBossTestCF</jndi-name>
        <xa-transaction/>
        <rar-name>jbosstestadapter.rar</rar-name>
        <connection-definition>javax.resource.cci.ConnectionFactory</connection-definition>
        <config-property name="IntegerProperty" type="java.lang.Integer">2</config-property>
        <config-property name="BooleanProperty" type="java.lang.Boolean">false</config-property>
        <config-property name="DoubleProperty" type="java.lang.Double">5.5</config-property>
        <config-property name="UrlProperty" type="java.net.URL">http://www.jboss.org</config-property>
        <config-property name="sleepInStart" type="long">200</config-property>
        <config-property name="sleepInStop" type="long">200</config-property>
      </tx-connection-factory>
      <tx-connection-factory>
        <jndi-name>JBossTestCF2</jndi-name>
        <xa-transaction/>
        <rar-name>jbosstestadapter.rar</rar-name>
        <connection-definition>javax.resource.cci.ConnectionFactory</connection-definition>
        <config-property name="IntegerProperty" type="java.lang.Integer">2</config-property>
        <config-property name="BooleanProperty" type="java.lang.Boolean">false</config-property>
        <config-property name="DoubleProperty" type="java.lang.Double">5.5</config-property>
        <config-property name="UrlProperty" type="java.net.URL">http://www.jboss.org</config-property>
        <config-property name="sleepInStart" type="long">200</config-property>
        <config-property name="sleepInStop" type="long">200</config-property>
      </tx-connection-factory>
      <tx-connection-factory>
        <jndi-name>JBossTestCFByTx</jndi-name>
        <xa-transaction/>
        <track-connection-by-tx>true</track-connection-by-tx>
        <rar-name>jbosstestadapter.rar</rar-name>
        <connection-definition>javax.resource.cci.ConnectionFactory</connection-definition>
        <config-property name="IntegerProperty" type="java.lang.Integer">2</config-property>
        <config-property name="BooleanProperty" type="java.lang.Boolean">false</config-property>
        <config-property name="DoubleProperty" type="java.lang.Double">5.5</config-property>
        <config-property name="UrlProperty" type="java.net.URL">http://www.jboss.org</config-property>
        <config-property name="sleepInStart" type="long">200</config-property>
        <config-property name="sleepInStop" type="long">200</config-property>
      </tx-connection-factory>
    </connection-factories>
    Nachfolgend sehen Sie die Konfigurationsdatei, die durch Ausführung des Converter-Skripts generiert wurde. Ersetzen Sie den Wert des class-name Attributs "FIXME_MCF_CLASS_NAME" in der generierten XML durch den korrekten Klassennamen der gemanagten Connection-Factory, in diesem Fall "org.jboss.test.jca.adapter.TestManagedConnectionFactory". Hier ist die resultierende XML in der JBoss EAP 6 Konfigurationsdatei mit Änderungen am <class-name>-Elementwert:
    <subsystem xmlns="urn:jboss:domain:resource-adapters:1.1">
      <resource-adapters>
        <resource-adapter>
          <archive>jbosstestadapter.rar</archive>
          <transaction-support>XATransaction</transaction-support>
          <connection-definitions>
      <!-- Replace the "FIXME_MCF_CLASS_NAME" class-name value with the correct class name
      <connection-definition class-name="FIXME_MCF_CLASS_NAME" enabled="true"
        jndi-name="java:jboss/JBossTestCF" pool-name="JBossTestCF" 
        use-ccm="true" use-java-context="true"> -->
      <connection-definition 
        class-name="org.jboss.test.jca.adapter.TestManagedConnectionFactory" 
        enabled="true"
        jndi-name="java:jboss/JBossTestCF" pool-name="JBossTestCF" 
        use-ccm="true" use-java-context="true">
        <config-property name="IntegerProperty">2</config-property>
        <config-property name="sleepInStart">200</config-property>
        <config-property name="sleepInStop">200</config-property>
        <config-property name="BooleanProperty">false</config-property>
        <config-property name="UrlProperty">http://www.jboss.org</config-property>
        <config-property name="DoubleProperty">5.5</config-property>
        <pool>
          <prefill>false</prefill>
          <use-strict-min>false</use-strict-min>
          <flush-strategy>FailingConnectionOnly</flush-strategy>
        </pool>
        <security>
          <application/>
        </security>
        <timeout/>
        <validation>
          <background-validation>false</background-validation>
          <use-fast-fail>false</use-fast-fail>
        </validation>
      </connection-definition>
          </connection-definitions>
        </resource-adapter>
        <resource-adapter>
          <archive>jbosstestadapter.rar</archive>
          <transaction-support>XATransaction</transaction-support>
          <connection-definitions>
      <!-- Replace the "FIXME_MCF_CLASS_NAME" class-name value with the correct class name
       <connection-definition class-name="FIXME_MCF_CLASS_NAME" enabled="true"
        jndi-name="java:jboss/JBossTestCF2" pool-name="JBossTestCF2" 
        use-ccm="true" use-java-context="true"> -->
      <connection-definition 
        class-name="org.jboss.test.jca.adapter.TestManagedConnectionFactory" 
        enabled="true"
        jndi-name="java:jboss/JBossTestCF2" pool-name="JBossTestCF2" 
        use-ccm="true" use-java-context="true">
        <config-property name="IntegerProperty">2</config-property>
        <config-property name="sleepInStart">200</config-property>
        <config-property name="sleepInStop">200</config-property>
        <config-property name="BooleanProperty">false</config-property>
        <config-property name="UrlProperty">http://www.jboss.org</config-property>
        <config-property name="DoubleProperty">5.5</config-property>
        <pool>
          <prefill>false</prefill>
          <use-strict-min>false</use-strict-min>
          <flush-strategy>FailingConnectionOnly</flush-strategy>
        </pool>
        <security>
          <application/>
        </security>
        <timeout/>
        <validation>
          <background-validation>false</background-validation>
          <use-fast-fail>false</use-fast-fail>
        </validation>
      </connection-definition>
          </connection-definitions>
        </resource-adapter>
        <resource-adapter>
          <archive>jbosstestadapter.rar</archive>
          <transaction-support>XATransaction</transaction-support>
          <connection-definitions>
      <!-- Replace the "FIXME_MCF_CLASS_NAME" class-name value with the correct class name
      <connection-definition class-name="FIXME_MCF_CLASS_NAME" enabled="true"
         jndi-name="java:jboss/JBossTestCFByTx" pool-name="JBossTestCFByTx" 
         use-ccm="true" use-java-context="true"> -->
      <connection-definition 
        class-name="org.jboss.test.jca.adapter.TestManagedConnectionFactory" 
        enabled="true"
        jndi-name="java:jboss/JBossTestCFByTx" pool-name="JBossTestCFByTx" 
        use-ccm="true" use-java-context="true">
        <config-property name="IntegerProperty">2</config-property>
        <config-property name="sleepInStart">200</config-property>
        <config-property name="sleepInStop">200</config-property>
        <config-property name="BooleanProperty">false</config-property>
        <config-property name="UrlProperty">http://www.jboss.org</config-property>
        <config-property name="DoubleProperty">5.5</config-property>
        <pool>
          <prefill>false</prefill>
          <use-strict-min>false</use-strict-min>
          <flush-strategy>FailingConnectionOnly</flush-strategy>
        </pool>
        <security>
          <application/>
        </security>
        <timeout/>
        <validation>
          <background-validation>false</background-validation>
          <use-fast-fail>false</use-fast-fail>
        </validation>
      </connection-definition>
          </connection-definitions>
        </resource-adapter>
      </resource-adapters>
    </subsystem>