/ / Cometa no Tomcat - tomcat, jetty, cometd

Cometa no Tomcat - tomcat, jetty, cometd

Eu estou tentando implantar cometd (3.0.1) no tomcat (7.0.50). Anteriormente eu estava usando o cometd (3.0.1) com o jetty 9.2.2.

Eu posso ver que cometd é dependente de alguma biblioteca jetty como mencionado Aqui , mas quais são essas dependências?

Eu também estava seguindo esta post, e foi confundido com "escritas assíncronas concorrentes".

Dizem que o "CometD 3 foi modificado para evitar gravações async simultâneas, que são permitidas pela especificação, mas que o Tomcat rejeita".

Significa algo relacionado a este "verdadeiro". Devo fazer isso falso? Cometa FAQ "s

Alguém pode ajudar?

obrigado

EDITAR
Com jetty eu estou usando os seguintes frascos. Qual deles eu posso remover se estiver usando o tomcat?

jetty-client.jar,
jetty-continuation.jar,
jetty-http.jar,
jetty-io.jar,
jetty-jmx.jar,
jetty-security.jar,
jetty-servlet.jar,
jetty-servlets.jar,
jetty-server.jar,
jetty-util.jar,
jetty-util-ajax.jar,
jetty-webapp.jar,
jetty-deploy.jar,
jetty-xml.jar,
jetty-annotations.jar

Respostas:

1 para resposta № 1

O CometD 3 é totalmente portátil em todos os contêineres do Servlet, portanto, ele funcionará no Tomcat, bem como no Jetty, modulo de erros em qualquer um dos contêineres.

As bibliotecas do Jetty que o CometD depende também são totalmente portáveis ​​(sendo apenas bibliotecas de utilitários). As dependências exatas dependem do recurso do CometD desejado. O conjunto mínimo é:

  • jetty-util
  • jetty-util-ajax

No entanto, é altamente recomendável que você use uma ferramenta de dependência como o Maven e esqueça de satisfazer manualmente as dependências do seu projeto.

CometD fornece o primer e tutoriais para você começar.

O padrão JSR 356 WebSocket fornece uma maneira de enviar mensagens WebSocket usando APIs assíncronas.

Enquanto a implementação Jetty do JSR 356 permiteuso simultâneo dessas APIs, a implementação do Tomcat não. Como o uso simultâneo dessas APIs é comum no CometD, descobriu-se que o CometD estava funcionando bem no Jetty, mas não no Tomcat. Portanto, o CometD foi modificado para evitar gravações simultâneas em prol da portabilidade entre os contêineres, pois a especificação JSR 356 era muito vaga sobre a semântica exata das APIs.

ATUALIZAÇÃO: Existem duas maneiras de lidar com o uso simultâneo das APIs do WebSocket.

A primeira é que a implementação do WebSocket cuida da simultaneidade; aplicativos como o CometD podem chamar as APIs do WebSocket simultaneamente e, internamente, a implementação synchronized blocos, filas ou qualquer outra soluçãoaplica-se para garantir que as mensagens não estão corrompidas. Dois segmentos poderão chamar as APIs do WebSocket simultaneamente, mas eventualmente o processamento da mensagem será serializado e as mensagens enviadas uma após a outra.

A segunda é fazer com que a aplicação (CometD) cuide da simultaneidade e aplique synchronized blocos, filas, etc. antes chamando as APIs do WebSocket.

O Jetty implementou a primeira solução, o Tomcat não. Por causa disso, o CometD foi modificado para implementar a segunda solução.

Isso significa que você pode usar a API do CometDsimultaneamente (o que eventualmente acabará chamando as APIs do WebSocket) sem preocupação, porque a simultaneidade é cuidada adequadamente pelo CometD, para que seja portável entre Servlet Containers e suas implementações WebSocket.

WebSocket async escreve não tem nada a ver com <async-supported> dentro web.xml, que você deve ter ativado de qualquer maneira, conforme especificado no documentação.