Показаны сообщения с ярлыком spring. Показать все сообщения
Показаны сообщения с ярлыком spring. Показать все сообщения

пятница, 17 июля 2020 г.

WebSocket API in Java

Hi!

Ever wondered how many abstractions you have to learn in order to use the API?

I just started to read about websocket api in java and it seems you need a lot to understand in order be on the same wave.

Lets start with RFC 6455, then you need to read JSR-356.
You think this is enough? :-)

If you use Spring then it provides you with WebSocketConfigurer which mimicries the low level web socket api.

If you do not like to play with low level api, then you can use AbstractWebSocketMessageBrokerConfigurer which adds messaging model with queues and topics using STOMP over websocket api and fallback for the clients who do not have websocket at hand.

You can also add external message broker which will serve your messages.
But what about security?

You have to use AbstractSecurityWebSocketMessageBrokerConfigurer in order to configure security.

So, together with security this will be 5 apis\concepts you need to know just in order to play with web sockets.

Is not that much?

понедельник, 1 октября 2012 г.

Spring и сервлеты. Инъектирование бинов.

Порой очень хочется, чтобы при создании сервлета автоматически инъектировались бины Spring.
Однако стоит отметить важную особенность, что жизненным циклов бинов управляет Spring, а жизненным циклом сервлета управляет контейнер сервлетов.  По этой причине автоматически инъектировать бины в сервлет не получится.



Есть альтернативное решение. Spring содержит интерфейс
org.springframework.web.HttpRequestHandler. В этом интерфейсе есть метод handleRequest(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response). Фактически это один в один метод service сервлета. Мы портируем наш сервлет так, что класс реализует данный интерфейс. Этот класс мы объявляем в spring. Далее в web.xml мы создаём описание сервлета. При этом имя сервлета должно совпадать с именем определённого бина spring, а класс сервлета - org.springframework.web.context.support.HttpRequestHandlerServlet.

Как результат - наш сервлет содержит инъектированные бины spring.

Аналогичное решение есть и для фильтров сервлета. Только в этом случае класс называется org.springframework.web.filter.DelegatingFilterProxy.

вторник, 18 сентября 2012 г.

Spring + MongoDB + Eclipse. Проблема с spring-mongo-1.0.xsd.


При использовани Spring + Mongo в Eclipse последний ругается на файл с бинами Spring.

<beans xmlns="http://www.springframework.org/schema/beans"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:context="http://www.springframework.org/schema/context"
          xmlns:mongo="http://www.springframework.org/schema/data/mongo"
          xsi:schemaLocation=
          "http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context-3.0.xsd
          http://www.springframework.org/schema/data/mongo
          http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd
          http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

Детальная ошибка говорит: "Cannot resolve the name 'repository:repository' to a(n) 'type definition' component" вspring-mongo-1.0.xsd.

Решение нашёл в замечательной заметке: http://stackoverflow.com/questions/11684673/spring-mongo-1-0-xsd-error.

Нужно изменить   http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd на
  http://www.springframework.org/schema/data/mongo/spring-mongo-1.1.xsd. После этого eclipse перестанет ругаться на проект.

воскресенье, 9 сентября 2012 г.

Spring + MongoDb. Первое знакомство.

В одном из моих проектов мне понадобилось использовать mongodb в качестве хранилища данных сессии пользователя.

Для работы на java с mongodb можно использовать java драйвер. Это довольно утомительное занятие. Поэтому я нашёл интересный проект spring-data-mongodb, который позволяет упростить работу с mongodb.

среда, 4 июля 2012 г.

Spring web services. Java doc.

Недавно я начал разбираться с новой для себя библиотекой - Spring Web Services. Скачал версию 2.1.0.

Оказалось, что эта версия не работает со Spring 2.5. Из недостатков дистрибутива можно отметить отсутствие javadoc. Однако после поисков мне удалось найти архив с javadoc по пути: http://repo1.maven.org/maven2/org/springframework/ws/spring-ws-core/2.1.0.RELEASE/spring-ws-core-2.1.0.RELEASE-javadoc.jar.

Также к недостатку можно отнести то, что при определённых условиях spring ws зависит от http client 3.1.1. Хотя http client уже давно имеет более свежую версию. Для меня было открытием, что spring ws не имеет встроенной возможности установить таймаут на ожидание обработки запроса в веб-сервис. Именно поэтому используется http client.

Что касается написания клиента, то здесь  Spring ws  предоставляет гибкие возможности. Например, можно посылать xml запросы в виде строк напрямую в сервис, а можно заставить spring ws самому заниматься преобразованием объектов в запросы и обратно. Мне, к сожалению, пришлось выбрать вариант работы с xml через строки, так как веб-сервис, с которым приходится работать, плохо документирован и определён. Поэтому часто приходится делать доработки клиента.

Подписывание xml также происходит довольно легко и быстро. Не надо тратить время на написание кода - всё можно сделать через файл конфигурации Spring. Пример постараюсь выложить позже.

Несмотря на то, что новичкам будет непросто сходу разобраться в этой библиотеке, я бы рекомендовал потратить время на её освоение.