bit_mbrandt
I'm new here

Fehler bei der Installation eines DB-Treibers als Modul

Jump to solution

Hallo,

ich habe versucht auf unserem Server, wie in der Doku beschrieben, einen mySQL Datenbanktreiber als Modul zu installieren.

Ich erstelle das Modul (exemplarisch auch im Anhang) mit folgender module.xml:

<module>

    <name>mySQL_JDBC_Driver_for_mySQL_5_5</name>

    <version>5.1.20</version>

    <description>JDBC Driver for mySQL 5.5 databases</description>

    <vendor>mySQL</vendor>

   

    <components>

        <public>

            <name>mySQL_JDBC_Driver_5_1_20_Server</name>

            <description>Provides the JDBC Driver for the FirstSpirit server</description>

            <class>com.mysql.jdbc.Driver</class>

            <resources>

                <resource scope="module">lib/mysql-connector-java-5.1.20-bin.jar</resource>

            </resources>

        </public>

        <web-app>

            <name>mySQL_JDBC_Driver_5_1_20_WebApp</name>

            <description>Provides the JDBC Driver for Web applications.</description>

            <web-xml>web.xml</web-xml>

            <web-resources>

                <resource name="mysql" version="5.1.18" minVersion="5.1.999" maxVersion="5.1.20">lib/mysql-connector-java-5.1.20-bin.jar</resource>

            </web-resources>

        </web-app>

    </components>

    <configuration>

        <layerclass>de.espirit.or.impl.mysql.MySQLLayer</layerclass>

        <DRIVER>com.mysql.jdbc.Driver</DRIVER>

    </configuration>

</module>

Dazu kommt eine web.xml, damit auch Webanwendungen des Projekts auf mySQL zugreifen können:

<?xml version="1.0" encoding="UTF-8"?>

<web-app id="mySQL_JDBC_Driver_for_mySQL_5_5" version="2.4"

xmlns="http://java.sun.com/xml/ns/j2ee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"/>

Beim Installieren der fsm-Datei in der Serverkonfiguration bekomme ich die Fehlermeldung:

Client Version: 4.2.468.50982

Java Version: 1.7.0_05 Oracle Corporation

FSVersion=4.2.468.50982#2149;JDK=1.7.0_05 32bit Oracle Corporation;OS=Windows 7 6.1 x86;Date=27.07.2012 13:45:22

de.espirit.common.xml.ParsingError: expected 'eof'

    at de.espirit.common.xml.SimpleXmlParser.readNode(SimpleXmlParser.java:305)

    at de.espirit.common.xml.SimpleXmlParser._readToken(SimpleXmlParser.java:167)

    at de.espirit.common.xml.SimpleXmlParser.readToken(SimpleXmlParser.java:156)

    at de.espirit.common.xml.XmlUtilities.parse(XmlUtilities.java:391)

    at de.espirit.common.xml.XmlUtilities.nparse(XmlUtilities.java:322)

    at de.espirit.common.xml.XmlUtilities.nparse(XmlUtilities.java:307)

    at de.espirit.firstspirit.module.descriptor.ModuleDescriptor.create(ModuleDescriptor.java:55)

    at de.espirit.firstspirit.server.module.ModuleManagerProxy$ClientModuleManager.checkModuleVersion(ModuleManagerProxy.java:218)

    at de.espirit.firstspirit.admin.gui.ModuleConfigurationPanel$1.run(ModuleConfigurationPanel.java:301)

    at java.lang.Thread.run(Unknown Source)

Leider sehe ich nicht, woher die Exception geworfen wird. Für mich sehen die beiden XML-Dateien korrekt aus.

Was mache ich falsch?

Danke und Grüße,

Martin Brandt

0 Kudos
1 Solution

Accepted Solutions

Hallo Herr Stephan,

vielen Dank für das Beispiel. Es hat mich auf die Lösung gebracht:

Die module.xml muss als "UTF-8 ohne BOM" kodiert sein. Meine module.xml war mit BOM und dies war die Ursache des Fehlers.

Vielen Dank und Grüße,

Martin Brandt

View solution in original post

0 Kudos
6 Replies
stephan
I'm new here

Hallo Herr Brandt,

das Datenbank-Treiber-Modul kann mal als Bibliothek-Modul-Komponente oder als komponentenloses Modul umsetzen. Eine Umsetzung als Public-Komponente wie in ihrem Fall dürfte daher nicht funktionieren.

Sie sollten also entweder den Typ von "public" auf "library" ändern, oder die Modul-Ressource außerhalb des

<components>-Elements im Modul-Descriptor definieren (vgl. Modulentwickler Handbuch Kapitel 3.12/13).

Um das Modul in den Layer-Eigenschaften der entsprechende Datenbank zu nutzen ist es später außerdem wichtig dort den Eintrag "module=modulname" vorzunehmen.

Viele Grüße

Jörg Stephan

0 Kudos

Hallo Herr Stephan,

vielen Dank für die Antwort. Ich habe Ihren Vorschlag ausprobiert, bekomme aber nach wie vor denselben Fehler.

Die Moduldefinition ist exakt so, wie sie in der Admin-Dokumentation im Abschnitt 4.8.2 beschrieben ist. Auch in der Admin-Dokumentation ist das Modul als "public" deklariert.

Ist die Admin-Doku an der Stelle falsch?

Viele Grüße,

Martin Brandt

0 Kudos

Hallo Herr Brandt,

da scheint noch ein Fehler in ihrer module.xml zu sein.

Wenn man die Modul-Ressource außerhalb des <components>-Elements zieht, funktioniert es hier:

<?xml version="1.0" encoding="UTF-8"?>

<module>

          <name>mySQL_JDBC_Driver_for_mySQL_5_5</name>

          <version>5.1.20</version>

          <description>JDBC Driver for mySQL 5.5 databases</description>

          <vendor>mySQL</vendor>

 

          <resources>

                    <resource scope="module">lib/mysql-connector-java-5.1.20-bin.jar</resource>

          </resources>

          <components>

                    <web-app>

                              <name>mySQL_JDBC_Driver_5_1_20_WebApp</name>

                              <description>Provides the JDBC Driver for Web applications.</description>

                              <web-xml>web.xml</web-xml>

                              <web-resources>

                                        <resource name="mysql" version="5.1.18" minVersion="5.1.999" maxVersion="5.1.20">lib/mysql-

connector-java-5.1.20-bin.jar</resource>

                              </web-resources>

                    </web-app>

          </components>

          <configuration>

                    <layerclass>de.espirit.or.impl.mysql.MySQLLayer</layerclass>

                    <DRIVER>com.mysql.jdbc.Driver</DRIVER>

          </configuration>

</module>

Viele Grüße

Jörg Stephan

0 Kudos

Hallo Herr Stephan,

vielen Dank für Ihren Tip. Ich habe die module.xml entsprechend Ihrer Version angepasst und auch Ihre Version 1:1 übernommen.

Ich bekomme nun wieder die IOException 'Expected eof':

Client Version: 4.2.468.50982

Java Version: 1.7.0_05 Oracle Corporation

FSVersion=4.2.468.50982#2149;JDK=1.7.0_05 32bit Oracle Corporation;OS=Windows 7 6.1 x86;Date=31.07.2012 10:54:58

java.io.IOException: Parsing error: de.espirit.common.xml.ParsingError: expected 'eof'

    at de.espirit.firstspirit.server.module.ModuleInfo.loadDescriptor(ModuleInfo.java:127)

    at de.espirit.firstspirit.server.module.ModuleInfo.<init>(ModuleInfo.java:58)

    at de.espirit.firstspirit.server.module.ModuleInfo.<init>(ModuleInfo.java:46)

    at de.espirit.firstspirit.server.module.ModuleManagerImpl.install(ModuleManagerImpl.java:528)

    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

    at java.lang.reflect.Method.invoke(Method.java:597)

    at de.espirit.firstspirit.io.DefaultServerHandler.callManager(DefaultServerHandler.java:62)

    at de.espirit.firstspirit.server.io.handler.ManagerCall.doCall(ManagerCall.java:91)

    at de.espirit.firstspirit.server.io.handler.CompactCall.handle(CompactCall.java:67)

    at de.espirit.firstspirit.server.io.ManagerCallWorker.run(ManagerCallWorker.java:108)

    at de.espirit.firstspirit.server.ExecutionManagerImpl$RunnableWrapper.call(ExecutionManagerImpl.java:553)

    at de.espirit.firstspirit.server.ExecutionManagerImpl$ExtendedCallable.call(ExecutionManagerImpl.java:520)

    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)

    at java.util.concurrent.FutureTask.run(FutureTask.java:138)

    at de.espirit.common.util.BoundedExecutorService$RunnableWrapper.run(BoundedExecutorService.java:419)

    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)

    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)

    at java.util.concurrent.FutureTask.run(FutureTask.java:138)

    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)

    at de.espirit.firstspirit.client.io.ServerCaller.callManager(ServerCaller.java:372)

    at de.espirit.firstspirit.io.DefaultClientHandler.callManager(DefaultClientHandler.java:49)

    at de.espirit.firstspirit.client.io.RemoteManagerCaller.invoke(RemoteManagerCaller.java:52)

    at $Proxy8.install(Unknown Source)

    at de.espirit.firstspirit.server.module.ModuleManagerProxy$ClientModuleManager.install(ModuleManagerProxy.java:254)

    at de.espirit.firstspirit.admin.gui.ModuleConfigurationPanel$1.run(ModuleConfigurationPanel.java:316)

Kann die Exception noch eine andere Ursache haben?

Viele Grüße,

Martin Brandt

0 Kudos

Hallo Herr Brandt,

die Ursache sollte laut Fehlermeldung schon das XML-File sein. Ich habe einmal mein Modul angehängt, probieren sie bitte einmal aus ob es läuft - ggf. finden sie bei einem Vergleich mit ihrer Version noch einen Unterschied.

Viele Grüße

Jörg Stephan

Hallo Herr Stephan,

vielen Dank für das Beispiel. Es hat mich auf die Lösung gebracht:

Die module.xml muss als "UTF-8 ohne BOM" kodiert sein. Meine module.xml war mit BOM und dies war die Ursache des Fehlers.

Vielen Dank und Grüße,

Martin Brandt

0 Kudos