Bug 784057 - Global Action Pipeline interceptor
Summary: Global Action Pipeline interceptor
Keywords:
Status: CLOSED CURRENTRELEASE
Alias: None
Product: JBoss Enterprise SOA Platform 5
Classification: JBoss
Component: JBossESB
Version: 5.2
Hardware: Unspecified
OS: Unspecified
high
high
Target Milestone: CR1
: 5.3.0 GA
Assignee: tcunning
QA Contact: Martin Vecera
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2012-01-23 17:13 UTC by Ken Johnson
Modified: 2014-10-15 17:25 UTC (History)
9 users (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
In previous versions, users were not able to globally intercept messages prior to the action pipeline. This functionality has now been added and users can configure interceptors. To do so, implement org.jboss.soa.esb.listeners.message.PipelinInterceptor and configure the interceptors with the interception points in jbossesb-properties.xml.
Clone Of:
Environment:
Last Closed: 2014-10-15 17:25:52 UTC
Type: Feature Request
Embargoed:


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
Red Hat Issue Tracker JBESB-3724 0 Major Closed Global Action Pipeline Interceptor 2015-09-17 07:07:08 UTC

Description Ken Johnson 2012-01-23 17:13:30 UTC
We would like to have the capability to intercept prior to the action pipeline the Message, globally. This will lay the foundation for being able to hook in global interceptors for global exception handling, business activity monitoring, and service analytics.

When the interceptor is executed for the service, it would be helpful to send in not just the Message, but information on the current service (name, etc) as well. This may include which adapter the message is arriving on, what the service name and category is, etc. We have tried in the past to create something like this for a client using AOP, but couldn't achieve it this way, as JBoss AOP has some serious limitations in the Enterprise offerings.
It would be also great if the interceptor had the capability to read the full configuration of the service to know what listeners are provided. This could be used in the future to log inputs for services to a service registry.

In addition to the hooks for this in the Action Pipeline code, we would also need to have a globally defined configuration for interceptors.

The background behind this request is that often times, clients need to do analytics over service request / response times, or need to globally define rules for Exception Handling, or need to intercept input and output messages for auditing. We are hoping that this feature would facilitate all of these by allowing Red Hat to start shipping generic implementations for these things incrementally, and also enabling customers to craft their own to meet specific business needs.



See:
https://issues.jboss.org/browse/JBESB-3724

Comment 1 Rick Wagner 2012-03-19 20:57:35 UTC
GSS has encountered this issue also.  Prioritized 'High'.

Comment 2 JBoss JIRA Server 2012-03-21 14:31:49 UTC
Tom Cunningham <tcunning> updated the status of jira JBESB-3724 to Resolved

Comment 3 JBoss JIRA Server 2012-03-21 14:31:49 UTC
Tom Cunningham <tcunning> made a comment on jira JBESB-3724

Interceptors can now be configured - the user should implement org.jboss.soa.esb.listeners.message.PipelinInterceptor and configured the interceptors with the interception points within jbossesb-properties.xml.

I've added interception points at service instantiation, service start, service end, and service failure (see the properties below).   

The PipelineInterceptor is passed a message and a ConfigTree.     Please note that in the case of the instantiation interceptor, no message has been passed in to the pipeline yet, so a null message is passed back to the interceptor.
 
    <properties name="interceptors">
        <property name="org.jboss.soa.esb.pipeline.failure.interceptors" value=""org.jboss.soa.esb.listeners.message.GenericPipelineInterceptor"/>
        <property name="org.jboss.soa.esb.pipeline.instantiate.interceptors" value="org.jboss.soa.esb.listeners.message.GenericPipelineInterceptor"/>
        <property name="org.jboss.soa.esb.pipeline.start.interceptors" value="org.jboss.soa.esb.listeners.message.GenericPipelineInterceptor"/>
        <property name="org.jboss.soa.esb.pipeline.end.interceptors" value="org.jboss.soa.esb.listeners.message.GenericPipelineInterceptor"/>
    </properties>

Comment 4 JBoss JIRA Server 2012-03-21 14:31:58 UTC
Tom Cunningham <tcunning> updated the status of jira JBESB-3724 to Closed

Comment 5 tcunning 2012-04-05 15:43:22 UTC
Should be in ER1.     See JBESB-3724 for details.

Comment 6 Jiri Pechanec 2012-06-05 11:21:02 UTC
Verified in ER3 - the functionality is present but jbossesb-properties.xml contains bug

<property name="org.jboss.soa.esb.pipeline.failure.interceptors" value=""org.jboss.soa.esb.listeners.message.GenericPipelineInterceptor"/>

Note double quotes after value=

Also if the provided example is tried the server thwos an exception during startup
13:17:09,228 ERROR [AbstractKernelController] Error installing to Start: name=jboss.esb.vfsfile:/home/jpechane/releases/53ER3/jboss-as/server/default/deploy/jbossesb.esb/ state=Create
java.lang.RuntimeException: org.jboss.soa.esb.listeners.lifecycle.ManagedLifecycleException: Unexpected exception while instantiating managed instance
	at org.jboss.soa.esb.listeners.config.Configuration.create(Configuration.java:185)
	at org.jboss.soa.esb.listeners.deployers.mc.EsbDeployment.start(EsbDeployment.java:231)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:616)
	at org.jboss.reflect.plugins.introspection.ReflectionUtils.invoke(ReflectionUtils.java:59)
	at org.jboss.reflect.plugins.introspection.ReflectMethodInfoImpl.invoke(ReflectMethodInfoImpl.java:150)
	at org.jboss.joinpoint.plugins.BasicMethodJoinPoint.dispatch(BasicMethodJoinPoint.java:66)
	at org.jboss.kernel.plugins.dependency.KernelControllerContextAction$JoinpointDispatchWrapper.execute(KernelControllerContextAction.java:243)
	at org.jboss.kernel.plugins.dependency.ExecutionWrapper.execute(ExecutionWrapper.java:47)
	at org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchExecutionWrapper(KernelControllerContextAction.java:111)
	at org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchJoinPoint(KernelControllerContextAction.java:72)
	at org.jboss.kernel.plugins.dependency.LifecycleAction.installActionInternal(LifecycleAction.java:221)
	at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:54)
	at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:42)
	at org.jboss.dependency.plugins.action.SimpleControllerContextAction.simpleInstallAction(SimpleControllerContextAction.java:62)
	at org.jboss.dependency.plugins.action.AccessControllerContextAction.install(AccessControllerContextAction.java:71)
	at org.jboss.dependency.plugins.AbstractControllerContextActions.install(AbstractControllerContextActions.java:51)
	at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
	at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1652)
	at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:938)
	at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1082)
	at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:988)
	at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:826)
	at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:556)
	at org.jboss.system.ServiceController.doChange(ServiceController.java:688)
	at org.jboss.system.ServiceController.start(ServiceController.java:460)
	at org.jboss.system.deployers.ServiceDeployer.start(ServiceDeployer.java:163)
	at org.jboss.system.deployers.ServiceDeployer.deploy(ServiceDeployer.java:99)
	at org.jboss.system.deployers.ServiceDeployer.deploy(ServiceDeployer.java:46)
	at org.jboss.deployers.spi.deployer.helpers.AbstractSimpleRealDeployer.internalDeploy(AbstractSimpleRealDeployer.java:62)
	at org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer.deploy(AbstractRealDeployer.java:55)
	at org.jboss.deployers.plugins.deployers.DeployerWrapper.deploy(DeployerWrapper.java:179)
	at org.jboss.deployers.plugins.deployers.DeployersImpl.doDeploy(DeployersImpl.java:1454)
	at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1172)
	at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1193)
	at org.jboss.deployers.plugins.deployers.DeployersImpl.install(DeployersImpl.java:1113)
	at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
	at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1652)
	at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:938)
	at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1082)
	at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:988)
	at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:826)
	at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:556)
	at org.jboss.deployers.plugins.deployers.DeployersImpl.process(DeployersImpl.java:789)
	at org.jboss.deployers.plugins.main.MainDeployerImpl.process(MainDeployerImpl.java:699)
	at org.jboss.system.server.profileservice.repository.MainDeployerAdapter.process(MainDeployerAdapter.java:117)
	at org.jboss.system.server.profileservice.repository.ProfileDeployAction.install(ProfileDeployAction.java:70)
	at org.jboss.system.server.profileservice.repository.AbstractProfileAction.install(AbstractProfileAction.java:53)
	at org.jboss.system.server.profileservice.repository.AbstractProfileService.install(AbstractProfileService.java:403)
	at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
	at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1652)
	at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:938)
	at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1082)
	at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:988)
	at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:778)
	at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:543)
	at org.jboss.system.server.profileservice.repository.AbstractProfileService.registerProfile(AbstractProfileService.java:308)
	at org.jboss.system.server.profileservice.ProfileServiceBootstrap.start(ProfileServiceBootstrap.java:256)
	at org.jboss.bootstrap.AbstractServerImpl.start(AbstractServerImpl.java:461)
	at org.jboss.Main.boot(Main.java:223)
	at org.jboss.Main$1.run(Main.java:574)
	at java.lang.Thread.run(Thread.java:636)
Caused by: org.jboss.soa.esb.listeners.lifecycle.ManagedLifecycleException: Unexpected exception while instantiating managed instance
	at org.jboss.soa.esb.listeners.LifecycleUtil.getManagedInstances(LifecycleUtil.java:166)
	at org.jboss.soa.esb.listeners.LifecycleUtil.getListeners(LifecycleUtil.java:76)
	at org.jboss.soa.esb.listeners.config.Configuration.create(Configuration.java:124)
	... 63 more
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:532)
	at org.jboss.soa.esb.listeners.LifecycleUtil.getManagedInstances(LifecycleUtil.java:162)
	... 65 more
Caused by: java.lang.NullPointerException
	at org.jboss.soa.esb.listeners.message.GenericPipelineInterceptor.processMessage(GenericPipelineInterceptor.java:33)
	at org.jboss.soa.esb.listeners.message.InterceptorManager.interceptInstantiate(InterceptorManager.java:126)
	at org.jboss.soa.esb.listeners.message.ActionProcessingPipeline.<init>(ActionProcessingPipeline.java:380)
	at org.jboss.soa.esb.listeners.ScheduleListener.<init>(ScheduleListener.java:90)
	... 70 more

The issue is probably caused by null message body

Comment 7 Suz 2012-06-13 06:48:19 UTC
    Technical note added. If any revisions are required, please edit the "Technical Notes" field
    accordingly. All revisions will be proofread by the Engineering Content Services team.
    
    New Contents:
In previous versions, users were not able to globally intercept messages prior to the action pipeline. This functionality has now been added and users can configure interceptors. To do so, implement org.jboss.soa.esb.listeners.message.PipelinInterceptor and configure the interceptors with the interception points in jbossesb-properties.xml.

Comment 8 Jehudi Castro Sierra 2012-07-13 13:18:59 UTC
not solved, the double quotes still there

Comment 9 Ryan Zhang 2012-07-20 06:34:53 UTC
Please verify this issue on 5.3.0 CR1.


Note You need to log in before you can comment on or make changes to this bug.