Search the FirstSpirit Knowledge Base
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)
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
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
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
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