Questions & Answers

SOLVED
arkaetsc
I'm new here

Service, NoClassDefFoundError

Jump to solution

Hallo zusammen,

ich schreibe gerade an einem Service der mir Daten aus einer Datenbank zurรผckliefern soll. Den Service selbst hab ich in FirstSpirit zum laufen bekommen, liefert mir aktuell auch schon fleiรŸig Log-Ausgaben. Wenn ich jetzt allerdings versuche in meinem Service Klassen zu verwenden die aus einem jar stammen das am FirstSpirit Server abgelegt wurde, bekomme ich im SiteArchitect folgenden Fehler:

de/meinelib/basis/IdException

FSVersion=5.1.410.67084#3587;JDK=1.8.0_51 32bit Oracle Corporation;OS=Windows 7 6.1 x86;Date=20.08.2015 18:43:51

java.lang.NoClassDefFoundError: de/meinelib/basis/IdException

at java.lang.Class.getDeclaredMethods0(Native Method)

at java.lang.Class.privateGetDeclaredMethods(Unknown Source)

at java.lang.Class.privateGetPublicMethods(Unknown Source)

at java.lang.Class.getMethods(Unknown Source)

at sun.misc.ProxyGenerator.generateClassFile(Unknown Source)

at sun.misc.ProxyGenerator.generateProxyClass(Unknown Source)

at java.lang.reflect.Proxy$ProxyClassFactory.apply(Unknown Source)

at java.lang.reflect.Proxy$ProxyClassFactory.apply(Unknown Source)

at java.lang.reflect.WeakCache$Factory.get(Unknown Source)

Ich benutze die Klassen aus dem jar bereits an anderer Stelle in FS, wo sie auch funktioniert, aber irgendwie kann mein Service sie nicht finden.

 

Im Service:
import de.meinelib.basis.IdException


module.xml:
<library>
<ame>Tests</name>
<description>Test Module Library</description>
<resources>
<resource>lib/test.jar</resource>
< /resources>
</library>
<service>
<name>DbService</name>
  <description>Liefert Datenbankinhalte aus.</description>
<class>de.test.service.DbServiceImpl</class>
</service>
  ...

Hat jemand eine Idee woran das liegen kรถnnte?

Ich habe hier FS 5.1 im Einsatz, falls das relevant ist.

Viele GrรผรŸe

Alex

0 Kudos
1 Solution

Accepted Solutions

Hallo zusammen,

war ein doofer Fehler.

Die Klasse ist am Server im java.class.path hinterlegt, dadurch kann ich sie auch am Server verwenden. Ich hatte die Klasse in einem ServiceProxy verwendet, der ja am Client ausgefรผhrt wird, wo die Klasse natรผrlich nicht verfรผgbar ist.

Die Lรถsung war also relativ einfach, die Klasse aus dem ServiceProxy in den ServiceImpl verschieben.

Ein schรถnes Wochenende

Alex

View solution in original post

0 Kudos
4 Replies
bIT_sosswald
Returning Responder

Hallo Alex,

hast du es schonmal mit der Angabe eines Scopes in der module.xml versucht? Die Komponente mit den Klassen, die du verwenden mรถchtest, den Scope "public" zu geben kรถnnte evtl. schon Abhilfe schaffen. (Siehe "2.5.1.2 Gรผltigkeitsbereich" in der Doku fรผr Komponenten-Entwickler)


Ich glaube mich daran erinnern zu kรถnnen, dass ich ohne bzw. mit falschem Scope einmal รคhnliche Probleme hatte.

Hier ein Beispiel einer meiner module.xml Files.

<module>

    <name>bridgingIT - ${project.parent.artifactId}</name>

    <version>${fs.version}_${project.version}</version>

    <description></description>

    <vendor>BridgingIT GmbH</vendor>

    <components>

        <!-- Add FirstSpirit components and their configurations -->

        <service>

            <name>${project.parent.artifactId} - name service</name>

            <description>Service</description>

            <class>de.bit.fs5.name.NameService/class>

            <resources>

                <resource name="Name - service" scope="server">lib/name-service-${project.version}.jar</resource>

            </resources>

        </service>

        <public>

            <name>${project.parent.artifactId} - executable</name>

            <description>Executable to start the process</description>

            <class>de.bit.fs5.name.NameExecutable</class>

        </public>

        <library>

            <name>${project.parent.artifactId} - dependencies</name>

            <description>Contains all dependencies that are needed by other

                components of this module.</description>

            <resources>

                <resource name="Name - dependencies" scope="server">lib/name-dependencies-${project.version}.jar</resource>

            </resources>

        </library>

    </components>

</module>

Evtl. hilft dir das ja schon weiter.

Beste GrรผรŸe

Sandro

0 Kudos

Hi Sandro,

danke fรผr den Tipp. Soweit ich das sehen kann haben library und service sowieso standardmรครŸig den scrope server. Habs trotzdem mal gesetzt, leider ohne Erfolg.

Das jar das ich versuche zu benutzen liegt aber nicht mit in meinem test.jar, sondern zentral am Server - wurde da hรคndisch abgelegt. Das jar wurde hier abgelegt: /opt/web/shared/test/meinelib.jar

Aus irgendeinem Grund findet der Service aber die Klasse nicht. Wird beim Service ein anderer ClassLoader benutzt als z. B. bei Executables oder anderen Java-Klassen die in FS aufgerufen werden?

Caused by: java.lang.ClassNotFoundException: de.meinelib.basis.IdException

     at java.net.URLClassLoader.findClass(Unknown Source)

     ....

Viele GrรผรŸe

Alex

0 Kudos

Der Pfad ist nicht der Standard-Lib-Pfad des FirstSpirit-Servers. Wieso meinst du, das der von FirstSpirit aus sichtbar ist?

Z.B. รผber jconsole oder VisualVM kannst du dir den effektiven Klassenpfad des Server anschauen.

Peter

Hallo zusammen,

war ein doofer Fehler.

Die Klasse ist am Server im java.class.path hinterlegt, dadurch kann ich sie auch am Server verwenden. Ich hatte die Klasse in einem ServiceProxy verwendet, der ja am Client ausgefรผhrt wird, wo die Klasse natรผrlich nicht verfรผgbar ist.

Die Lรถsung war also relativ einfach, die Klasse aus dem ServiceProxy in den ServiceImpl verschieben.

Ein schรถnes Wochenende

Alex

0 Kudos

Type a product name