We had to revert mina version to 2.0.25 from 2.2.1 to make it work in
production and  trying for other alternatives like apache netty.

On Fri, 9 Feb, 2024, 1:59 pm Emmanuel Lécharny, <elecha...@gmail.com> wrote:

> Hi Jonathan,
>
> in this very case, I think there is a race condition when using the
> SSLFilter in conjonction with the StateMachine filter.
>
> On 09/02/2024 05:33, Jonathan Valliere wrote:
> >   No, you should not have to create multiple instances.  The necessary
> > stateful data is saved to the Connection.
> >
> >
> > On Feb 1, 2024 at 5:22:36 AM, Kishore Mokkarala <kishore....@gmail.com>
> > wrote:
> >
> >> Any response would be greatly appreciated.
> >> ------------------------------------------
> >> M.V.S.Kishore
> >> 91-9886412814
> >>
> >>
> >> On Wed, 31 Jan 2024 at 22:17, Kishore Mokkarala <kishore....@gmail.com>
> >> wrote:
> >>
> >> Hi Emmanuel,
> >>
> >>
> >> Do we need to create a new instance of SSLFilter per tcp ip connection
> or
> >>
> >> can we reuse it ?
> >>
> >>
> >> For example, do we need to repeat the same code for each tcp ip
> connection
> >>
> >> ?
> >>
> >>
> >> *Approach 1:*
> >>
> >> for(int i=0;i< 500;i++)
> >>
> >> {
> >>
> >> NioSocketConnector connector = new NioSocketConnector();
> >>
> >> connector.getFilterChain().addLast("LoggingFilter",
> >>
> >> G10CaptureService.loggingFilter);
> >>
> >> connector.getFilterChain().addLast("codecFilter",
> >>
> >> G10CaptureService.probeCodecFilter);
> >>
> >> connector.getFilterChain().addLast("executorFilter",
> >>
> >> G10CaptureService.executorFilter);
> >>
> >> connector.getFilterChain().addLast("gpbMessageFilter",
> >>
> >> G10CaptureService.gpbMessageFilter);
> >>
> >> connector.getFilterChain().addLast("keepAliveFilter",
> >>
> >> G10CaptureService.keepAliveFilter);
> >>
> >> SslFilter sslFilter;
> >>
> >> try {
> >>
> >> SSLContext sslContext = TLSUtil.getSSLContext();
> >>
> >> sslFilter = new CustomSslFilter(sslContext);
> >>
> >> connector.getFilterChain().addFirst("sslFilter", sslFilter);
> >>
> >> } catch (Exception e) {
> >>
> >> e.printStackTrace();
> >>
> >> LOG.error("Exception during creating SSL context..." +
> >>
> >> XError.getStackTrace(e));
> >>
> >> }
> >>
> >> //io handler creation
> >>
> >> StateMachine stateMachine =
> >>
> >> StateMachineFactory.getInstance(IoHandlerTransition.class).create(
> >>
> >>                  G10MinaClient.CONNECTED, new G10MinaClient(processor));
> >>
> >>
> >>          IoHandler ioHandler = new
> >>
> >> StateMachineProxyBuilder().setStateContextLookup(
> >>
> >>                  new IoSessionStateContextLookup(new
> StateContextFactory() {
> >>
> >>                      @Override
> >>
> >>                      public StateContext create() {
> >>
> >>                          final G10StateContext stateContext = new
> >>
> >> G10StateContext();
> >>
> >>                          stateContext.setStartedTime(new Date());
> >>
> >>                          LOG.info("G10StateContext initialized at:{}
> >>
> >> ",System.currentTimeMillis());
> >>
> >>                          return stateContext;
> >>
> >>                      }
> >>
> >>                  })).create(IoHandler.class, stateMachine);
> >>
> >> connector.setHandler(ioHandler);
> >>
> >> connector.connect(primaryAddress);
> >>
> >> connectFuture.awaitUninterruptibly();
> >>
> >> if (connectFuture.isConnected()) {
> >>
> >> IoSession session = connectFuture.getSession();
> >>
> >> // Do something with the session if needed
> >>
> >> } else {
> >>
> >> System.err.println("Connection failed for iteration: " + i);
> >>
> >> }
> >>
> >> }
> >>
> >>
> >> *Approach 2:*
> >>
> >> Reuse the generic connector implemented above for opening all TCP/IP
> >>
> >> connections.
> >>
> >> //just do the below for getting connections for example
> >>
> >> NioSocketConnector connector = new NioSocketConnector();
> >>
> >> //filter chain creation
> >>
> >> //add SSLFilter to filer chain
> >>
> >>
> >> for(int i=0;i< 500;i++)
> >>
> >> {
> >>
> >> ConnectFuture connectFuture = connector.connect(serverAddress);
> >>
> >> connectFuture.awaitUninterruptibly();
> >>
> >> if (connectFuture.isConnected()) {
> >>
> >> IoSession session = connectFuture.getSession();
> >>
> >> // Do something with the session if needed
> >>
> >> } else {
> >>
> >> System.err.println("Connection failed for iteration: " + i);
> >>
> >> }
> >>
> >> }
> >>
> >>
> >> Which approach is better ?
> >>
> >>
> >> Regards,
> >>
> >> ------------------------------------------
> >>
> >> M.V.S.Kishore
> >>
> >> 91-9886412814
> >>
> >>
> >>
> >
>
> --
> *Emmanuel Lécharny* P. +33 (0)6 08 33 32 61
> elecha...@apache.org
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@mina.apache.org
> For additional commands, e-mail: users-h...@mina.apache.org
>
>

Reply via email to