21 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Java, Spring, Kurento и медиасервисы. Часть 2-я

Обзор медиасервера Kurento

Kurento — это бесплатный WebRTC медиасервер с открытым исходным кодом. Он распределяет медиапотоки между пользователями, транскодирует видео, делает запись.

В предыдущих статьях мы рассматривали архитектуру групповых видеочатов. Решение с использованием медиасервера в таких случаях самое надежное, но значительно увеличивает накладные расходы на сервер.

Если мы делаем групповой чат без медиасервера, то вынуждены либо соединить каждого клиента с каждым, либо выбрать одного клиента и передавать поток через него.

Когда видео транслирует один клиент, например в приложение для проведения вебинаров, можно передавать потоки по цепочке между всеми клиентами.

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

  • Лишняя нагрузка на ресурсы и трафик клиента из-за дублирования исходящего потока.
  • Низкое качество видео при большом количестве пользователей.
  • Реализация записи на клиенте — более трудоемкая задача. Если мы хотим сохранить файл на сервере, пользователю придется ждать окончания его загрузки.

Медиасервер решает эти проблемы. Он управляет, маршрутизирует и записывает медиапотоки. С ним наше приложение будет работать быстрее у пользователей.

Kurento и другие медиасервера

Существует несколько медиа серверов, которые поддерживают WebRTC.

Wowza Media Server

Wowza Media Server с 2004 года используется вместе с Flash. Передача медиапотоков осуществляется по RTMP протоколу. Летом 2016 года у Wowza Media Server вышло обновление с поддержкой WebRTC. Новая версия находится в стадии beta-тестирования. Для использования Wowza Media Server без ограничений необходима платная лицензия.

Jitsi Videobridge

Jitsi Videobridge является частью большого проекта Jitsi, который начал разрабатываться еще в 2005 году, как SIP-коммутатор. В 2014 разработчики добавили поддержку WebRTC.

Jitsi Videobridge — это маршрутизатор WebRTC потоков. Он перенаправляет медиа потоки между участниками чата. Jitsi Videobridge обладает меньшей функциональностью по сравнению с медиасерверами. Решения на его основе требуют меньше системных ресурсов. В отличие от медиасерверов Jitsi Videobridge не умеет записывать, транскодировать или смешивать медиапотоки вместе.

Kurento Media Server

Kurento — это бесплатный WebRTC медиа сервер, который начал разрабатываться в мадридском университете Rey Juan Carlos в 2010 году. В его основе лежала простая идея — создать медиасервер с открытым исходным кодом, который будет состоять из подключаемых модулей, обрабатывающих медиа потоки, а также предоставить простое API разработчикам приложений.

За последний год Kurento скачали более 20 000 раз и открыли на его основе более 200 проектов на GitHub. В сентябре 2016 года команды Twilio и Kurento объединились и теперь совместно работают над разработкой новой функциональности и повышением стабильности работы.

Возможности

Kurento Media Server предоставляет следующий функционал из коробки:

Этот функционал обеспечивают встроенные модули.

Разработчик может написать собственный модуль и подключить его к Kurento. Также в состав Kurento входит набор клиентских API для управления медиа сервером.

Kurento Media Server и его компоненты написаны на C/C++ и оптимизированы с точки зрения потребления ресурсов системы. Для фильтрации используются библиотеки Gstreamer или OpenCV. Один экземпляр Kurento Media Server (8 ядер, 2.4 ГГц, 16Гб RAM) может поддерживать порядка 1000 одновременных соединений пользователей.

Как работать с Kurento

Основной идеей Kurento являются медиа элементы — это программные блоки, каждый из которых выполняет одну определенную функцию. Медиа элемент имеет вход и выход и выполняет операцию над фреймами видео или частями аудио.

Kurento содержит множество различных медиа элементов в комплекте. Например, медиа элемент WebRtcEndpoint используется для получения и отправления WebRTC медиа потоков, а медиа элемент RecorderEndpoint записывает все входящие медиа потоки в файловую систему.

Архитектура приложений Kurento

Архитектура приложений Kurento состоит из двух уровней:

Медиа уровень непосредственно передает данные медиа потоков и осуществляет кодирование/декодирование.

Сигнальный уровень реализует бизнес-логику приложения — определяет, какие медиа элементы обрабатывают медиа потоки, управляет коммуникациями между компонентами системы и связывает клиента и Kurento.

Kurento API

Сигнальный уровень управляет медиасервером посредством Kurento API. Для Node.js и Java есть официальные SDK. Можно написать свое SDK под любую платформу, так как коммуникация между сигнальным уровнем и Kurento Media Server происходит через протокол Kurento, который основан на WebSockets и JSON-RPC. Например, мы можем управлять медиасервером напрямую и из браузера, но это не самое гибкое решение. С помощью отдельного сигнального сервера приложение масштабируется и, в зависимости от нагрузки, подключать пользователей к разным экземплярам Kurento Media Server. Этого не получилось бы при управлении медиасервером с клиента.

Медиа элементы

Разработка приложений с Kurento подобна игре в конструктор Lego — необходимо собрать из медиа элементов цепочку. Разработчик определяет, какие медиа элементы ему нужны, и собирает их в нужной последовательности. Соединяются элементы одинаково — у элемента-источника вызывается метод connect, а его аргументом является элемент, который нужно добавить в цепочку следующим:

Пример

Для начала работы нужно установить медиа сервер. Создадим приложение, которое запишет WebRTC потоки на сервере. Для этого понадобится два медиа элемента: WebRtcEndpoint и RecorderEndpoint. При подключении пользователя, мы получим его медиапоток из WebRTCEndpoint и запишем в видеофайл на сервере с помощью RecorderEndpoint.

Медиа элементы соединяем так:

Возможности медиасервера не ограничены видеочатами или записью — можно передать по WebRTC на клиент видео с сетевой камеры или поток с SIP сервера для VoIP звонков. В документации Kurento много примеров на Node.js и Java, которые подойдут для более подробного изучения работы с медиасервером.

Итоги

Kurento является решением для реализации сложных мультимедийных проектов в области видеотехнологий.

Kurento включает обширный набор инструментов для разработки и предоставляет разработчику возможность дополнять и расширять его.

После объединения с командой Twilio у Kurento появились большие перспективы развития в сторону гибкой облачной масштабируемой медиа системы.

Kurento является стабильной и зрелой технологией для создания приложений. Мы используем Kurento в нескольких наших проектах, один из которых — система для онлайн образования, призер DC Tech Day 2014 — BrainCert.

Kurento Java Tutorial – Hello WorldВ¶

This web application has been designed to introduce the principles of programming with Kurento for Java developers. It consists of a WebRTC video communication in mirror (loopback). This tutorial assumes you have basic knowledge of Java, JavaScript, HTML and WebRTC. We also recommend reading the section About Kurento and WebRTC before starting this tutorial.

This application uses HTTPS . It will work fine is you run it in localhost and accept a security exception in the browser, but you should secure your application if running remotely. For more info, check Configure a Java server to use HTTPS .

Quick startВ¶

Follow these steps to run this demo application:

Install Kurento Media Server: Installation Guide .

Run these commands:

Open the demo page with a WebRTC-compliant browser (Chrome, Firefox): https://localhost:8443/

Click on Start to begin the demo.

Grant access to your webcam.

As soon as the loopback connection is negotiated and established, you should see your webcam video in both the local and remote placeholders.

Click on Stop to finish the demo.

Understanding this exampleВ¶

Kurento provides developers a Kurento Java Client to control the Kurento Media Server. This client library can be used in any kind of Java application: Server Side Web, Desktop, Android, etc. It is compatible with any framework like Java EE, Spring, Play, Vert.x, Swing and JavaFX.

This Hello World demo is one of the simplest web applications you can create with Kurento. The following picture shows a screenshot of this demo running:

Kurento Hello World Screenshot: WebRTC in loopback

The interface of the application (an HTML web page) is composed by two HTML5 tags: one showing the local stream (as captured by the device webcam) and the other showing the remote stream sent by the media server back to the client.

The logic of the application is quite simple: the local stream is sent to the Kurento Media Server, which sends it back to the client without modifications. To implement this behavior, we need to create a Media Pipeline composed by a single Media Element , i.e. a WebRtcEndpoint, which holds the capability of exchanging full-duplex (bidirectional) WebRTC media flows. This media element is connected to itself so that the media it receives (from browser) is sent back (to browser). This media pipeline is illustrated in the following picture:

Kurento Hello World Media Pipeline in context

This is a web application, and therefore it follows a client-server architecture. At the client-side, the logic is implemented in JavaScript. At the server-side, we use a Spring-Boot based application server consuming the Kurento Java Client API, to control Kurento Media Server capabilities. All in all, the high level architecture of this demo is three-tier. To communicate these entities, two WebSockets are used:

  1. A WebSocket is created between client and application server to implement a custom signaling protocol.
  2. Another WebSocket is used to perform the communication between the Kurento Java Client and the Kurento Media Server.
Читать еще:  Создание архитектуры программы или как проектировать табуретку

This communication takes place using the Kurento Protocol. For a detailed description, please read this section: Kurento Protocol .

The diagram below shows a complete sequence diagram, of the interactions with the application interface to: i) JavaScript logic; ii) Application server logic (which uses the Kurento Java Client); iii) Kurento Media Server.

Complete sequence diagram of Kurento Hello World (WebRTC in loopbak) demo

The following sections analyze in depth the server (Java) and client-side (JavaScript) code of this application. The complete source code can be found in GitHub.

Application Server LogicВ¶

This demo has been developed using Java in the server-side, based on the Spring Boot framework, which embeds a Tomcat web server within the generated maven artifact, and thus simplifies the development and deployment process.

You can use whatever Java server side technology you prefer to build web applications with Kurento. For example, a pure Java EE application, SIP Servlets, Play, Vert.x, etc. Here we chose Spring Boot for convenience.

In the following, figure you can see a class diagram of the server side code:

Server-side class diagram of the HelloWorld app

The main class of this demo is HelloWorldApp.

As you can see, the KurentoClient is instantiated in this class as a Spring Bean. This bean is used to create Kurento Media Pipelines, which are used to add media capabilities to the application. In this instantiation we see that we need to specify to the client library the location of the Kurento Media Server. In this example, we assume it is located at localhost , listening in port 8888. If you reproduce this example, you’ll need to insert the specific location of your Kurento Media Server instance there.

Once the Kurento Client has been instantiated, you are ready for communicating with Kurento Media Server and controlling its multimedia capabilities.

This web application follows a Single Page Application architecture ( SPA ), and uses a WebSocket to communicate with the application server, by means of requests and responses. Specifically, the main app class implements the interface WebSocketConfigurer to register a WebSocketHandler that processes WebSocket requests in the path /helloworld .

The class HelloWorldHandler implements TextWebSocketHandler to handle text WebSocket requests. The central piece of this class is the method handleTextMessage . This method implements the actions for requests, returning responses through the WebSocket. In other words, it implements the server part of the signaling protocol depicted in the previous sequence diagram.

The start() method performs the following actions:

Configure media processing logic. This is the part in which the application configures how Kurento has to process the media. In other words, the media pipeline is created here. To that aim, the object KurentoClient is used to create a MediaPipeline object. Using it, the media elements we need are created and connected. In this case, we only instantiate one WebRtcEndpoint for receiving the WebRTC stream and sending it back to the client.

Create event listeners. All objects managed by Kurento have the ability to emit several types of events, as explained in Endpoint Events . Application Servers can listen for them in order to have more insight about what is going on inside the processing logic of the media server. It is a good practice to listen for all possible events, so the client application has as much information as possible.

WebRTC SDP negotiation. In WebRTC, the SDP Offer/Answer model is used to negotiate the audio or video tracks that will be exchanged between peers, together with a subset of common features that they support. This negotiation is done by generating an SDP Offer in one of the peers, sending it to the other peer, and bringing back the SDP Answer that will be generated in response.

In this particular case, the SDP Offer has been generated by the browser and is sent to Kurento, which then generates an SDP Answer that must be sent back to the browser as a response.

Gather ICE candidates. While the SDP Offer/Answer negotiation is taking place, each one of the peers can start gathering the connectivity candidates that will be used for the ICE protocol. This process works very similarly to how a browser notifies its client code of each newly discovered candidate by emitting the event RTCPeerConnection.onicecandidate; likewise, Kurento’s WebRtcEndpoint will notify its client application for each gathered candidate via the event IceCandidateFound .

Client-Side LogicВ¶

Let’s move now to the client-side of the application. To call the previously created WebSocket service in the server-side, we use the JavaScript class WebSocket . We use a specific Kurento JavaScript library called kurento-utils.js to simplify the WebRTC interaction with the server. This library depends on adapter.js, which is a JavaScript WebRTC utility maintained by Google that abstracts away browser differences.

These libraries are brought to the project as Maven dependencies which download all required files from WebJars.org; they are loaded in the index.html page, and are used in the index.js file.

In the following snippet we can see the creation of the WebSocket in the path /helloworld . Then, the onmessage listener of the WebSocket is used to implement the JSON signaling protocol in the client-side. Notice that there are three incoming messages to client: startResponse , error , and iceCandidate . Convenient actions are taken to implement each step in the communication. For example, in function start , the function WebRtcPeer.WebRtcPeerSendrecv of kurento-utils.js is used to start a WebRTC communication.

DependenciesВ¶

This Java Spring application is implemented using Maven . The relevant part of the pom.xml is where Kurento dependencies are declared. As the following snippet shows, we need two dependencies: the Kurento Client Java dependency (kurento-client) and the JavaScript Kurento utility library (kurento-utils) for the client-side. Other client libraries are managed with WebJars.

© Copyright 2018, Kurento Revision 7d1bc2cc .

Built with Sphinx using a theme provided by Read the Docs.

Kurento has been supported under Project LERNIM (RTC-2016-4674-7), co-funded by the Ministry of Economy, Finance and Competitiveness of Spain, as well as by the European Regional Development Fund, whose main goal is to promote technological development, innovation and high-quality research.

Soft, интернет, безопасность: новости, статьи, советы, работа

Избранное сообщение

Фетісов В. С. Комп’ютерні технології в тестуванні. Навчально-методичний посібник. 2-ге видання, перероблене та доповнене / Мои публикации

В 10-х годах я принимал участие в программе Европейского Союза Tempus “Освітні вимірювання, адаптовані до стандартів ЄС”. В рамк.

вторник, 15 января 2019 г.

Java, Spring, Kurento и медиасервисы. Часть 2-я / Программирование на Java

В предыдущей статье я описывал мой эксперимент с приложением «HelloWorld» из Kurento-туториала. В этой статье я продолжу обзор Web приложений на Java Spring и Kurento Media Server-a.

Следующее приложение из туториала называется WebRTC Magic Mirror. Из названия следует, что зеркало отражает немного приукрашенную действительность. В этом приложении в дополнение к предыдущему применяется фильтр компьютерного зрения «FaceOverlay filter». При обнаружении в камере лица человека Kurento Media Server «надевает» на голову кепку Супер Марио. Если в обьективе несколько лиц, каждому надевается кепка.

Запускаем Kurento Media Server

Если вы уже склонировали Kurento Java tutorial, не выполняйте следующую команду:

Переходим в директорию с проектом

Компилируем проект командой Maven

Или, как в моем случае, запустим из Идеи.

В браузере Firefox заходим по адресу https:// localhost:8443/

В открывшемся окне нажимаем на кнопку «Start», должны увидеть картинку:

Из этого опыта делаем вывод: морда моего кота совсем не похожа на человеческую, поэтому кепка Супер Марио ему не положена.

Разберемся, как работает этот пример.

Структура приложения повторяет предыдущее приложение HelloWorld. Так же в приложении взаимодействуют три программных блока: на стороне браузера код Java Script, на стороне сервера Spring-Boot Web приложение, которое управляет Kurento Media Server-ом. Эти программные блоки обмениваются друг с другом сообщениями на базе Json протокола.

Читать еще:  Родительский контроль в браузере Google Chrome


На схеме показано, что в KMS программный блок WebRtcEndpoint теперь не заворачивает передачу мультимедийного сигнала на прием, а предварительно пропускает его через FaceOverlayFilter, который определяет наличие лица на картинке.

Обмен сигналами между программными блоками примерно такой же, как в приложении HelloWorld.


Основные действия в приложении выполняются при нажатии на кнопку «Start». Создается MediaPipeline, через которую будет передаваться медиа траффик, создаются медиа элементы WebRtcEndpoint и FaceOverlayFilter, создается соединение между ними.

Здесь упрощенная последовательность операторов, которая формирует цепочку программных блоков для данного приложения.

Рассмотрим следующее приложение из Kurento туториала под названием RTP Receiver.

Если не запущен, запускаем Kurento Media Server

Если вы уже склонировали Kurento Java tutorial, не выполняйте следующую команду:

Переходим в директорию с проектом

Компилируем проект командой Maven

или, как в моем случае, запустим из Идеи.

В браузере Firefox заходим по адресу https:// localhost:8443/

в открывшемся окне нажимаем на кнопку «Start»


В окне KMS connection info появляются данные для настройки команды для Gstreamer-а: аудио, видео порт, IP-адрес. Эти данные, а так же путь к файлу нужно указать в команде.

Кстати, проверьте установлен ли у вас Gstreamer

Подставили порты и прочее, в консоли запустили команду Gstreamer-a.

Теперь, внимание играем в лотерею. Я не знаю будет или нет у вас проигрываться файл. У меня из моей небогатой коллекции клипов стали проигрываться файлы с расширением *.mpg


Здесь проигрывается клип Натальи Могилевской. Клипы с другим расширением либо не проигрываются, либо проигрываются с искажением звука.

Из этого опыта делаем вывод: не все йогурты одинаково полезны.

Разберем работу этого приложения. Вначале создается Media Pipeline для передачи медиа траффика, а также RtpEndpoint и WebRtcEndpoint, последний выполняет работу приемника RTP пакетов и применяется для показа видео ролика.

Здесь упрощенная последовательность операторов этой части Java приложения:

На этом завершаю обзор этой части Kurento туториала. Удачного программирования!

Информационный портал по безопасности

Java, Spring, Kurento и медиасервисы

Существует уже немало медиа сервисов, но люди продолжают их создавать. Решил и я заняться изобретением своего велосипеда.

Натолкнувшись на проект Kurento, понял что это то, что мне надо. Данная статья является частично переводом Kurento Documentatin, частично это заметки о моих экспериментах с KurentoTutorial. Надеюсь что разработчикам, приступающим к изучению данного вопроса, этот материал поможет быстрее освоить тему создания медиа сервисов.

Juan Carlos Universidad. Kurento — это WebRTC Media Server и набор клиентского API, который упрощает создание приложений для Web и смартфонов. Это могут быть сервисы видеотелефонии, видеоконференцсвязи, мониторинг картинок от видеокамер с распознаванием движения, может проигрывать аудио-видео контент из файла или из сети, распознавать лицо или автомобильные номера, и много чего еще. Код Kurento является опенсорсным, распространяется на условиях лицензии Apache License Version 2.0 и доступен на Гитхабе. Как утверждают создатели Kurento, он похож на Lego, из его программных блоков можно сделать много полезных приложений. Могут применяться блоки прямо «из коробки», но можно разрабатывать так же свои плагины при желании.

Примеры Web приложений приведены на Java, Node.js, javascript, хотя можно разрабатывать на любом языке, главное что бы обмен с Kurento Media Server-ом происходил на понятном ему Kurento-протоколе. Правда, для вышеупомянутых языков уже изобретены библиотеки, так что мороки будет меньше. А поскольку я изучаю Java и Spring, мои комментарии будут для этих примеров.

Всякий уважающий себя туториал начинается с приложения HelloWorld. Не стал исключением и данный. Но прежде чем написать первое приложение, нужно установить KMS — Kurento Media Server, который написан на C++ и устанавливается только на Ubuntu или Linux Mint, причем версия (на момент написания статьи) должна быть между 14 и 18. Я сразу установил Linux Mint 19 версию и KMS не установился, пришлось откатывать на 18-ю.

Ну вот установили систему, Intellij Idea, добавляем Kurento репозиторий и устанавливаем KMS:

Стартуем KMS командой:

Клонируем весь туториал для Java:

Переходим в нужную директорию

Запускаем приложение под Maven или, как в моем случае, через Идею. После запуска Web приложения заходим через браузер Firefox по адресу localhost:8443/ видим страничку, где после нажатия на кнопку «Start» получаем что-нибудь похожее на это

В левом видео-элементе отображается картинка от Web камеры, а в правом та же картинка, но изображение пропущено через KMS петлей (loop-back).

На основании данного опыта делаем вывод: HelloWorld получается запустить почти всегда.
Теперь разберемся как это работает. На данном рисунке показана схема подключения частей нашего опыта.

Схематически выглядит так, как я описал. Логически наш опыт состоит из трех главных частей: размещенный в браузере javascript Client, только что скомпилированный Application Server и установленный в самом начале Kurento Media Server. Взаимодействие этих частей показано на рисунке ниже.

javascript Client отправляет Application Server — у текстовое сообщение «Start». Application Server выполняет три основные действия в этом приложении:

Создает MediaPipeline, по которой будет передаваться медиа-трафик, создает WebRtcEndpoint-объект, обрабатывающий медиа-трафик и заворачивает передачу этого блока себе на прием.

На этом краткое ознакомление с приложением HelloWorld, использующим Kurento, завершаю. Желаю успешного создания медиа-сервисов.

Java, Spring, Kurento и медиасервисы. Часть 2-я

Java — строго типизированный объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems (в последующем приобретённой компанией Oracle). Приложения Java обычно транслируются в специальный байт-код, поэтому они могут работать на любой компьютерной архитектуре, с помощью виртуальной Java-машины. Дата официального выпуска — 23 мая 1995 года.

Стена группы

Нельзя так просто взять и написать SELECT, если вендор не разрешает… но мы таки напишем

Однажды, ещё не в студёную, но уже зимнюю пору, а конкретно пару месяцев назад, для проекта, над которым я работаю (нечто Geospatial на основе Big Data), потребовалось быстрое NoSQL / Key-Value хранилище.

Терабайты исходников мы вполне успешно прожёвываем при помощи Apache Spark, но схлопнутый до смешного объёма (всего лишь миллионы записей) конечный результат расчётов надо где-то хранить. И очень желательно хранить таким образом, чтобы его можно было по ассоциированным с каждой строкой результата (это одна цифра) метаданным (а вот их довольно много) быстро найти и отдать наружу.

Java, Spring, Kurento и медиасервисы. Часть 2-я

В
предыдущей статье я описывал мой эксперимент с приложением «HelloWorld» из Kurento-туториала. В этой статье я продолжу обзор Web приложений на Java Spring и Kurento Media Server-a.

Следующее приложение из туториала называется WebRTC Magic Mirror. Из названия следует, что зеркало отражает немного приукрашенную действительность. В этом приложении в дополнение к предыдущему применяется фильтр компьютерного зрения «FaceOverlay filter». При обнаружении в камере лица человека Kurento Media Server «надевает» на голову кепку Супер Марио. Если в обьективе несколько лиц, каждому надевается кепка.

Знакомство с реактивным программированием в Spring

На этой неделе мы ожидаем из типографии новую
книгу по Spring 5:

Среди интересных возможностей Spring 5 отдельного упоминания заслуживает реактивное программирование, о реализации которого в этом фреймворке кратко рассказывает предлагаемая статья Мэтта Рэйбла (Matt Raible). В вышеупомянутой книге реактивные паттерны рассмотрены в главе 11.

Соавтором Мэтта выступил Джош Лонг, автор еще одной отличной книги про Java и Spring, ”
Java в облаке”, вышедшей у нас прошлым летом.

Как не мусорить в Java

Существует популярное заблуждение о том, что если не нравится garbage collection, то надо писать не на Java, а на C/C++. Последние три года я занимался написанием low latency кода на Java для торговли валютой, и мне приходилось всячески избегать создания лишних объектов. В итоге я сформулировал для себя несколько простых правил, как свести аллокации в Java если не до нуля, то до некого разумного минимума, не прибегая к ручному управлению памятью. Возможно, кому-то из сообщества это тоже будет полезно.

Оптимизация графики. Интересный Concave Hull

В один прекрасный момент, в ходе разработки игры, я столкнулся с вопросом производительности на современных ПК. У нашего моделлера достаточно мощный современный компьютер красной сборки. Но у него наш проект жутко тормозил, загружая одно ядро процессора.

Причина проста — в новых процессорах много ядер, но по факту они менее производительны в однопоточных приложениях. На тот момент, у меня был рендер в один поток. Но на самом деле причины была не столько в этом. И в процессе поиска проблемы, я решил посчитать сколько полигонов присутствует в сцене:

На средней игровой карте, при максимальном отдалении и при большом скоплении пальм —
15 824 756 треугольников! Почти 16 миллионов! Огромная цифра.

Читать еще:  Disk overloaded 100 utorrent что делать?

Spring Data JPA

В статье опишу использование Spring Data.

Spring Data — дополнительный удобный механизм для взаимодействия с сущностями базы данных, организации их в репозитории, извлечение данных, изменение, в каких то случаях для этого будет достаточно объявить интерфейс и метод в нем, без имплементации.

  1. Spring Repository
  2. Методы запросов из имени метода
  3. Конфигурация и настройка
  4. Специальная обработка параметров
  5. Пользовательские реализации для репозитория
  6. Пользовательский Базовый Репозиторий
  7. Методы запросов — Query

Кастомизация резолвинга зависимостей в Spring

Привет! Меня зовут Андрей Неведомский и я главный инженер в СберТехе. Я работаю в команде, которая занимается разработкой одного из системных сервисов ЕФС (Единой Фронтальной Системы). В своей работе мы активно используем Spring Framework, в частности его DI, и время от времени сталкиваемся с тем, что резолвинг зависимостей в спринге оказывается недостаточно «умным» для нас. Эта статья – результат моих попыток сделать его умнее и в целом разобраться с тем, как он работает. Надеюсь, и вы сможете узнать из неё что-то новое об устройстве спринга.

Parse & Android: рекомендации начинающим разработчикам

В данной статье я бы хотел поделиться общими впечатлениями от использования BaaS – решения под названием Parse для разработки бэкэнда Android-приложения, рассказать о всех «подводных камнях», с которыми мне пришлось столкнуться в период разработки. Впервые эту платформу мне посоветовали коллеги по работе, когда я был юниором, и за плечами был всего 1 коммерческий проект. Мотивацией к написанию данной статьи послужили нервы и время, которые я потратил для поиска совместимых версий библиотек и обдумывание странных решений разработчиков платформы, ну или просто потому, что я до сих пор не нашел статей по этому поводу. Так же я ничего не буду рассказывать о том, что такое Parse и как его подключить и настроить, но на всякий случай я оставлю все необходимые ссылки, где можно почитать об этом.

AOP vs Функции

Аспе́ктно-ориенти́рованное программи́рование (AOP) довольно популярная парадигма программирования. В
статье на Wikipedia хорошо объяснена мотивация этого подхода.

Моки, стабы и шпионы в Spock Framework

Spock предоставляет 3 мощных (но разных по сути) инструмента, упрощающих написание тестов: Mock, Stub и Spy.

Довольно часто коду, который нужно протестировать, требуется взаимодействовать с внешними модулями, называющимися зависимостями (в оригинальной статье используется термин collaborators, который не очень распространён в русскоязычной среде).

Модульные тесты чаще всего разрабатываются для тестирования одного изолированного класса при помощи различных вариантов моков: Mock, Stub и Spy. Так тесты будут надёжнее и будут реже ломаться по мере того, как код зависимостей эволюционирует.

Такие изолированные тесты менее подвержены проблемам при изменении внутренних деталей реализации зависимостей.

От переводчика: каждый раз, когда я использую Spock Framework для написания тестов, я чувствую, что могу ошибиться при выборе способа подмены зависимостей. В этой статье есть максимально краткая шпаргалка по выбору механизма для создания моков.

Снимки событий в Axonframework 3, улучшаем производительность

Обзор фреймврока Axonframework

Axonframework это фреймфорк реализующий несколько принципов и паттернов проектирования такие как:

CQRS – разделяет обработку запросов на чтение и запись данных

Event Sourcing – это когда состояние приложения хранится как цепочка событий

DDD Aggregate – доменный объект (domain object) который хранит состояние

Один из недостатков хранения конечного состояния приложения в виде цепочки событий – это количество хранимых и обрабатываемых событий. К счастью, Axonframework позволяет создавать снимок событий (snapshot event), который содержит в себе результат нескольких событий (domain event).

Java, Spring, Kurento и медиасервисы

Существует уже немало медиа сервисов, но люди продолжают их создавать. Решил и я заняться изобретением своего велосипеда.

Натолкнувшись на проект
Kurento, понял что это то, что мне надо. Данная статья является частично переводом
Kurento Documentatin, частично это заметки о моих экспериментах с KurentoTutorial. Надеюсь что разработчикам, приступающим к изучению данного вопроса, этот материал поможет быстрее освоить тему создания медиа сервисов.

Новые ключевые слова в Java

В ближайшем будущем в языке Java появятся новые фичи, над которыми сейчас идет работа в рамках проектов Valhalla, Panama и Loom. Расширение языка — дело непростое, тем более — языка, в котором акцент делается на обратную совместимость; поэтому для того, чтобы их интеграция в Java прошла органично, архитекторам языка приходится решать накопившиеся фундаментальные вопросы.

Вчера (8 января) Брайан Гетц, работающий в Oracle на должности Java Language Architect, опубликовал в рассылке Project Amber
письмо «Нам нужно больше ключевых слов, капитан!», в котором предложил способ решения проблемы добавления в язык новых ключевых слов. Вследствие чего в языке могут появиться такие ключевые слова, как
non-null,
non-final,
eventually-final и
this-return (полный список ждет вас под катом в конце поста).

Поскольку в прошлом эта проблема возникала в языке нечасто, обычно над ней особо не задумывались и «старались как можно быстрее свалить с шеи»; из-за недостатков уже существующих подходов в будущем их применение будет проблематичным, и в связи с этим было решено сработать на упреждение. Предлагаемое решение: попытаться расширить набор лексических форм, которые можно использовать в качестве ключевых слов: разрешить ключевые слова, разделенные дефисом, в составе которых будет использоваться одно (или более) уже существующее ключевое слово или зарезервированный идентификатор.

Важное замечание: Брайн отмечает, что новые ключевые слова приведены исключительно в качестве иллюстративного примера, и что заострять на них свое внимание не стоит. Однако, очевидно, что перед нами продуманная демонстрация того, как синтаксис языка может измениться в будущем — в письме автор упоминает, что эта идея поможет добавить в Java многие желаемые недостающие языковые конструкции.

Java Spring Boot

Уроки Java Spring Boot / #1 – Создание веб-сайта на Java

Видеоурок

Полезные ссылки:

Информация про Java Spring Boot

Платформа Java Spring Boot была впервые выпущена в 2004 году. С тех пор платформа постоянно обновляется и пополняется новыми функциями. На сегодняшний день платформа является наиболее продвинутым фреймворком для создания веб сайтов на основе языка Java.

C первых дней выпуска Spring был тепло встречен разработчиками Java, так как это был первый достойный конкурент технологии JavaBeans . JavaBeans, как и Spring, предоставляют набор различных решений для реализации веб проектов.

На основе Spring Boot вы можете создавать веб сайты различных жанров и возможностей. Вы можете создать простой одностаничник или крупный веб проект для какого-либо международного банка.

Spring содержит хорошо описанную документацию, а также множество готовых решений, что можно копировать и использовать в своих проектах.

Технология MVC

Spring реализует шаблон проектирования MVC. MVC расшифровывается как «model-view-controller» или же модель вид контроллер. Данный шаблон позволяет структурировать все файлы внутри проекта и делает чтобы каждый файл отвечал лишь за свою часть работы.

Рассмотрим простой запрос к веб сайту, написанному на Spring Boot. Когда пользователь переходит на какую-либо страницу сайта, то переход отслеживается в контроллере. Контроллер понимает по какому URL адресу перешёл пользователь и далее обращается к модели. Модели могут обратиться к базе данных, получить оттуда какие-то значение, выполнить различные вычисления и далее вернуть эти данные обратно в контроллер. Далее контроллер передает все данные в шаблон, который как раз и показывается пользователю. Шаблон в свою очередь представляет из себя простую HTML страницу с различными текстами, кнопками, картинками и прочим.

Таким образом, приложение делиться на три части, каждая из которых выполняет свою роль в проекте.

Создание проекта

Создать пустой шаблонный проект можно самому или же можно воспользоваться специальным сайтом для подготовки готового проекта. Если создавать пустой проект самому, то необходимо следовать официальной документации .

В случае использования сервиса Start Spring.io вы можете выбрать нужные для вас пакеты, после чего нажать на клавишу «Generate» для генерации и скачивания архивного проекта.

Чтобы открыть проект вы можете воспользоваться любой средой разработки, к примеру программой IntelliJ IDEA .

План курса

В ходе курса мы научимся работать с Java Spring Boot. Мы рассмотрим все основные моменты при работе с данным фреймворком. За курс мы создадим множество шаблонов, рассмотрим работу с шаблонизаторами, рассмотрим работу с базой данных, а также создадим небольшой полноценный проект по типу веб-блога.

К концу курса у вас будет достаточно знаний чтобы начать разрабатывать сайты на основе Java Spring.

Перед изучением курса вам необходимо ознакомиться с языками для вёрстки сайта: HTML , CSS и JavaScript . Также вам необходимо обладать навыками работы с языком Java прежде чем изучать платформу Спринг. Все дополнительные курсы можно посмотреть на нашем ресурсе.

голоса
Рейтинг статьи
Ссылка на основную публикацию
Статьи c упоминанием слов: