ASpengler
I'm new here

Authentification Exceptions

Jump to solution

Hallo zusammen,

ich arbeite momentan aneiner Executable Class unter FS 4.2, die über die Datensätze einer Tabellen iterieren soll, und in jedem Datensatz  in einer FS-List einen Eintrag hinterlassen soll. Das ganze wird über den Scheduler (Script-Task) gestartet.

Zunächst habe ich versucht, die Connection aus dem Context-Ojbect zu holen, gerate dann aber beim ersten Versuch einen Datensatz zu locken in eine Security-Exception (changes not allowed for current connection). Auch die Angabe einer eigenen Verbindung in den Skript-Task-Eigenschaften führt zu diesem Ergebnis.

Deswegen verbindet sich das Modul aktuell mittels  getConnection(...) und einem technischen Nutzer mit dem Serrver.

Connection connection = ConnectionManager.getConnection(host,8000,ConnectionManager.HTTP_MODE, "user", "pw");

connection.connect();

Das funktioniert auch eine Weile (ca. 20min?) gut, irgendwann bekomme ich jedoch dann immer eine unexpected authentication exception und einen Abbruch des Auftrages. Meine Vermutung ist, dass die "Session" des technischen Benutzers abäuft, die Frage ist nur, kann ich das (modulseitig) verhindern, ohne in jeder Iteration die Connection verbinden und wieder trennen zu müssen?

Danke und Grüße

Andreas

0 Kudos
1 Solution

Accepted Solutions

Mittlerweile konnte ich das Problem lösen: die Art und Weise die eigene Verbindung aus dem Skript-Auftrag zu holen, war nicht korrekt. Mit connection = (Connection) map.get("connection"); bekomme ich die richtige Connection die auch nicht nach 20min aussteigt.

View solution in original post

0 Kudos
10 Replies
Peter_Jodeleit
Crownpeak employee

Auch die Angabe einer eigenen Verbindung in den Skript-Task-Eigenschaften führt zu diesem Ergebnis.

Das sollte aber nicht so sein.

Deswegen verbindet sich das Modul aktuell mittels  getConnection(...) und einem technischen Nutzer mit dem Serrver.

[..]

Das funktioniert auch eine Weile (ca. 20min?) gut, irgendwann bekomme ich jedoch dann immer eine unexpected authentication exception und einen Abbruch des Auftrages.

Poste doch mal die Exception hier.

Peter
0 Kudos

Das sollte aber nicht so sein.

Eventuell hole ich mir die Connection falsch? Ich verwende ich getConnection() ohne Parameter auf dem SchedulerContext.

Poste doch mal die Exception hier.

INFO  26.05.2015 13:03:18.227 (de.espirit.firstspirit.server.sessionmanagement.SessionManagerImpl): new session (ID=2929856222415414847, user=pim, userID=237345, type=CHILD) created

ERROR 26.05.2015 13:03:18.228 (de.espirit.firstspirit.server.scheduler.ScriptTaskExecutor): error during script execution : de.espirit.firstspirit.access.AccessRuntimeException: unexpected authentication exception!

de.espirit.firstspirit.access.AccessRuntimeException: unexpected authentication exception!

    at de.espirit.firstspirit.server.io.ServerConnectionImpl.createUserService(ServerConnectionImpl.java:171)

    at de.espirit.firstspirit.server.io.ServerConnectionImpl.access$000(ServerConnectionImpl.java:48)

    at de.espirit.firstspirit.server.io.ServerConnectionImpl$1.invoke(ServerConnectionImpl.java:96)

    at de.espirit.firstspirit.server.io.ServerConnectionImpl$1.invoke(ServerConnectionImpl.java:95)

    at de.espirit.common.util.CachingFactory$ValueCreationStrategy$1.get(CachingFactory.java:45)

    at de.espirit.common.util.CachingFactory.get(CachingFactory.java:223)

    at de.espirit.firstspirit.server.io.ServerConnectionImpl.getUserService(ServerConnectionImpl.java:147)

    at de.espirit.firstspirit.server.io.ServerConnectionImpl.getUserService(ServerConnectionImpl.java:136)

    at de.espirit.firstspirit.server.io.ServerConnectionImpl.getUserService(ServerConnectionImpl.java:48)

    at de.espirit.firstspirit.server.projectmanagement.ProjectImpl.getUserService(ProjectImpl.java:2121)

    at de.espirit.firstspirit.client.UserServiceImpl.getRemoteUserService(UserServiceImpl.java:676)

    at de.espirit.firstspirit.agency.UserServiceDelegatingSpecialistsBroker$BrokerAgentImpl.getBroker(UserServiceDelegatingSpecialistsBroker.java:154)

    at de.espirit.firstspirit.client.access.editor.ReferenceEditorValueImpl.parseValue(ReferenceEditorValueImpl.java:177)

    at de.espirit.firstspirit.client.access.editor.ReferenceEditorValueImpl.parseValue(ReferenceEditorValueImpl.java:105)

    at de.espirit.firstspirit.client.access.editor.ReferenceEditorValueImpl.parseValue(ReferenceEditorValueImpl.java:61)

    at de.espirit.firstspirit.client.access.editor.AbstractEditorValue.parseDataElement(AbstractEditorValue.java:424)

    at de.espirit.firstspirit.client.access.editor.AbstractEditorValue.assimilate(AbstractEditorValue.java:777)

    at de.espirit.firstspirit.store.access.contentstore.ContentUtil$1.get(ContentUtil.java:151)

    at de.espirit.firstspirit.store.access.DataUtil.copy(DataUtil.java:123)

    at de.espirit.firstspirit.store.access.DataUtil.injectFormData(DataUtil.java:41)

    at de.espirit.firstspirit.store.access.contentstore.DatasetImpl.setFormData(DatasetImpl.java:197)

    at de.adesso.bosch.pt.fsmodule.automation.AddToProductExecutable.addTeaser(AddToProductExecutable.java:115)

    at de.adesso.bosch.pt.fsmodule.automation.AddToProductExecutable.execute(AddToProductExecutable.java:55)

    at de.espirit.firstspirit.common.ScriptUtil.execute(ScriptUtil.java:97)

    at de.espirit.firstspirit.server.scheduler.ScriptTaskExecutor.run(ScriptTaskExecutor.java:119)

    at de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl$TaskCallable.executeLocal(ScheduleManagerImpl.java:2062)

    at de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl$TaskCallable.executeLocal(ScheduleManagerImpl.java:2045)

    at de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl$TaskCallable.call(ScheduleManagerImpl.java:1973)

    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 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)

    at java.lang.Thread.run(Thread.java:662)

    at de.espirit.common.util.SuspendableThread.run(SuspendableThread.java:36)

Caused by: java.lang.IllegalArgumentException: Parent session (id=7244416222538068344) not found!

    at de.espirit.firstspirit.server.sessionmanagement.SessionManagerImpl.linkSessions(SessionManagerImpl.java:724)

    at de.espirit.firstspirit.client.io.ProjectConnection.connect(ProjectConnection.java:58)

    at de.espirit.firstspirit.server.io.ServerConnectionImpl.createUserService(ServerConnectionImpl.java:169)

    ... 38 more

INFO  26.05.2015 13:03:18.228 (de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl): finished task 'AddTeaser' - schedule entry 'AddTeaserTest' (id=5736309)

0 Kudos

Durchläuft der Code eine Schleife? Wenn ja, kannst du da testweise ein "connection.ping()" einfügen?
Ursache ist wohl, das hier eine Session weggeräumt wurde:

Parent session (id=7244416222538068344) not found!

Die von dir erwähnten 20 Minuten hören sich so an, als hätte hier ein autmatischer Timeout zugeschlagen, was eigentlich nicht passieren darf.

Das ist die Connection aus dem SchedulerContext mit dem technischem Nutzer?

Peter
0 Kudos

Hallo,

das mit dem Connection.ping() teste ich aus und gebe Rückmeldung.

Die Connection ist die zum oben gezeigtem Stack passt, ist die "manuelle" Verbindung mit technischem User. Bei der Connection aus dem Context mit technischem Benutzer komme ich wie gesagt garnicht so weit. (changes not allowed for current connection)

0 Kudos

Laut API gibt es keine ping()-Methode für die Connection-Klasse. Meintest du was anderes?

0 Kudos

Laut API gibt es keine ping()-Methode für die Connection-Klasse. Meintest du was anderes?

Stimmt, mein Fehler.

Kannst du noch mal den Weg über den technischen Benutzer testen? Und das Code-Fragment posten, wie du dir die Connection aus dem Kontext holst?

Peter
0 Kudos

Ich habs nochmal umgestellt mit selben Ergebnis (wie zuvor):

Scriptaufruf:

script_eintrag_feld.PNG

Code für die connection:


Connection connection = context.getConnection();

Fehlermeldung:

ERROR 01.06.2015 15:54:25.609 (de.espirit.firstspirit.server.scheduler.ScriptTaskExecutor): error during script execution : java.lang.SecurityException: changes not allowed for current connection

java.lang.SecurityException: changes not allowed for current connection

    at de.espirit.firstspirit.server.scheduler.RestrictedTaskSecurityManager.checkAccess(RestrictedTaskSecurityManager.java:28)

    at de.espirit.firstspirit.store.access.AbstractStoreElement.checkAccess(AbstractStoreElement.java:1599)

    at de.espirit.firstspirit.store.access.contentstore.Content2Impl.lock(Content2Impl.java:287)

    at de.espirit.firstspirit.store.access.contentstore.DatasetImpl.setLock(DatasetImpl.java:974)

    at de.espirit.firstspirit.store.access.contentstore.DatasetImpl.setLock(DatasetImpl.java:983)

    at de.adesso.bosch.pt.fsmodule.automation.AddToProductExecutable.addTeaser(AddToProductExecutable.java:115)

    at de.adesso.bosch.pt.fsmodule.automation.AddToProductExecutable.execute(AddToProductExecutable.java:55)

    at de.espirit.firstspirit.common.ScriptUtil.execute(ScriptUtil.java:97)

    at de.espirit.firstspirit.server.scheduler.ScriptTaskExecutor.run(ScriptTaskExecutor.java:119)

    at de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl$TaskCallable.executeLocal(ScheduleManagerImpl.java:2062)

    at de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl$TaskCallable.executeLocal(ScheduleManagerImpl.java:2045)

    at de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl$TaskCallable.call(ScheduleManagerImpl.java:1973)

    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 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)

    at java.lang.Thread.run(Thread.java:662)

    at de.espirit.common.util.SuspendableThread.run(SuspendableThread.java:36)

INFO  01.06.2015 15:54:25.609 (de.espirit.firstspirit.server.sessionmanagement.SessionManagerImpl): Session terminated (ID=1277186608780062882, user=pim (pim)(dummy)), number of sessions now 31

Es wird ja scheinbar auch der angebene technische Benutzer (pim) verwendet, denn den Auftrag starte ich als Admin. pim ist in der Gruppe der Projektadministratoren.

0 Kudos

Das Element, welches da gesperrt wird ("AddToProductExecutable.java:115"), kommt das auch über diese Connection?

Peter
0 Kudos

Ja, ich hole mir aus der connection den UserService und ab da immer weiter. Ich hab den Weg zum Lock mal unten skizziert:

UserService us = connection.getProjectById(context.getProject().getId()).getUserService();

ContentStoreRoot contentStoreRoot = (ContentStoreRoot) us.getStore(Store.Type.CONTENTSTORE, false);

Content2 products = contentStoreRoot.getContent2ByName("products_table");

List<? extends Entity> productsList = products.getData();

for (Entity product : productsList) {

     Dataset productDataSet = products.getDataset(product);

     ...

     productDataSet.setLock(true, false);

     ...

    }

0 Kudos