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 № 1O 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.