Why Resilience4j circuit breaker does not spin up new threads - resilience4j

I am trying to migrate from Hystrix to Resilience4j and tried the option of configuring resilience4j using annotations (https://resilience4j.readme.io/docs/getting-started-3) which is using resilience4j-spring-boot2 dependency.
When I test using this and analyse the logs, even the method which is decorated with #CircuitBreaker is running in the same http-nio thread:
logs with CircuitBreaker annotation:
2020-01-10 10:31:15,996 [http-nio-8080-exec-1] INFO APP=test-app | ENV=LOCAL | REQUEST_ID=1 | TRACE_ID=eb88d5c53ab97a40 | SPAN_ID=eb88d5c53ab97a40 | CLIENT_ID=1 | CLIENT_VERSION=1 | a.c.s.i.m.p.dependent.DependentApi - Request: http://example.api.com/api/customers/John
2020-01-10 10:31:15,997 [http-nio-8080-exec-1] DEBUG APP=test-app | ENV=LOCAL | REQUEST_ID=1 | TRACE_ID=eb88d5c53ab97a40 | SPAN_ID=eb88d5c53ab97a40 | CLIENT_ID=1 | CLIENT_VERSION=1 | a.c.s.i.myservice.aop.LogingAspect - Enter: au.com.suncorp.insurance.myservice.config.DependentApiRestOperation.getRestOperations() with argument[s] = []
2020-01-10 10:31:15,999 [http-nio-8080-exec-1] DEBUG APP=test-app | ENV=LOCAL | REQUEST_ID=1 | TRACE_ID=eb88d5c53ab97a40 | SPAN_ID=eb88d5c53ab97a40 | CLIENT_ID=1 | CLIENT_VERSION=1 | a.c.s.i.myservice.aop.LoggingAspect - Exit: au.com.suncorp.insurance.myservice.config.DependentApiRestOperation.getRestOperations() with result = org.springframework.web.client.RestTemplate#1f3111d1
2020-01-10 10:31:16,065 [http-nio-8080-exec-1] ERROR APP=test-app | ENV=LOCAL | REQUEST_ID=1 | TRACE_ID=eb88d5c53ab97a40 | SPAN_ID=eb88d5c53ab97a40 | CLIENT_ID=1 | CLIENT_VERSION=1 | a.c.s.i.myservice.aop.LoggingAspect
On the contrary when I create a CircuitBreaker from CircuitBreakerFactory in that case I can see new circuit breaker threads spinning up when the control in inside the method protected by circuit breaker.
Logs with CircuitBreakerFactory:
2020-01-10 10:50:04,178 [hystrix-HystrixCircuitBreakerFactory-1] DEBUG APP=test-app | ENV=LOCAL | REQUEST_ID= | TRACE_ID=bde6e74d65833730 | SPAN_ID=d5dc68689645201a | CLIENT_ID= | CLIENT_VERSION= | a.c.s.i.myservice.aop.LoggingAspect - Enter: au.com.suncorp.insurance.myservice.config.properties.DependentApiProperties.getAddress() with argument[s] = []
2020-01-10 10:50:04,178 [hystrix-HystrixCircuitBreakerFactory-1] DEBUG APP=test-app | ENV=LOCAL | REQUEST_ID= | TRACE_ID=bde6e74d65833730 | SPAN_ID=d5dc68689645201a | CLIENT_ID= | CLIENT_VERSION= | a.c.s.i.myservice.aop.LoggingAspect - Exit: au.com.suncorp.insurance.myservice.config.properties.DependentApiProperties.getAddress() with result = au.com.suncorp.insurance.myservice.config.properties.DependentApiProperties$Address#1928e7f3
2020-01-10 10:50:04,179 [hystrix-HystrixCircuitBreakerFactory-1] DEBUG APP=test-app | ENV=LOCAL | REQUEST_ID= | TRACE_ID=bde6e74d65833730 | SPAN_ID=d5dc68689645201a | CLIENT_ID= | CLIENT_VERSION= | a.c.s.i.myservice.aop.LoggingAspect - Enter: au.com.suncorp.insurance.myservice.config.properties.DependentApiProperties.getAddress() with argument[s] = []
2020-01-10 10:50:04,179 [hystrix-HystrixCircuitBreakerFactory-1] DEBUG APP=test-app | ENV=LOCAL | REQUEST_ID= | TRACE_ID=bde6e74d65833730 | SPAN_ID=d5dc68689645201a | CLIENT_ID= | CLIENT_VERSION= | a.c.s.i.myservice.aop.LoggingAspect - Exit: au.com.suncorp.insurance.myservice.config.properties.DependentApiProperties.getAddress() with result = au.com.suncorp.insurance.myservice.config.properties.DependentApiProperties$Address#1928e7f3
2020-01-10 10:50:04,184 [hystrix-HystrixCircuitBreakerFactory-1] INFO APP=test-app | ENV=LOCAL | REQUEST_ID= | TRACE_ID=bde6e74d65833730 | SPAN_ID=d5dc68689645201a | CLIENT_ID= | CLIENT_VERSION= | a.c.s.i.m.p.dependent.DependentApi - Request: http://example.api.com/api/customers/John
2020-01-10 10:50:04,186 [hystrix-HystrixCircuitBreakerFactory-1] DEBUG APP=test-app | ENV=LOCAL | REQUEST_ID= | TRACE_ID=bde6e74d65833730 | SPAN_ID=d5dc68689645201a | CLIENT_ID= | CLIENT_VERSION= | a.c.s.i.myservice.aop.LoggingAspect - Enter: au.com.suncorp.insurance.myservice.config.DependentApiRestOperation.getRestOperations() with argument[s] = []

The Resilience4j Spring Boot Starter und Spring Cloud CircuitBreaker are two different/seperate projects.
Spring Cloud CircuitBreaker runs methods in a seperate thread pool. See -> https://github.com/spring-cloud/spring-cloud-circuitbreaker/blob/master/spring-cloud-circuitbreaker-resilience4j/src/main/java/org/springframework/cloud/circuitbreaker/resilience4j/Resilience4JCircuitBreaker.java#L68
In Resilience4j and the Spring Boot Starter the CircuitBreaker and Threadpool-based Bulkhead are two different resilience patterns which you might want to combine or not. If you want to combine them, you have to apply two Annnotations to your method -> #CircuitBreaker and #Bulkhead(type = Type.THREADPOOL).
Have a look at the demo -> https://github.com/resilience4j/resilience4j-spring-boot2-demo

Related

Maven cli command to search packages

Is there a command line command in Maven to search / find packages? Something similar to npm search:
# npm search indexeddb
NAME | DESCRIPTION | AUTHOR | DATE | VERSION | KEYWORDS
indexeddb | A pure-JavaScript… | =bigeasy | 2014-02-13 | 0.0.0 | btree leveldb levelup binary mvcc database json b-tree concurrent persistence durable
lokijs | Fast document… | =techfort | 2021-04-20 | 1.5.12 | javascript document-oriented mmdb json nosql lokijs in-memory indexeddb
localforage | Offline storage,… | =tofumatt | 2021-08-18 | 1.10.0 | indexeddb localstorage storage websql
idb-keyval | A… | =jaffathecake | 2022-01-11 | 6.1.0 | idb indexeddb store keyval localstorage storage promise
idb | A small wrapper… | =jaffathecake | 2022-03-14 | 7.0.1 |
y-indexeddb | IndexedDB database… | =dmonad | 2022-01-21 | 9.0.7 | Yjs CRDT offline shared editing collaboration concurrency
minimongo | Client-side mongo… | =broncha… | 2022-05-23 | 6.12.4 | mongodb mongo minimongo IndexedDb WebSQL storage
#karsegard/indexeddb-expo | Export/import an… | =fdt2k | 2021-09-20 | 2.1.4 | IndexedDB JSON import export serialize deserialize backup restore
rt-import | | | | |
dexie | A Minimalistic… | =anders.ekdahl… | 2022-04-27 | 3.2.2 | indexeddb browser database
fortune-indexeddb | IndexedDB adapter… | =daliwali | 2021-06-17 | 1.2.1 | indexeddb adapter
bytewise | Binary… | =deanlandolt | 2015-06-19 | 1.1.0 | binary sort collation serialization leveldb indexeddb
fortune-localforage | localForage adapter… | =acoreyj | 2018-08-29 | 1.3.0 | indexeddb adapter
idb-kv | A tiny key value… | =kayleepop | 2019-09-28 | 2.1.1 | idb kv indexeddb key value api batch performance
idbkv-chunk-store | Abstract chunk… | =kayleepop | 2019-05-16 | 1.1.2 | idb indexeddb chunk store abstract batch batching performance fast small writes
fortune-indexeddb-with-bu | IndexedDB adapter… | =acoreyj | 2018-05-29 | 1.0.3 | indexeddb adapter
ndle | | | | |
fake-indexeddb | Fake IndexedDB: a… | =dumbmatter | 2022-06-08 | 3.1.8 | indexeddb datastore database embedded nosql in-memory polyfill shim
redux-persist-indexeddb-s | Redux Persist… | =mpintos | 2019-12-11 | 1.0.4 | redux redux-persist indexeddb
torage | | | | |
indexeddb-export-import | Export/import an… | =polarisation | 2021-11-16 | 2.1.5 | IndexedDB JSON import export serialize deserialize backup restore
#n1md7/indexeddb-promise | Indexed DB wrapper… | =n1md7 | 2022-05-08 | 7.0.4 | db indexed-db promise indexed npm package
#sighmir/indexeddb-export | Export/import an… | =sighmir | 2019-12-30 | 1.1.1 | IndexedDB JSON import export serialize deserialize
-import
If yes, how can I find packages for a search string?

Should I explicitly verify Keycloak token or this is done by Keycloak adapter?

There is a Spring-boot REST API, that needs to be secured by Keycloak, the application is using Keycloak-Spring-Security adapter (6.0.1).
A call to an API endpoint, carries along the bearer token, obtained from Keycloak (currently through postman).
I'm able to perform a successful REST endpoint call, but other thing is troubling me - should I explicitly verify the token against the public key?
1 - Is the adapter performing verification of the token against the public key, or should I implement it?
2 - If the adapter is doing this - can you point out in which classes is this getting done?
3 - If - not - how should this verification be implemented? Are there any Keycloak libraries that I can use to verify the token?
Well, after a few days of searching the web for answer - I got it.
I looked into the code of Keycloak-spring-security-adapter and found it.
First of all I got the logging lever for keycloak to DEBUG:
logging.level.org.keycloak=DEBUG
Then I tried to access my endpoint with bad token (I expected that this is going to produce an exception, i.e. more visible trace; and it did):
2019-10-17 10:18:57,905 | 30860 | http-nio-8081-exec-2 | | | | | DEBUG | | org.keycloak.adapters.PreAuthActionsHandler | adminRequest http://localhost:8081/error
2019-10-17 10:18:57,906 | 30860 | http-nio-8081-exec-2 | | | | | DEBUG | | org.keycloak.adapters.springsecurity.filter.KeycloakAuthenticationProcessingFilter | Request is to process authentication
2019-10-17 10:18:57,906 | 30860 | http-nio-8081-exec-2 | | | | | DEBUG | | org.keycloak.adapters.springsecurity.filter.KeycloakAuthenticationProcessingFilter | Attempting Keycloak authentication
2019-10-17 10:18:57,906 | 30860 | http-nio-8081-exec-2 | | | | | DEBUG | | org.keycloak.adapters.BearerTokenRequestAuthenticator | Found [1] values in authorization header, selecting the first value for Bearer.
2019-10-17 10:18:57,906 | 30860 | http-nio-8081-exec-2 | | | | | DEBUG | | org.keycloak.adapters.BearerTokenRequestAuthenticator | Verifying access_token
2019-10-17 10:18:57,908 | 30860 | http-nio-8081-exec-2 | | | | | DEBUG | | org.keycloak.adapters.BearerTokenRequestAuthenticator | Failed to verify token
2019-10-17 10:18:57,908 | 30860 | http-nio-8081-exec-2 | | | | | DEBUG | | org.keycloak.adapters.RequestAuthenticator | Bearer FAILED
2019-10-17 10:18:57,908 | 30860 | http-nio-8081-exec-2 | | | | | DEBUG | | org.keycloak.adapters.springsecurity.filter.KeycloakAuthenticationProcessingFilter | Auth outcome: FAILED
2019-10-17 10:18:57,925 | 30860 | http-nio-8081-exec-2 | | | | | DEBUG | | org.keycloak.adapters.springsecurity.filter.KeycloakAuthenticationProcessingFilter | Authentication request failed: org.keycloak.adapters.springsecurity.KeycloakAuthenticationException: Invalid authorization header, see WWW-Authenticate header for details org.keycloak.adapters.springsecurity.KeycloakAuthenticationException: Invalid authorization header, see WWW-Authenticate header for details
at org.keycloak.adapters.springsecurity.filter.KeycloakAuthenticationProcessingFilter.attemptAuthentication(KeycloakAuthenticationProcessingFilter.java:158)
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
.....
From then on it is clear that the token is being verified, if you look into the classes that take part, you'll see that it is getting verified against the public key in certain situations.
Classes that take part in this authentication & verification are, in my case (bearer-only) are:
org.keycloak.adapters.springsecurity.filter.KeycloakAuthenticationProcessingFilter
org.keycloak.adapters.BearerTokenRequestAuthenticator
Hopefully this can help other people like me to find their way in Keycloak.

shell script to find first and last occourance of a string

I have prepared a shell script to do the following in a 50 node hadoop cluster:
list all the log files related to my application in each server
print the last modified timestamp, hostname, filename
sort the log files from 50 nodes as per the modified time stamp
current output format is:
2016-07-11-01:06 server1 MY_APPLICATION-worker-6701.log.6.gz
2016-07-12-05:23 server1 MY_APPLICATION-worker-6701.log.7.gz
2016-07-13-08:38 server2 MY_APPLICATION-worker-6701.log
2016-07-13-10:38 server3 MY_APPLICATION-worker-6701.log.out
2016-07-13-10:38 server2 MY_APPLICATION-worker-6701.log.err
2016-07-13-10:38 server5 MY_APPLICATION-worker-6701.log
2016-07-15-10:22 server4 MY_APPLICATION-worker-6703.log.out
2016-07-15-10:22 server3 MY_APPLICATION-worker-6703.log.err
2016-07-15-10:22 server2 MY_APPLICATION-worker-6703.log
.
totallogs=""
for server in $(cat all-hadoop-cluster-servers.txt); do
logs1="$(ssh user_id#$server 'ls /var/log/hadoop/storm/ -ltr --time-style="+%Y-%m-%d-%H:%M" | grep MY_APPLICATION | awk -v host=$HOSTNAME "{print \$6, host, \$7}"' )"
if [ -z "${logs1}" ]; then
continue
else
logs1+="\n"
totallogs+=$logs1
fi
done
for el in "${totallogs[#]}"
do
printf "$el"
done | sort
How to find the first occurrence of the "unique-ID" and last occurrence of the "unique-ID" in each log file along with the above output.
Expected output format is:
time_stamp hostname filename first-unique-ID last-unique-ID
2016-07-11-01:06 server1 MY_APPLICATION-worker-6701.log.6.gz 1467005065878 1467105065877
2016-07-12-05:23 server1 MY_APPLICATION-worker-6701.log.7.gz 1467105065878 1467205065860
2016-07-13-08:38 server2 MY_APPLICATION-worker-6701.log 1467205065861 1467305065852
2016-07-13-10:38 server3 MY_APPLICATION-worker-6701.log.out
2016-07-13-10:38 server2 MY_APPLICATION-worker-6701.log.err
2016-07-13-10:38 server5 MY_APPLICATION-worker-6701.log 1467305065853 1467405065844
2016-07-15-10:22 server4 MY_APPLICATION-worker-6703.log.out
2016-07-15-10:22 server3 MY_APPLICATION-worker-6703.log.err
2016-07-15-10:22 server2 MY_APPLICATION-worker-6703.log 1467405065845 1467505065853
Sample log file:
DEBUG | 2008-09-06 10:51:44,848 | unique-ID >>>>>> 1467205065861
DEBUG | 2008-09-06 10:51:44,817 | DefaultBeanDefinitionDocumentReader.java | 86 | Loading bean definitions
DEBUG | 2008-09-06 10:51:44,848 | AbstractBeanDefinitionReader.java | 185 | Loaded 5 bean definitions from location pattern [samContext.xml]
INFO | 2008-09-06 10:51:44,848 | XmlBeanDefinitionReader.java | 323 | Loading XML bean definitions from class path resource [tmfContext.xml]
DEBUG | 2008-09-06 10:51:44,848 | DefaultDocumentLoader.java | 72 | Using JAXP provider [com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl]
DEBUG | 2008-09-06 10:51:44,848 | BeansDtdResolver.java | 72 | Found beans DTD [http://www.springframework.org/dtd/spring-beans.dtd] in classpath: spring-beans.dtd
DEBUG | 2008-09-06 10:51:44,848 | unique-ID >>>>>> 1467205065862
DEBUG | 2008-09-06 10:51:44,864 | DefaultBeanDefinitionDocumentReader.java | 86 | Loading bean definitions
DEBUG | 2008-09-06 10:51:45,458 | AbstractAutowireCapableBeanFactory.java | 411 | Finished creating instance of bean 'MS-SQL'
DEBUG | 2008-09-06 10:51:45,458 | DefaultSingletonBeanRegistry.java | 213 | Creating shared instance of singleton bean 'MySQL'
DEBUG | 2008-09-06 10:51:45,458 | AbstractAutowireCapableBeanFactory.java | 383 | Creating instance of bean 'MySQL'
DEBUG | 2008-09-06 10:51:45,458 | AbstractAutowireCapableBeanFactory.java | 459 | Eagerly caching bean 'MySQL' to allow for resolving potential circular references
DEBUG | 2008-09-06 10:51:45,458 | AbstractAutowireCapableBeanFactory.java | 411 | Finished creating instance of bean 'MySQL'
DEBUG | 2008-09-06 10:51:45,458 | DefaultSingletonBeanRegistry.java | 213 | Creating shared instance of singleton bean 'Oracle'
DEBUG | 2008-09-06 10:51:45,458 | AbstractAutowireCapableBeanFactory.java | 383 | Creating instance of bean 'Oracle'
DEBUG | 2008-09-06 10:51:45,458 | AbstractAutowireCapableBeanFactory.java | 459 | Eagerly caching bean 'Oracle' to allow for resolving potential circular references
DEBUG | 2008-09-06 10:51:45,473 | AbstractAutowireCapableBeanFactory.java | 411 | Finished creating instance of bean 'Oracle'
DEBUG | 2008-09-06 10:51:45,473 | DefaultSingletonBeanRegistry.java | 213 | Creating shared instance of singleton bean 'PostgreSQL'
DEBUG | 2008-09-06 10:51:45,473 | AbstractAutowireCapableBeanFactory.java | 383 | Creating instance of bean 'PostgreSQL'
DEBUG | 2008-09-06 10:51:45,473 | AbstractAutowireCapableBeanFactory.java | 459 | Eagerly caching bean 'PostgreSQL' to allow for resolving potential circular references
DEBUG | 2008-09-06 10:51:45,473 | AbstractAutowireCapableBeanFactory.java | 411 | Finished creating instance of bean 'PostgreSQL'
INFO | 2008-09-06 10:51:45,473 | SQLErrorCodesFactory.java | 128 | SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase]
DEBUG | 2008-09-06 10:52:44,817 | DefaultBeanDefinitionDocumentReader.java | 86 | Loading bean definitions
DEBUG | 2008-09-06 10:52:44,848 | unique-ID >>>>>> 1467205065864
grep 'uniqueID' sample_log_file | sed -n '1p;$p'
Since you're already using awk, you could change your awk program
"{print \$6, host, \$7}"
to
"{ first=last=\"\"; path=\"/var/log/hadoop/storm/\"\$7; while (getline var <path) if (split(var, arr, \">>>>>>\") > 1) { if (!first) first=arr[2]; last=arr[2] } print \$6, host, \$7, \"\t\", first, last }"
in order to let it do the work.

Laravel - Pivot table - No join throws an error

I've a question regarding how Laravel handles pivot tables:
Summarizing: 2 models, Project and Stage.
Project
+----+----------+
| id | name |
+----+----------+
| 1 | Project1 |
| 2 | Project2 |
+----+----------+
Stage
+----+--------+
| id | name |
+----+--------+
| 1 | Stage1 |
| 2 | Stage2 |
| 3 | Stage3 |
+----+--------+
And a pivot table
+----+------------+----------+------------+-----------+
| id | project_id | stage_id | date | info |
+----+------------+----------+------------+-----------+
| 1 | 1 | 1 | 2014-12-20 | Moreinfo1 |
| 2 | 1 | 2 | 2014-12-21 | Moreinfo2 |
| 3 | 2 | 1 | 2014-12-22 | Moreinfo3 |
| 4 | 1 | 3 | 2014-12-23 | Moreinfo4 |
+----+------------+----------+------------+-----------+
I'm showing the info:
+----------+------------+------------+-----------+
| project | last_stage | date | info |
+----------+------------+------------+-----------+
| Project1 | 3 | 2014-12-23 | Moreinfo4 |
| Project2 | 1 | 2014-12-22 | Moreinfo3 |
+----------+------------+------------+-----------+
And everything works fine; however, if I add a new Project (as there's no info on the pivot table), I get the annoying:
Whoops, looks like something went wrong.
Is there any way to indicate that, in case of null, the row should be left empty (without an error)? I'd like to get:
+----------+------------+------------+-----------+
| project | last_stage | date | info |
+----------+------------+------------+-----------+
| Project1 | 3 | 2014-12-23 | Moreinfo4 |
| Project2 | 1 | 2014-12-22 | Moreinfo3 |
| Project3 | | | |
+----------+------------+------------+-----------+
The problem is the call in your view:
{{ $project->stages_accomp()->orderBy('date', 'desc')->first()->pivot->date }}
When you have a project that has no stage assigned ->first() will return null.
And PHP doesn't like it if you want to access a property of a non-object (in this case null)
You need to add a little check like this:
#if($stage = $project->stages_accomp()->orderBy('date', 'desc')->first())
{{ $stage->pivot->date }}
#endif
It will make sure the first() returns a truthy value (not null) and will also assign the value to the variable $stage.

Orbeon session expired handling

In ORBEON 4.1 is very strange session expired error handling ... When using DEV mode, than we get plain text error page
+----------------------------------------------------------------------------------------------------------------------+
|An Error has Occurred |
|----------------------------------------------------------------------------------------------------------------------|
|Session has expired. Unable to process incoming request. |
|----------------------------------------------------------------------------------------------------------------------|
|Application Call Stack |
|----------------------------------------------------------------------------------------------------------------------|
|oxf:/ops/xforms/xforms-server-submit.xpl | 72| 51|executing processor |
|oxf:/ops/pfc/xforms-xml-submission.xpl | 50| 46|executing processor |
|----------------------------------------------------------------------------------------------------------------------|
|Exception: org.orbeon.oxf.common.OXFException |
|----------------------------------------------------------------------------------------------------------------------|
|org.orbeon.oxf.xforms.state.XFormsStateManager |extractParameters |XFormsStateManager.java | 403|
|org.orbeon.oxf.xforms.processor.XFormsServer |doIt |XFormsServer.java | 152|
|org.orbeon.oxf.xforms.processor.XFormsServer |start |XFormsServer.java | 100|
|org.orbeon.oxf.processor.pipeline.PipelineProcessor|run |PipelineProcessor.java | 617|
|----------------------------------------------------------------------------------------------------------------------|
|Exception: org.orbeon.oxf.common.ValidationException |
|----------------------------------------------------------------------------------------------------------------------|
|org.orbeon.oxf.common.ValidationException |wrapException |ValidationException.java | 126|
|org.orbeon.oxf.processor.pipeline.PipelineProcessor|run |PipelineProcessor.java | 619|
|org.orbeon.oxf.processor.pipeline.PipelineProcessor|executeChildren |PipelineProcessor.java | 679|
|org.orbeon.oxf.processor.pipeline.PipelineProcessor|start |PipelineProcessor.java | 614|
|org.orbeon.oxf.processor.pipeline.choose.ConcreteCh|start |ConcreteChooseProcessor.java | 248|
|org.orbeon.oxf.processor.pipeline.PipelineProcessor|run |PipelineProcessor.java | 617|
|org.orbeon.oxf.processor.pipeline.PipelineProcessor|executeChildren |PipelineProcessor.java | 679|
|org.orbeon.oxf.processor.pipeline.PipelineProcessor|start |PipelineProcessor.java | 614|
|org.orbeon.oxf.processor.pipeline.PipelineProcessor|run |PipelineProcessor.java | 617|
|org.orbeon.oxf.processor.pipeline.PipelineProcessor|executeChildren |PipelineProcessor.java | 679|
|org.orbeon.oxf.processor.pipeline.PipelineProcessor|start |PipelineProcessor.java | 614|
|org.orbeon.oxf.processor.pipeline.PipelineProcessor|getInput |PipelineProcessor.java | 140|
|org.orbeon.oxf.processor.pipeline.PipelineProcessor|readImpl |PipelineProcessor.java | 83|
|org.orbeon.oxf.processor.impl.ProcessorOutputImpl$T|read |ProcessorOutputImpl.java | 258|
|org.orbeon.oxf.processor.impl.ProcessorOutputImpl |read |ProcessorOutputImpl.java | 404|
|org.orbeon.oxf.processor.pipeline.choose.ConcreteCh|readImpl |ConcreteChooseProcessor.java | 127|
|org.orbeon.oxf.processor.impl.ProcessorOutputImpl$T|read |ProcessorOutputImpl.java | 258|
|org.orbeon.oxf.processor.impl.ProcessorOutputImpl |read |ProcessorOutputImpl.java | 404|
|org.orbeon.oxf.processor.ProcessorImpl |readInputAsSAX |ProcessorImpl.java | 262|
|org.orbeon.oxf.processor.pipeline.PipelineProcessor|run |PipelineProcessor.java | 92|
|---8<--------8<--------8<--------8<--------8<--------8<--------8<--------8<--------8<--------8<--------8<--------8<---|
|org.orbeon.oxf.webapp.ProcessorService |service |ProcessorService.scala | 40|
|org.orbeon.oxf.servlet.OrbeonServlet$$anonfun$servi|apply$mcV$sp |OrbeonServlet.scala | 74|
|org.orbeon.oxf.servlet.OrbeonServlet$$anonfun$servi|apply |OrbeonServlet.scala | 67|
|org.orbeon.oxf.servlet.OrbeonServlet$$anonfun$servi|apply |OrbeonServlet.scala | 67|
|org.orbeon.oxf.util.ScalaUtils$ |withRootException |ScalaUtils.scala | 118|
|org.orbeon.oxf.servlet.OrbeonServlet |service |OrbeonServlet.scala | 67|
|javax.servlet.http.HttpServlet |service |HttpServlet.java | 820|
|weblogic.servlet.internal.StubSecurityHelper$Servle|run |StubSecurityHelper.java | 227|
|weblogic.servlet.internal.StubSecurityHelper |invokeServlet |StubSecurityHelper.java | 125|
|weblogic.servlet.internal.ServletStubImpl |execute |ServletStubImpl.java | 300|
|weblogic.servlet.internal.ServletStubImpl |execute |ServletStubImpl.java | 183|
|weblogic.servlet.internal.WebAppServletContext$Serv|doIt |WebAppServletContext.java |3683|
|weblogic.servlet.internal.WebAppServletContext$Serv|run |WebAppServletContext.java |3650|
|weblogic.security.acl.internal.AuthenticatedSubject|doAs |AuthenticatedSubject.java | 321|
|weblogic.security.service.SecurityManager |runAs |SecurityManager.java | 121|
|weblogic.servlet.internal.WebAppServletContext |securedExecute |WebAppServletContext.java |2268|
|weblogic.servlet.internal.WebAppServletContext |execute |WebAppServletContext.java |2174|
|weblogic.servlet.internal.ServletRequestImpl |run |ServletRequestImpl.java |1446|
|weblogic.work.ExecuteThread |execute |ExecuteThread.java | 201|
|weblogic.work.ExecuteThread |run |ExecuteThread.java | 173|
+----------------------------------------------------------------------------------------------------------------------+
It should be OK (its in DEV mode by the way ...), but if we switch to PROD mode, than user got plain Error occurred error without error details. Session timeout is very common error and we need show to user user friendly page with instruction what to do. Is there any way how to do it?

Resources