adding a file exchange store makes admin/calls unstable

47 views
Skip to first unread message

br...@decitre.fr

unread,
Dec 8, 2017, 11:16:31 AM12/8/17
to membrane-monitor
Hello,

My backend url is : http://localhost:9000/admin

When I use the following config everything is fine :

<spring:beans xmlns="http://membrane-soa.org/proxies/1/"
             
xmlns:spring="http://www.springframework.org/schema/beans"
             
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             
xsi:schemaLocation="http://www.springframework.org/schema/beans
                        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
                        http://membrane-soa.org/proxies/1/ http://membrane-soa.org/schemas/proxies-1.xsd"
>
 
       
<spring:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
           
<spring:property name="driverClassName" value="com.mysql.jdbc.Driver" />
           
<spring:property name="url" value="jdbc:mysql://localhost:3307/membrane" />
           
<spring:property name="username" value="root" />
           
<spring:property name="password" value="root" />
       
</spring:bean>
 
   
<fileExchangeStore dir="logs" raw="false" saveBodyOnly="false"/>
 
   
<router>
 
 
 
       
<soapProxy port="2020" wsdl="http://webservices.daehosting.com/services/isbnservice.wso?WSDL" >
           
<statisticsJDBC dataSource="dataSource" />
           
<validator />
       
</soapProxy>
 
 
 
       
<!--  Administration UI
         Open http://localhost:9000 and log in as admin with password membrane.
        -->

       
<serviceProxy name="Console" port="9000">
           
<basicAuthentication>
               
<user name="admin" password="membrane" />
           
</basicAuthentication>
           
<accessControl file="acl.xml" />
           
<adminConsole />
       
</serviceProxy>
 
   
</router>
 
</spring:beans>

As soon as I add the fileExchangeStore in the router config :

<spring:beans xmlns="http://membrane-soa.org/proxies/1/"
             
xmlns:spring="http://www.springframework.org/schema/beans"
             
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             
xsi:schemaLocation="http://www.springframework.org/schema/beans
                        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
                        http://membrane-soa.org/proxies/1/ http://membrane-soa.org/schemas/proxies-1.xsd"
>
 
       
<spring:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
           
<spring:property name="driverClassName" value="com.mysql.jdbc.Driver" />
           
<spring:property name="url" value="jdbc:mysql://localhost:3307/membrane" />
           
<spring:property name="username" value="root" />
           
<spring:property name="password" value="root" />
       
</spring:bean>
 
   
<fileExchangeStore dir="logs" raw="false" saveBodyOnly="false"/>
 
   
<router exchangeStore="fileExchangeStore">
 
 
 
       
<soapProxy port="2020" wsdl="http://webservices.daehosting.com/services/isbnservice.wso?WSDL" >
           
<statisticsJDBC dataSource="dataSource" />
           
<validator />
       
</soapProxy>
 
 
 
       
<!--  Administration UI
         Open http://localhost:9000 and log in as admin with password membrane.
        -->

       
<serviceProxy name="Console" port="9000">
           
<basicAuthentication>
               
<user name="admin" password="membrane" />
           
</basicAuthentication>
           
<accessControl file="acl.xml" />
           
<adminConsole />
       
</serviceProxy>
 
   
</router>
 
</spring:beans>

Then, when I go to http://localhost:9000/admin/calls, I have an error :

16:41:28,960  WARN AbstractHttpHandler:89 - An exception occured while handling a request:
java
.lang.reflect.InvocationTargetException
    at sun
.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun
.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun
.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java
.lang.reflect.Method.invoke(Method.java:498)
    at com
.predic8.membrane.core.interceptor.administration.DynamicAdminPageInterceptor.dispatchRequest(DynamicAdminPageInterceptor.java:848)
    at com
.predic8.membrane.core.interceptor.administration.DynamicAdminPageInterceptor.handleRequest(DynamicAdminPageInterceptor.java:68)
    at com
.predic8.membrane.core.interceptor.InterceptorFlowController.invokeRequestHandlers(InterceptorFlowController.java:106)
    at com
.predic8.membrane.core.interceptor.administration.AdminConsoleInterceptor.handleRequest(AdminConsoleInterceptor.java:57)
    at com
.predic8.membrane.core.interceptor.InterceptorFlowController.invokeRequestHandlers(InterceptorFlowController.java:106)
    at com
.predic8.membrane.core.interceptor.UserFeatureInterceptor.handleRequest(UserFeatureInterceptor.java:43)
    at com
.predic8.membrane.core.interceptor.InterceptorFlowController.invokeRequestHandlers(InterceptorFlowController.java:106)
    at com
.predic8.membrane.core.interceptor.InterceptorFlowController.invokeHandlers(InterceptorFlowController.java:71)
    at com
.predic8.membrane.core.transport.http.AbstractHttpHandler.invokeHandlers(AbstractHttpHandler.java:70)
    at com
.predic8.membrane.core.transport.http.HttpServerHandler.process(HttpServerHandler.java:234)
    at com
.predic8.membrane.core.transport.http.HttpServerHandler.run(HttpServerHandler.java:119)
    at java
.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java
.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java
.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NullPointerException
    at com
.predic8.membrane.core.exchangestore.AbstractExchangeStore.collect(AbstractExchangeStore.java:70)
    at com
.predic8.membrane.core.interceptor.administration.DynamicAdminPageInterceptor$14.createTabContent(DynamicAdminPageInterceptor.java:625)
    at com
.predic8.membrane.core.interceptor.administration.AdminPageBuilder.createPage(AdminPageBuilder.java:118)
    at com
.predic8.membrane.core.interceptor.administration.DynamicAdminPageInterceptor.getCallsPage(DynamicAdminPageInterceptor.java:719)
    at com
.predic8.membrane.core.interceptor.administration.DynamicAdminPageInterceptor.handleCallsRequest(DynamicAdminPageInterceptor.java:457)
   
... 18 more

Did I miss anything ?

Tobias Polley

unread,
Jan 16, 2018, 12:17:49 PM1/16/18
to membrane-monitor
Hi.

Over the time, the coupling between the adminConsole and limitedMemoryExchangeStore has evolved quite a bit, so that today only the limitedMemoryExchangeStore can be used by the adminConsole. For example, fileExchangeStore cannot even read files back into memory.

You may workaround the problem by having two exchange stores:

<fileExchangeStore dir="logs" raw="false" saveBodyOnly="false"/>
<limitedMemoryExchangeStore maxSize="100000000" />

<router exchangeStore="limitedMemoryExchangeStore">
<transport>
<ruleMatching />
<exchangeStore name="limitedMemoryExchangeStore" />
<exchangeStore name="fileExchangeStore" />
<dispatching />
<reverseProxying />
<userFeature />
<httpClient />
</transport>

<serviceProxy>
<target host="www.predic8.de" />
</serviceProxy>

<serviceProxy port="9000">
<adminConsole/>
</serviceProxy>

</router>


Best, Tobias
Reply all
Reply to author
Forward
0 new messages