Questions & Answers

SOLVED
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

Type a product name