You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@servicecomb.apache.org by Willem Jiang <wi...@gmail.com> on 2019/01/21 09:16:31 UTC

Java-Chassis interceptor

Hi,

Current we got an issue[1] to clean up the OmegaContext after the
invocation on the server side to clean up the thread local variable
which OmegaContext set.
Now I have a question for the handler of servicecomb java-chassis. How
can I do the same thing on the java-chassis SagaProviderHandler[2]?

[1]https://github.com/apache/servicecomb-pack/issues/384
[2]https://github.com/apache/servicecomb-pack/blob/master/omega/omega-transport/omega-transport-servicecomb/src/main/java/org/apache/servicecomb/pack/omega/transport/servicecomb/SagaProviderHandler.java

Willem Jiang

Twitter: willemjiang
Weibo: 姜宁willem

Re: Java-Chassis interceptor

Posted by wjm wjm <zz...@gmail.com>.
for option 2, the two events must be the same thread, and can set and clear
safely

Willem Jiang <wi...@gmail.com> 于2019年1月22日周二 上午9:12写道:

> Hi jimin,
>
> Thanks for the suggestion.
> I think the hardest part of this work is handling thread switching
> work,  event we could clean up the OmegaContext when the
> InvocationBusinessMethodFinishEvent happened, we still need to find
> the right moment to setup the OmegaContext.  So I think the option 1
> is the best way to go.
>
> Willem Jiang
>
> Twitter: willemjiang
> Weibo: 姜宁willem
>
> On Mon, Jan 21, 2019 at 10:51 PM wjm wjm <zz...@gmail.com> wrote:
> >
> > all the following solutions can support this:
> > 1.implement a handle, and require customers to configure it to be the
> last
> > handler
> >
> > @Override
> > public void handle(Invocation invocation, AsyncResponse asyncResp)
> > throws Exception {
> >   set context
> >
> >   try {
> >     invocation.next(asyncResp);
> >   } finally {
> >     clear context
> >   }
> > }
> >
> >
> > 2.subscribe events:
> >     org.apache.servicecomb.core.event.InvocationBusinessMethodStartEvent
> to
> > set context, this event means business method will be invoked in this
> thread
> >
>  org.apache.servicecomb.core.event.InvocationBusinessMethodFinishEvent to
> > clear context, this event means business method already returned in this
> > thread, for async method, this not means response data model is ready.
> >
> >     we can get EventBus by
> org.apache.servicecomb.core.SCBEngine#getEventBus
> >
> > Willem Jiang <wi...@gmail.com> 于2019年1月21日周一 下午5:16写道:
> >
> > > Hi,
> > >
> > > Current we got an issue[1] to clean up the OmegaContext after the
> > > invocation on the server side to clean up the thread local variable
> > > which OmegaContext set.
> > > Now I have a question for the handler of servicecomb java-chassis. How
> > > can I do the same thing on the java-chassis SagaProviderHandler[2]?
> > >
> > > [1]https://github.com/apache/servicecomb-pack/issues/384
> > > [2]
> > >
> https://github.com/apache/servicecomb-pack/blob/master/omega/omega-transport/omega-transport-servicecomb/src/main/java/org/apache/servicecomb/pack/omega/transport/servicecomb/SagaProviderHandler.java
> > >
> > > Willem Jiang
> > >
> > > Twitter: willemjiang
> > > Weibo: 姜宁willem
> > >
>

Re: Java-Chassis interceptor

Posted by Willem Jiang <wi...@gmail.com>.
Hi jimin,

Thanks for the suggestion.
I think the hardest part of this work is handling thread switching
work,  event we could clean up the OmegaContext when the
InvocationBusinessMethodFinishEvent happened, we still need to find
the right moment to setup the OmegaContext.  So I think the option 1
is the best way to go.

Willem Jiang

Twitter: willemjiang
Weibo: 姜宁willem

On Mon, Jan 21, 2019 at 10:51 PM wjm wjm <zz...@gmail.com> wrote:
>
> all the following solutions can support this:
> 1.implement a handle, and require customers to configure it to be the last
> handler
>
> @Override
> public void handle(Invocation invocation, AsyncResponse asyncResp)
> throws Exception {
>   set context
>
>   try {
>     invocation.next(asyncResp);
>   } finally {
>     clear context
>   }
> }
>
>
> 2.subscribe events:
>     org.apache.servicecomb.core.event.InvocationBusinessMethodStartEvent to
> set context, this event means business method will be invoked in this thread
>     org.apache.servicecomb.core.event.InvocationBusinessMethodFinishEvent to
> clear context, this event means business method already returned in this
> thread, for async method, this not means response data model is ready.
>
>     we can get EventBus by org.apache.servicecomb.core.SCBEngine#getEventBus
>
> Willem Jiang <wi...@gmail.com> 于2019年1月21日周一 下午5:16写道:
>
> > Hi,
> >
> > Current we got an issue[1] to clean up the OmegaContext after the
> > invocation on the server side to clean up the thread local variable
> > which OmegaContext set.
> > Now I have a question for the handler of servicecomb java-chassis. How
> > can I do the same thing on the java-chassis SagaProviderHandler[2]?
> >
> > [1]https://github.com/apache/servicecomb-pack/issues/384
> > [2]
> > https://github.com/apache/servicecomb-pack/blob/master/omega/omega-transport/omega-transport-servicecomb/src/main/java/org/apache/servicecomb/pack/omega/transport/servicecomb/SagaProviderHandler.java
> >
> > Willem Jiang
> >
> > Twitter: willemjiang
> > Weibo: 姜宁willem
> >

Re: Java-Chassis interceptor

Posted by wjm wjm <zz...@gmail.com>.
all the following solutions can support this:
1.implement a handle, and require customers to configure it to be the last
handler

@Override
public void handle(Invocation invocation, AsyncResponse asyncResp)
throws Exception {
  set context

  try {
    invocation.next(asyncResp);
  } finally {
    clear context
  }
}


2.subscribe events:
    org.apache.servicecomb.core.event.InvocationBusinessMethodStartEvent to
set context, this event means business method will be invoked in this thread
    org.apache.servicecomb.core.event.InvocationBusinessMethodFinishEvent to
clear context, this event means business method already returned in this
thread, for async method, this not means response data model is ready.

    we can get EventBus by org.apache.servicecomb.core.SCBEngine#getEventBus

Willem Jiang <wi...@gmail.com> 于2019年1月21日周一 下午5:16写道:

> Hi,
>
> Current we got an issue[1] to clean up the OmegaContext after the
> invocation on the server side to clean up the thread local variable
> which OmegaContext set.
> Now I have a question for the handler of servicecomb java-chassis. How
> can I do the same thing on the java-chassis SagaProviderHandler[2]?
>
> [1]https://github.com/apache/servicecomb-pack/issues/384
> [2]
> https://github.com/apache/servicecomb-pack/blob/master/omega/omega-transport/omega-transport-servicecomb/src/main/java/org/apache/servicecomb/pack/omega/transport/servicecomb/SagaProviderHandler.java
>
> Willem Jiang
>
> Twitter: willemjiang
> Weibo: 姜宁willem
>