Bug 784057 - Global Action Pipeline interceptor
Global Action Pipeline interceptor
Status: CLOSED CURRENTRELEASE
Product: JBoss Enterprise SOA Platform 5
Classification: JBoss
Component: JBossESB (Show other bugs)
5.2
Unspecified Unspecified
high Severity high
: CR1
: 5.3.0 GA
Assigned To: tcunning
Martin Vecera
:
Depends On:
Blocks:
  Show dependency treegraph
 
Reported: 2012-01-23 12:13 EST by Ken Johnson
Modified: 2014-10-15 13:25 EDT (History)
9 users (show)

See Also:
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.
Story Points: ---
Clone Of:
Environment:
Last Closed: 2014-10-15 13:25:52 EDT
Type: Feature Request
Regression: ---
Mount Type: ---
Documentation: ---
CRM:
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---


Attachments (Terms of Use)


External Trackers
Tracker ID Priority Status Summary Last Updated
JBoss Issue Tracker JBESB-3724 Major Closed Global Action Pipeline Interceptor 2015-09-17 03:07:08 EDT

  None (edit)
Description Ken Johnson 2012-01-23 12:13:30 EST
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 16:57:35 EDT
GSS has encountered this issue also.  Prioritized 'High'.
Comment 2 JBoss JIRA Server 2012-03-21 10:31:49 EDT
Tom Cunningham <tcunning@redhat.com> updated the status of jira JBESB-3724 to Resolved
Comment 3 JBoss JIRA Server 2012-03-21 10:31:49 EDT
Tom Cunningham <tcunning@redhat.com> 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 10:31:58 EDT
Tom Cunningham <tcunning@redhat.com> updated the status of jira JBESB-3724 to Closed
Comment 5 tcunning 2012-04-05 11:43:22 EDT
Should be in ER1.     See JBESB-3724 for details.
Comment 6 Jiri Pechanec 2012-06-05 07:21:02 EDT
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 02:48:19 EDT
    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 09:18:59 EDT
not solved, the double quotes still there
Comment 9 Ryan Zhang 2012-07-20 02:34:53 EDT
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.