[ 
https://issues.apache.org/jira/browse/CXF-5364?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13823299#comment-13823299
 ] 

Sambit Dikshit edited comment on CXF-5364 at 11/15/13 5:26 AM:
---------------------------------------------------------------

[~sergey_beryozkin] Here is the use cases - 

1. We have a client framework which is built on top of cxf and it initializes 
the cxf bus to inject few interceptors (mostly to capture SLA and enforce based 
on our policy enforcement strategy, collect metrics for analysis, automatic 
endpoint discovery, local caching etc).  These interceptors has to be executed 
for all calls going through client framework.  This client is used for both 
http/local transport communication. For local transport - we have customized to 
by pass serialization overhead and just does pure method call.  The entire 
client framework is used as an annotation against the interface proxy for 
example 
@SOAClient
BookStoreInterface bookProxy;

2. On the server side, we do have a similar framework where we have a base 
config xml where we initialize the cxf bus with similar server side 
interceptors to apply SLA, collect metrics. Each service developer has to 
include this base config xml in their spring container. Now they can write 
their own interceptors and attach to the jaxrs endpoint if they want to have 
some additional features.  

3. The service component can call another service using client framework either 
over http or local.  

In case of situation 3 above, the soa client and server side components share 
the same spring context. As a result the bus level interceptors go for a toss.  

If we do add the bus level interceptors to jaxrs endpoint or cxf endpoint, 
issue is - custom interceptors written by individual service team will go for a 
toss since their interceptors phase may collide with already defined 
interceptors globally.  

So basically we want to have a global set of interceptors (these can not be run 
in same phase) and then individual client or service specific interceptors 
should be executed.  

Any suggestion - how to achieve this.  If we want to keep the global 
interceptors to endpoint or client, what is the best way to associate them.  

[~dkulp] - We have come up with a protobuf based provided to marshall/unmarshal 
protobuf messages.  If you guys allow, we can contribute it back. Let me know 
your thoughts.


was (Author: sambitd):
[~sergey_beryozkin] Here is the use cases - 

1. We have a client framework which is built on top of cxf and it initializes 
the cxf bus to inject few interceptors (mostly to capture SLA and enforce based 
on our policy enforcement strategy, collect metrics for analysis, automatic 
endpoint discovery, local caching etc).  These interceptors has to be executed 
for all calls going through client framework.  This client is used for both 
http/local transport communication. For local transport - we have customized to 
by pass serialization overhead and just does pure method call.  The entire 
client framework is used as an annotation against the interface proxy for 
example 
@SOAClient
BookStoreInterface bookProxy;

2. On the server side, we do have a similar framework where we have a base 
config xml where we initialize the cxf bus with similar server side 
interceptors to apply SLA, collect metrics. Each service developer has to 
include this base config xml in their spring container. Now they can write 
their own interceptors and attach to the jaxrs endpoint if they want to have 
some additional features.  

3. The service component can call another service using client framework either 
over http or local.  

In case of situation 3 above, the soa client and server side components share 
the same spring context. As a result the bus level interceptors go for a toss.  

If we do add the bus level interceptors to jaxrs endpoint or cxf endpoint, 
issue is - custom interceptors written by individual service team will go for a 
toss since their interceptors phase may collide with already defined 
interceptors globally.  

So basically we want to have a global set of interceptors (these can not be run 
in same phase) and then individual client or service specific interceptors 
should be executed.  

Any suggestion - how to achieve this.  If we want to keep the global 
interceptors to endpoint or client, what is the best way to associate them.  

> Multiple cxf buses in the same spring context 
> ----------------------------------------------
>
>                 Key: CXF-5364
>                 URL: https://issues.apache.org/jira/browse/CXF-5364
>             Project: CXF
>          Issue Type: Improvement
>            Reporter: Raj Anand
>             Fix For: NeedMoreInfo
>
>
> We have a client side CXF bus with in/out interceptors and , a server side 
> bus with in/out interceptors. If the same service is being used for both 
> client side and server side invocations , the 2 buses end up in the same 
> spring application context. As a result of this one CXF bus is over-written 
> and the interceptor chain for that CXF bus is lost.So how do we manage 
> multiple CXF buses in the same application context without the 2 buses 
> interfering with each other.



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to