SlideShare a Scribd company logo
JavaScript и интеграция бизнес-систем


                         Михаил Захаров
• 79 регионов
• 18 000 поставщиков
• 30 000 пунктов оплаты
• Банки из Топ-100
• «Почта России»


                          2
ПЛАТЕЖНАЯ СИСТЕМА                     ПОСТАВЩИК УСЛУГ




                    СИСТЕМА «ГОРОД»




                                                  3
Протокол
системы




           JavaScript
             Magic




Унаследованные протоколы поставщиков   4
.js   .js               .js   .js

      Scripting Runtime

            Java SE 6
                                    5
.js                .js                .js            .js

                     Scripting Runtime

XHR.jar   Mail.jar         ORADB.jar    Crypto.jar   XML.jar

                            Java SE 6                          6
package CoolAppServer;
public interface IApplication {
  public void DoSomething(Object context)
       throws Throwable;
}




                                            7
function IApplication() {
  this.DoSomething = function(context){
    return true;
  }
}

new IApplication();



                                          8
getInterface
Java Code                        JavaScript Code

                           put
                                   JS-wrapper

                                                   9
ПРИКЛАДНОЙ КОД
ПРИКЛАДНОЙ РАЗРАБОТЧИК
                               JavaScript


СРЕДА ИСПОЛНЕНИЯ           Scripting Runtime
JAVA-РАЗРАБОТЧИК

                         Crypto.jar     XML.jar


ПЛАТФОРМА
                                Java SE 6
СТОРОННИЙ ПРОДУКТ

                                               10
Встроен в Java 6   Распространен

      Почему JavaScript ?
Низкий порог
                      Хорошо поддержан
 вхождения



                                         11
Вопросы?
http://habrahabr.ru/users/ne_kotin/blog/



                                       12
Информационный центр:
8 800 200 12 24
(бесплатно, круглосуточно)


www.kvartplata.ru

More Related Content

PDF
RxJava
PDF
Курс Java-2016. Занятие 08. Итераторы, многопоточность
PDF
Курс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекции
PDF
Курс Java-2016. Занятие 10. Reflection, mock
PDF
Курс Java-2016. Занятие 12. DBMS, JDBC
PDF
Dmitriy Kouperman Working with legacy systems. stabilization, monitoring, man...
PDF
Zabbix в badoo, от lld к super discovery
PDF
Стачка 2017: Golang – опыт промышленной разработки
RxJava
Курс Java-2016. Занятие 08. Итераторы, многопоточность
Курс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекции
Курс Java-2016. Занятие 10. Reflection, mock
Курс Java-2016. Занятие 12. DBMS, JDBC
Dmitriy Kouperman Working with legacy systems. stabilization, monitoring, man...
Zabbix в badoo, от lld к super discovery
Стачка 2017: Golang – опыт промышленной разработки

What's hot (19)

PDF
Alexei Vladishev - Zabbix 3.0 что дальше
ODP
Обработка ошибок и исключений
PDF
Автоматизация мониторинга распределенной сети подразделений
PDF
Курс Java-2016. Занятие 06. Файлы и ввод-вывод
PDF
FrontDays #1. Алексей Ульянов, React.js и методологии разработки на нём
PPTX
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
PDF
Real-Time Error Alerting & Debugging Tools: Rollbar - Alex Petrov
PDF
ZooKeeper Java Cloud
PPTX
Синхронный MODX: как сделать настоящую синхронизацию и не застрелиться
PDF
FrontDays #2. Игорь Лобанов, Миграция Backbone (Marionette) -> React + Redux
PPTX
Тестируемая RxJava
PPT
поиск узких мест в производительности My sql ботанический определитель. г. ру...
PPTX
Konstantin slisenko - Spring Framework
PDF
Bosun современный мониторинг / Дима Медведев (OneTwoTrip)
PDF
сценарии использования статического анализатора
PDF
Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...
PDF
Многопоточное программирование на C#, путевые заметки
PDF
Как это будет: ASP.NET Core
PPTX
Tdd in the world of big data
Alexei Vladishev - Zabbix 3.0 что дальше
Обработка ошибок и исключений
Автоматизация мониторинга распределенной сети подразделений
Курс Java-2016. Занятие 06. Файлы и ввод-вывод
FrontDays #1. Алексей Ульянов, React.js и методологии разработки на нём
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
Real-Time Error Alerting & Debugging Tools: Rollbar - Alex Petrov
ZooKeeper Java Cloud
Синхронный MODX: как сделать настоящую синхронизацию и не застрелиться
FrontDays #2. Игорь Лобанов, Миграция Backbone (Marionette) -> React + Redux
Тестируемая RxJava
поиск узких мест в производительности My sql ботанический определитель. г. ру...
Konstantin slisenko - Spring Framework
Bosun современный мониторинг / Дима Медведев (OneTwoTrip)
сценарии использования статического анализатора
Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...
Многопоточное программирование на C#, путевые заметки
Как это будет: ASP.NET Core
Tdd in the world of big data
Ad

Viewers also liked (19)

PPT
The taj mahal
PPTX
CodeFest 2012. Каплинский К. — Разработка Open Source продуктов как прибыльны...
PPT
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
PDF
CodeFest 2012. Рыжиков С. — Архитектура и запуск облачного сервиса в Amazon A...
PPTX
CodeFest 2012. Петунин Д. — Идеальные инструменты для разработки на HTML5
PPTX
Sql Server 2012 overview and licensing
PDF
CodeFest 2012. Катков С. — Бенчмарки как критерий естественного отбора
PPTX
CodeFest 2012. Кузьмин В. — Как выстроить разработку сервиса под несколько мо...
PPTX
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...
PPTX
Sql Server 2012 for the new world of data
PPT
Emeco navy chair
PPT
Chinati Foundation
PPT
CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...
PPTX
CodeFest 2012. Ивлиев Р. — Аккуратно переезжаем, или тестирование в проектах ...
PPT
CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить ...
PPT
CodeFest 2012. Придатко В. — Техническое интервью с человеческим лицом
PPTX
CodeFest 2012. Лоенко М. — Разработка и оптимизация Android* приложений под п...
PPT
CodeFest 2012. Нелюбин Д. — Neo4j — графовая база данных
The taj mahal
CodeFest 2012. Каплинский К. — Разработка Open Source продуктов как прибыльны...
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
CodeFest 2012. Рыжиков С. — Архитектура и запуск облачного сервиса в Amazon A...
CodeFest 2012. Петунин Д. — Идеальные инструменты для разработки на HTML5
Sql Server 2012 overview and licensing
CodeFest 2012. Катков С. — Бенчмарки как критерий естественного отбора
CodeFest 2012. Кузьмин В. — Как выстроить разработку сервиса под несколько мо...
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...
Sql Server 2012 for the new world of data
Emeco navy chair
Chinati Foundation
CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...
CodeFest 2012. Ивлиев Р. — Аккуратно переезжаем, или тестирование в проектах ...
CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить ...
CodeFest 2012. Придатко В. — Техническое интервью с человеческим лицом
CodeFest 2012. Лоенко М. — Разработка и оптимизация Android* приложений под п...
CodeFest 2012. Нелюбин Д. — Neo4j — графовая база данных
Ad

Similar to CodeFest 2012. Захаров М. — Опыт разработки и внедрения решений интеграционного характера на JavaScript в крупной производственной среде (20)

PPTX
введение в Javascript
PPTX
Pavel Rumantsev - Java Script
PPT
HR Breakfast
PDF
Марат Абдуллин "Хроники серверного Жаваскрипта"
PPTX
Что такое Java? Кто такой Java разработчик?
PDF
JavaFX 2.0 overview
PPT
JavaScript
PDF
JavaScript. Introduction (in russian)
PPTX
Мировые информационные ресурсы. Лекция 5
PPTX
Dz Java Hi Load 0.4
PDF
SDExpo 2007 - Эволюция средств разработки
PPTX
Windows Azure & NodeJS Microsoft SWIT 2012
PPTX
HappyDev-lite-2016-весна 05 Андрей Юдин. Javascript - мультиинструмент для всех
PDF
Ликбез для HR-ов в IT
PDF
терминология vol.2
PDF
Ликбез для HR'ов в IT
ODP
Java 9 - кратко о новом
PPT
языки программирования
PDF
андрей паньгин
введение в Javascript
Pavel Rumantsev - Java Script
HR Breakfast
Марат Абдуллин "Хроники серверного Жаваскрипта"
Что такое Java? Кто такой Java разработчик?
JavaFX 2.0 overview
JavaScript
JavaScript. Introduction (in russian)
Мировые информационные ресурсы. Лекция 5
Dz Java Hi Load 0.4
SDExpo 2007 - Эволюция средств разработки
Windows Azure & NodeJS Microsoft SWIT 2012
HappyDev-lite-2016-весна 05 Андрей Юдин. Javascript - мультиинструмент для всех
Ликбез для HR-ов в IT
терминология vol.2
Ликбез для HR'ов в IT
Java 9 - кратко о новом
языки программирования
андрей паньгин

More from CodeFest (20)

PDF
Alexander Graebe
PDF
Никита Прокопов
PPTX
Денис Баталов
PDF
Елена Гальцина
PDF
Александр Калашников
PDF
Ирина Иванова
PDF
Marko Berković
PDF
Денис Кортунов
PDF
Александр Зимин
PDF
Сергей Крапивенский
PDF
Сергей Игнатов
PDF
Николай Крапивный
PDF
Alexander Graebe
PDF
Вадим Смирнов
PDF
Константин Осипов
PDF
Raffaele Rialdi
PDF
Максим Пугачев
PDF
Rene Groeschke
PDF
Иван Бондаренко
PDF
Mete Atamel
Alexander Graebe
Никита Прокопов
Денис Баталов
Елена Гальцина
Александр Калашников
Ирина Иванова
Marko Berković
Денис Кортунов
Александр Зимин
Сергей Крапивенский
Сергей Игнатов
Николай Крапивный
Alexander Graebe
Вадим Смирнов
Константин Осипов
Raffaele Rialdi
Максим Пугачев
Rene Groeschke
Иван Бондаренко
Mete Atamel

CodeFest 2012. Захаров М. — Опыт разработки и внедрения решений интеграционного характера на JavaScript в крупной производственной среде

Editor's Notes

  • #2: Когда я работал грузчиком, мы с ребятами любили кататься от одного склада до другого на тележке. Прошло много лет, но ничего по сути не изменилось - лишь моя тележка стала виртуальной и высокотехнологичной. Мы так же катаемся - от одного поставщика информации до другого. Добрый вечер. Меня зовут Михаил Захаров, и сегодня я расскажу вам, как, где, зачем, и почему мы применяем JavaScript для организации взаимодействия с нашими партнерами
  • #3: На этом слайде я хочу показать масштабы интеграции. Это почти вся Россия. Несколько десятков тысяч партнеров. 30 000 пунктов приема оплаты. Миллионы транзакций ежесуточно. Даже не задумываясь об этом, вы, скорее всего сталкиваетесь с системой "Город" каждый день. Например, когда идете платить за квартиру, отопление, водоснабжение. Или за телефон.
  • #4: Как вы видите, для того, чтобы пополнить счёт мобильного, информация должна пройти три звена. Вы общаетесь непосредственно с фронт-эндом платёжной системы, которая в свою очередь обращается к системе "Город", чтобы получить информацию об услуге, которую Вы хотите оплатить. Система "Город" в своб очередь связывается с биллингом поставщика, и возвращает информацию об услуге, задолженности по ней, и т. д.
  • #5: Где здесь интеграция? Где JavaScript? Да собственно вот он. Биллинги поставщиков - это как правило унаследованные системы со своим собственным протоколом, и желания внедрять что-то новое и неизвестное у поставщиков нет. Мы идем навстречу нашим партнерам в этом отношении - и JavaScript здесь работает как некая техномагия, преобразующая сообщения протокола системы "Город" в сообщения протоколов поставщиков.
  • #6: Итак, у нас есть несколько поставщиков, и под каждого написан протокольный адаптер на JavaScript-е. Эти адаптеры работают поверх некоторой среды исполнения, написанной на Java. В принципе, можно скриптовать целиком классы Java, но это много копипаста, и много результирующего кода, много потраченного времени.
  • #7: Поэтому, мы сдвигаем Java вниз, и вводим слой так называемых API-пакетов. Это наборы классов, реализующих некоторую макрофункциональность - вызов веб-сервисов, отправка почты, криптография, обработка XML. Они локализуют переиспользуемый код, и сокращают время разработки JavaScript-приложений, и их объем, а также вводят дополнительную гибкость - если в конкретном деплое нам какие-то пакеты не нужны - мы их просто убираем.
  • #8: Наверняка к этому моменту вас уже заинтересовало - как интегрирован Java-код с кодом на JavaScript? Довольно просто и изящно. Берем и определяем некий Java-интерфейс.
  • #9: А затем пишем JavaScript-объект, формально соответствующий этому интерфейсу. Всё. Дальше, как говорят ребята из Mozilla - работает "магия компилятора", и на выходе мы получаем объявленный ранее интерфейс. Детали можно узнать, обратившись к документации по JS-движку Mozilla Rhino.
  • #10: Итак, слева у нас мир Java, справа - мир JavaScript. С помощью метода getInterface мы приводим сущность JavaScript-кода к строгому Java-интерфейсу, и можем дальше с ним работать как с обычным Java-объектом. При помощи метода put мы "кормим" движок Rhino Java-объектами, которые нужно проскриптовать. Как я уже и говорил - всё просто и изящно
  • #11: Ранее я рассказал ГДЕ? и КАК? Наверняка, у вас уже проскакивал и вопрос - ЗАЧЕМ? Что ж ... Это еще разделение труда. Есть платформа. Это сторонний продукт, это шестая Java. Пожалуй, это единственный сторонний продукт в этом стеке, не считая opensource-библиотек, используемых в пакетах API. Кстати - пакеты API и среда исполнения - это то, за что отвечает Java-разработчик. То есть ваш покорный слуга. Это слой, абстрагирующий JavaScript-овые приложения от подробностей функционирования системы - вверх-вниз ходят только сообщения. И наконец, JavaScript - собственно "доменный код", отвечающий за интеграционное взаимодействие. Пишется прикладным разработчиком в парадигме диспетчеризации сообщений - при этом ему не надо задумываться откуда взять, и куда отправить сообщение.
  • #12: Ну, и наконец - ПОЧЕМУ? Во-первых - JavaScript-движок Rhino встроен в Java 6. Если у вас есть Java - у вас уже есть JavaScript, вам не надо ничего ставить и настраивать. Что называется "из коробки". Во-вторых - JavaScript распространен. Примерно так же распространен, как Coca-Cola. Потому что это язык с почти 20-летней историей. За это время из браузеров он мигрировал на сторону веб-серверов, и теперь мы предприняли попытку использовать его как основу для middleware-кода. В-третьих - он хорошо поддержан. У него большое комьюнити, много примеров кода, масса документации, да и вообще - это стандарт ECMA. В-четвертых - у него низкий порог вхождения для разработчика. Быстро изучается, и даже более того - где-то преподается.
  • #13: На этом у меня всё. Спасибо за внимание. У вас есть вопросы?