phillip_austerf
New Creator

Service Modul manchmal nicht erreichbar - Incompatible Class Loaders?

Jump to solution

Hallo zusammen,

ich habe ein Problem, welches mich vor ein Rätsel stellt:

Ich habe ein Service Modul geschrieben, welches auf dem FirstSpirit 5.1 Server läuft (und auch aktiv ist).

Innerhalb dieses Moduls habe ich zudem eine Option List Komponente implementiert vom Typ

GomIncludeValueProvider<Option>

welches in einem Formular auf einer Seite verwendet wird (Hier im Beispiel Seite "X"), sowie ein paar Library Klassen.

Das Szenario läuft wie folgt ab:

Ein Scheduled Task ruft eine Klasse auf, die dann folgendes macht:

- FormData der Seite "X" holen

- Optionsliste mit eigener GomIncludeValueProvider Implementierung öffnen und den ausgewählten Wert ermitteln.

- Weiter verarbeiten mit ermitteltem Wert.

Die Implementierung:

public class MyList implements GomIncludeValueProvider<Option>

    private static final List<Option> list = new ArrayList<>();

   

    @Override

    public Class<Option> getType()

    {

        return Option.class;

    }

   

    private boolean requireNewProjectList()

    {

        synchronized (list)

        {

            return list.isEmpty();

        }

    }

    

    @Override

    public List<Option> getValues(SpecialistsBroker sb)

    {

        if (requireNewProjectList())

        {

            final MyService pService = getMyService(sb);

            updateList ( pService.getTranslationProjects() );

        }

        synchronized (list)

        {

            return list;

        }

    }

    public static void updateList(List<TranslationProject> vpList)

    {

        if (vpList == null || vpList.isEmpty())

        {

            Logging.logError("given project list is empty.", TMSProjectList.class);

            return;

        }

       

        synchronized(list)

        {

            list.clear();

            for (MyProject _project : vpList)

                list.add( createOption(_project) );

        }

    }

    private static MyService getMyService(SpecialistsBroker sb)

    {

        MyService pService;

       

        try

        {

            final ServicesBroker servicesBroker = sb.requireSpecialist(ServicesBroker.TYPE);

            pService = servicesBroker != null ? servicesBroker.getService(MyService.class) : null;

           

            if (pService == null && servicesBroker != null)

                Logging.logError("cannot obtain service from broker", MyService.class);

        }

        catch(Exception ex)

        {

            Logging.logError("Could not get MyService due to invalid broker or connection: " + ex.getMessage(), getClass().getName());

            pService = null;

        } 

  

        return pService;

    }

}

Das Problem:

Sobald das Formular Element geladen wird wird natürlich auch versucht, den Wert der Eingabekomponente zu ermitteln, somit wird also mittels

MyList.getValues();

alle Werte aus meiner Liste

MyList.list

geladen.

Es kommt nun alle 7 Jahre dazu, dass die Liste leer ist, obwohl sie im System eigentlich befüllt ist. Da die Liste leer ist würde versucht werden, die Liste neu zu befüllen und die Werte werden von MyService abgefragt.

Das Problem ist nun, dass MyService nicht gefunden werden kann!

Der Stracktrace ist wie folgt:

WARN  19.03.2015 18:06:09.938 (de.espirit.firstspirit.server.io.AbstractServiceLocator): incompatible class loaders? de.espirit.firstspirit.server.module.ExtendedUrlClassLoader@9bcc4c-300 / de.espirit.firstspirit.server.module.ExtendedUrlClassLoader@1d2d7c9-122

ERROR 19.03.2015 18:06:09.954 (com.idmedia.fts.fs.service.module.FirstTranslationService): Could not get MyService due to invalid broker or connection: Cannot cast com.sun.proxy.$Proxy7 to com.idmedia.fts.fs.service.module.MyService

java.lang.ClassCastException: Cannot cast com.sun.proxy.$Proxy7 to com.idmedia.fts.fs.service.module.MyService

    at java.lang.Class.cast(Class.java:3133)

    at de.espirit.firstspirit.server.io.AbstractServiceLocator.getService(AbstractServiceLocator.java:96)

    at de.espirit.firstspirit.server.io.AbstractServerConnection.getService(AbstractServerConnection.java:567)

    at de.espirit.firstspirit.client.io.ProjectConnection.getService(ProjectConnection.java:101)

    at de.espirit.firstspirit.agency.ServicesBrokerImpl.getService(ServicesBrokerImpl.java:26)

0 Kudos
1 Solution

Accepted Solutions
bIT_sosswald
Returning Responder

Hallo Phillip,

der StackTrace des Fehlers sieht für mich stark nach einem bekannten "Verhalten" (IMHO eher Fehler) von FirstSpirit aus.

Kann es sein, dass zwischen der Installation deines Moduls bzw. zwischen dem letzten Start des Services deines Moduls (Serverstart oder manueller Start deines Services) ein ANDERES Modul mit Service installiert wurde?

Bei mir tritt diese Exception immer dann auf, wenn ein anderes Modul installiert wurde. Abhilfte schafft ein Neustart aller Services auf dem Server, nachdem ein Modul mit Service installiert wurde.

Siehe dazu auch andere Beiträge in der Community wie z.B.: https://community.e-spirit.com/message/22502#22502

Grüße

Sandro

View solution in original post

0 Kudos
3 Replies
bIT_sosswald
Returning Responder

Hallo Phillip,

der StackTrace des Fehlers sieht für mich stark nach einem bekannten "Verhalten" (IMHO eher Fehler) von FirstSpirit aus.

Kann es sein, dass zwischen der Installation deines Moduls bzw. zwischen dem letzten Start des Services deines Moduls (Serverstart oder manueller Start deines Services) ein ANDERES Modul mit Service installiert wurde?

Bei mir tritt diese Exception immer dann auf, wenn ein anderes Modul installiert wurde. Abhilfte schafft ein Neustart aller Services auf dem Server, nachdem ein Modul mit Service installiert wurde.

Siehe dazu auch andere Beiträge in der Community wie z.B.: https://community.e-spirit.com/message/22502#22502

Grüße

Sandro

0 Kudos

Hallo,

wie Sandro richtig geschrieben hat, müssen alle Services neu gestartet werden, sobald ein Modul mit einem Service installiert bzw. aktualisiert wurde.

Im Kapitel Module der Dokumentation für Administratoren ist dieses Verhalten beschrieben.

Viele Grüße

Thorsten

0 Kudos
marza
I'm new here

Hallo Phillip,

benötigst Du noch weitere Hilfe oder haben Dir die Antworten von Sandro und Thorsten bereits geholfen?

In diesem Fall wäre es super, wenn Du die "richtige Antwort" entsprechend markierst, damit auch andere Community-Teilnehmer diese auf den ersten Blick finden. Solltest Du zwischenzeitlich eine eigene Lösung gefunden haben, wäre es nett, wenn Du diese hier bereitstellst.

Viele Grüße

Marian

0 Kudos