Spring – описание для менеджеров
Данная статья является переводом части white paper «Spring – A manager's overview“, доступной по следующей ссылке http://www.springsource.com/whitepapers
История
После своего появления в 1997 году Java быстро стала преобладающей платформой для систем для решения критически важных, ответственных задач. Важной причиной этого успеха была стандартизация общих сервисов для приложений уровня предприятия J2EE (Java 2 Enterprise Edition) впоследствии названной Java EE. Эта платформа получила поддержку такими крупнейшими компаниями как BEA, Oracle, IBM, Sun и SAP, выпустивших собственные продукты, основанные на Java EE. Однако, несмотря на этот успех платформы в целом, многие проекты оказывались неудачными, платформа была переусложнена. Также как отсутствовали некоторые важные особенности, а другие были невозможны для использования на практике:
- В соответствии с Java EE бизнес логика должна быть реализована в EJB. Поэтому даже для простейших задач необходимо было реализовывать 3 артефакта (Remote inteface, Home interface, Implementation) и конфигурировать более чем запутанные конфигурационные XML файлы (Deployment Descriptors). Это было более чем рутинной, скучной и склонной к ошибкам задаче, и для решения этой проблемы были созданы различного рода генераторы, такие как Xdoclet.
- EJB 1.x предполагал распределенную компонентную модель, т.е. EJB сервер должен был бы быть расположен на другом компьютере чем WEB сервер. Из-за временных задержек, связанных с высоким сетевым трафиком из-за использования remote calls, возникали проблемы с общей производительностью системы.
- Тестирование предполагало развертывание системы на сервере приложений было затянуто во времени в том числе и из-за времени, необходимого на установку системы. Использование автоматизированных тестов было также затруднено, выполнение бизнес логики вне сервера приложений было практически невозможно из-за зависимостей в написанном коде к вызовам сервисов этом сервера приложений.
- JSP позволило включение Java кода в Web страницы. Таким образом дизайн и логика оказывались тесно переплетены в одном артефакте, который может быть редактированным как веб-дизайнером, так и программистом. Возникает проблема с сопровождением такого приложения.
- Подход EJB к сохранению данных в хранилищах (базы данных и др.) используя EJB CMP был основан на далеко не всегда обоснованной вероятностью одновременного конкурентного доступа к объекту. И этот подход в итоге значительным образом сказывался на производительности в стандартных случаях. Одновременная загрузка большого объема данных (например 10000 записей) приводила к загрузке каждой записи отдельно, что приводило к катастрофическому падению производительности. Альтернативным вариантом предлагалось использование JDBC, интерфейса доступа к данным в базе данных достаточно низкого уровня. К тому же при использовании JDBC API трудно избежать утечек ресурсов или выполнить корректную обработку исключительных ситуаций. Многие руководства по JDBC тщательно обходят эту тему или даже содержат ошибочный код.
В октябре 2002 года эксперт в области Java EE Род Джонсон (Rod Johnson) выпустил книгу «Expert 1-on-1 J2EE Design and Development“. Эта книга содержит собранный им во время многочисленных проектов опыт, как справиться с приведенными выше недостатками и как добиться успеха в J2EE проектах. Также в книге было предложено загрузить с официального сайта автора некий framework, в котором был аккумулирован лучший опыт J2EE разработчиков. Род Джонсон видел огромный потенциал в этом подходе и после того как Юрген Хеллер (Jürgen Höller) присоединился к разработке, в феврале 2003 увидела свет первая версия Spring Framework.
Достоинства Spring
Spring Framework обладает следующими отличительными особенностями:
- Простота и мощь: в то время как простота использования является одной из основных особенностей Spring Framework, достигнута была она без малейшей потери предоставляемых возможностей. Хорошим примером является Spring JDBC: в то время как предоставлена возможность выполнять запросы к базе данных вообще без использования JDBC API, в то же время возможно обратиться к любой функции этого интерфейса без потери преимущества в виде автоматической обработки ошибок. Возможно даже использовать без потерь расширения, присущей только одной конкретной базы данных — особенность, которую тяжело выполнить без Spring Framework.
- Гибкость: вместо использования монолитного подхода, Spring содержит несколько модулей, которые независимы друг от друга. Благодаря этому возможно использование этого фреймворка только в тех частях реализуемой системы, где это принесет наибольшую пользу, и он может быть внедрен шаг за шагом, а не разом, как это бывает в случае серверов приложений.
- Выбор: эта особенность характеризует, что нет ничего в мире универсального, которое может быть использовано во всех случаях жизни. Spring Framework не требует от разработчика использовать какого-то специфического продукта или технологии. Например, поддерживается работа с большинством существующих фреймворков работающих с базами данных (JDBC, JPA, Hibernate, JDO, Apache OJB и других). Аналогично в области веб возможно как использование продукта, предложенного самим Spring, так и других широко используемых продуктов: JSF, Struts, Tapestry, WebWork. Spring также предлагает различные подходы к конфигурированию приложений: от использования конфигурационных XML файлов до использования Java аннотаций.
Эти особенности привели в результате к продукту, который не ограничен какой-то одной областью или технологией и может быть легко адаптирован и изменен для различных целей, оставаясь при этом простым для использования.
Архитектура Spring Framework
Архитектура Spring Framework создана для использования простых объектов (simple objects). Часто в мире Java эти объекты также имеют название простые старые java объекты (plain old java objects или POJO). Основной особенностью этих объектов является независимость от какой-то ни было технологии. Независимость от технологии является известным правилом хорошего стиля в разработке программного обеспечения. В этом есть следующие преимущества:
- разработанная на основе простых объектов бизнес логика не меняется в случае смены технологии, т.е. сохраняются инвестиции в программный код. Например, если принято решение перенести приложение на новую платформу или новый сервер приложений, нет необходимости переписывать реализованную бизнес логику.
- разработчики могут сконцентрированы на реализации функций бизнес логики, вместо того чтобы постоянно иметь дело с технологиями сервера приложений или аналогичных продуктов. В результате реализация бизнес логики, а с ней и всего проекта идет гораздо быстрее.
- Тестирование функциональности может происходить изолировано от окружения. Вместо того, чтобы разворачивать окружение воссоздающее условия реальной эксплуатации, все вызовы служебных сервисов окружения могут быть заменены некими «заглушками», имитирующие реальные службы, но существенно проще. Это позволяет быстрее тестировать созданные приложения и моделировать исключительные ситуации, которые в других подходах к реализации бизнес логики крайне тяжело воссоздать.
Очевидно, тем не менее, что система для того, чтобы иметь возможность работать, все равно должна иметь некое окружение. У Spring Framework есть три отличительных особенности, которые позволяют создание приложений из простых объектов:
- конфигурирование зависимостей (dependency injection-DI или inversion of control-IoC) означает, что взаимодействующие объекты не зашиты и не жестко задаются на этапе программирования, а конфигурируются. Таким образом, объекты не зависят от какой либо технологии и Spring Framework обеспечивает необходимые взаимосвязи. Благодаря этому на этапе тестирование не составляет труда заменить некоторые зависящие от нижестоящего слоя объекты заглушками.
- Аспектно-ориентированное программирование-АОП (Aspect Oriented Programming или AOP) является парадигмой разработки программного обеспечения, существующей и проверенной в течении более 10 лет, для добавления в код таких аспектов как безопасность, транзакционная целостность, логгинг и др. Без АОП каждый метод в коде, реализующий бизнес-логику, должен был бы дополнен такими аспектами и поэтому быть зависимым например от технологии транзакционной целостности. Кроме того, затрудняется сопровождение такого кода, потому что изменения должны быть сделаны во всех местах, где идет обращение к базе данных. Используя АОП весь код, реализующий такие аспекты может быть расположен в одном месте. Бизнес логика таким образом отделена от сервисного, технологического кода.
- Абстракция сервисов (Enterprise Service Abstraction) позволяет использование общепринятых API таких как JDBC или JMS существенно упрощенным и менее склонным к ошибкам образом. Обычно даже простейшие задачи, такие как запрос к базе данных или отправка сообщения через JMS занимает не менее 10 строчек кода. Таким образом обработка ошибок становится не совсем тривиальной задачей, некоторые учебные пособий даже не касаются этой темы. Абстракция сервисов, существующая в Spring Framework позволяет значительно упростить эту задачу и позволяет разработчик выполнять запросы к базе данных или посылать сообщения через Spring Framework буквально одной строчкой кода, при этом фреймворк берет на себя обработку ошибок унифицированным, где возможно образом — например, все ошибки, генерируемые различными серверами баз данных трансформируются в единую иерархию исключений (exceptions).
Благодаря таким достоинствам Spring Framework как гибкость и возможность выбора, каждая из этих отличительных особенностей может быть использована без применения других.
Spring, Java EE и EJB
Spring Framework нельзя сравнивать с Java EE. В то время как Java EE определяет платформу реализуемую сервером приложений, Spring Framework определяет модель программирования, которая может быть реализована как на Java EE платформе, так и на других. Конечно, в Java EE существует своя модель программирования тоже, но она ме может предложить такой уровень абстракции как Spring.
EJB изначально был предназначен как предпочтительный вариант реализации бизнес логики в приложениях Java EE. Но опыт практического использования показал, что лучше избегать применения как EJB 1.x, так и EJB 2.x — в частности этот подход пропагандировал основатель Spring Род Джонсон в своей книге «J2EE without EJB“. Уже название книги означает, что J2EE сам по себе разумный подход. Spring Framework даже включает возможность использования простых объектов как EJB, так же как и использование EJB похожим образом как простые объекты. Таким образом использование в приложения Spring Framework возможно и в случае выбора программной модели, основанной на EJB 1.x и EJB 2.x.
В EJB 3.x взяты некоторые подходы, реализованные Spring Framework и поэтому программная модель EJB 3.x значительно упрощена. Тем не менее, она не предоставляет такой же уровень поддержки dependency injection, аспектно-ориентированное программирования и абстракции сервисов как это делает Spring Framework:
- dependency injection и EJB 3.x: конфигурирование зависимостей возможно только для полей бина (кроме примитивных типов) и его сеттеров используя аннотации языка Java. Spring Framework позволяет также поддержку dependency injection на уровне конструктов, методов и полей, используя как аннотации языка Java, так внешние конфигурационные XML файлы. Spring Framework также прекрасно может быть использован в существующем программном обеспечении, задуманном без dependency injection и собственно Spring для совершенствования этого кода. Spring также поддерживает все аннотации Java, определенные в стандарте EJB 3.x.
- Аспектно-ориентированное программирование и EJB 3.x: эта модель не позволяет выбрать конкретную цель (target) для аспекта. Практические все остальные реализации АОП содержат поддержку такого понятия, определенного стандартизационным комитетом, как pointcut. Это означает, что аспект может быть применен либо ко всем EJB или же EJB должен быть изменен. Таким образом, нет возможности применить аспект к конкретному EJB или методу не меняя его. Интересно отметить, что EJB сам по себе содержит реализацию таких аспектов как безопасность и транзакционная целостность, но эффективно применять их мешает недостаточно удобная АОП модель. Spring Framework использует pointcut модель принятую в языке AspectJ для того, чтобы специфицировать target для применения аспектов. Эта модель существует уже более 10 лет и была признана наиболее мощной и зрелой среди всем имеющихся в настоящее время реализаций.
- В EJB 3.x нет аналога такой особенности Spring Framework как абстракция сервисов (Enterprise Service Abstraction)
- В EJB 3.x поддержка транзакционного механизма осуществляется Java аннотациями, которые также могут быть использованы в Spring Framework. Однако Spring дополнительно предлагает собственные аннотации, которые позволяют реализовывать значительно более гибкие сценарии. Spring также позволяет определять транзакции в конфигурационных XML файлах значительно более простым путем, чем в EJB 3.x, представляя при этом большие возможности.
- модель безопасности, реализованной в EJB 3.x, основана на роли (ролях), которой обладает пользователь системы и напрямую не поддерживаются более продвинутые подходы ограничения доступа. Например, нет возможности определить, что определенный объект, представляющий некую бизнес сущность, может быть доступен только определенным пользователям, т.е. клерк может просматривать информацию об его и только его клиентах. В результате отсутствия такой возможности, в приложениях, использующих EJB 3.x, „родная» модель безопасности является наименее редко использованным сервисом. Spring Framework позволяет реализовывать как модель безопасности основанную на ролях, так и доступ определенный на уровне данных и конкретных пользователей. Кроме использования аннотаций Java или конфигурационных XML файлов, существует возможность хранить относящиеся к безопасности настройки в некоторых других источниках, таких как база данных.
Таким образом видно, что EJB до сих пор не соответствует Spring Framework по своим возможностям в областях, описанных выше и кроме того содержит другие недостатки. Например, код системы, написанный с использованием EJB тесно связан со специфических API и окружением, которым является сервер приложений. Поскольку Spring Framework поддерживает значительную часть программной модели EJB 3.x возникает вопрос зачем вообще даже рассматривать использование EJB, когда Spring предлагает большее количество возможностей, причем отсутствуют недостатки свойственные EJB.
Однако если в результате было решено использовать EJB, код с использованием Spring может без проблем быть интегрированным в проект.
Качество
Spring постоянно получает высочайшие оценки за его качество:
- Крис Чеджи (Chris Chedgey) отметил в своем блоге (http://www.headwaysoftware.com/blog/2006/07/springs-structure-is-almost-perfect): «слова уважения людям из Spring за создание вероятно лучшего структурированного кода в мире!». КрисЧеджи является СЕО компании Headaway Software, компании создающий программные продукты для измерения качества кода.
- Ивица Арачич (Ivica Aracic) из Дармштадского технологического университета сравнил несколько open source приложений (http://sourceforge.net/mailarchive/message.php?msg_id=44B56DD1.40307%40gmx.de) и пришел к заключению, что «все проекты, за исключением Spring, содержат большее или меньшее количество циклических зависимостей на архитектурном уровне, делающих восприятие усложненным. Однако, после анализа Spring я был приятно удивлен, что не обнаружено ни единого цикла в графе зависимостей на архитектурном уровне». Циклические зависимости связывают 2 части программного окружения таким образом, что изменения оказывают вызывают последствия в обоих частях и таким образом возникают проблемы сопровождения продукта.
Юрген Хеллер (Jürgen Höller) в нескольких своих презентациях демонстрировал как такое качество кода было достигнуто (http://se-radio.net/podcast/2008-01/episode-82-organization-large-code-bases-juergen-hoeller):
«Этот уровень качества может быть достигнет только применяя open-source подход, который позволяет получить отклик на проделанную работу и документацию. У Spring доступна обширная документация по API и также руководство по использованию. Благодаря постоянному потоку откликов от Spring сообщества уровень качества всегда может быть сохранен на высоком уровне. Происходит постоянная проверка кода и документации, таким образом убеждаясь, что ошибки в коде исправлены, неточности в документации устранены и Spring Framework безотказно работает у клиентов».
Доля на рынке
Количество загрузок Spring Framework уже перевалило отметку в пять миллионов и Spring в настоящее время обладает наибольшей долей, чем любой сервер приложений Java. Он является основной моделью для приложение Java EE. Обзор сделанный в 2006 году фирмой BEA показал, что 64% фирм уже используют Spring. Таким образом Spring Framework стал уже де факто стандартом для Java EE. Интересно также отметить тот факт, что количество вакансий, требующих знания Spring,уже превысил требования знания всех остальных технологий, таких как EJB. Индикаторы рынка рабочей силы являются крайне интересными, поскольку демонстрируют, что компании действительно готовы платить за обладание определенных знаний и показывают, что компании очень активно используют Spring
Другие проекты Spring
Достоинства Spring Framework могут также быть применены и в других областях. Для этого этот продукт дополнен некоторым количеством технологий, которые помогают решать другие общие проблемы в разработке корпоративного программного обеспечения, и обеспечивают аналогичные достоинства, что и главный продукт:
- Spring Security (до недавнего времени Acegi Security) практически единственное имеющееся в настоящее время решение, которое поддерживает АОП. Spring security позволяет реализацию мощной модели безопасности без оказания какого бы то влияния на бизнес логику. Продукт не ограничивается предоставлением только доступа на основании имеющейся у клиента роли (ролей), также используется лист доступа (Access Control List). Spring security легко интегрируется с другими поддерживающую безопасность технологиями, такими как x.509 Certificates, JAAS, LDAP, CA Sitemender, HTTP Basic, HTTP Digest, и может быть легко адаптирован к специфическим требованиям.
- Spring Dynamic Modules for the OSGi Platform: OSGi позволяет создание сервисов и их автоматическое обновление. Это означает, что части приложения могут быть обновлены без перезапуска всего приложения. Также, приложение должно уметь обрабатывать ситуации, когда определенных сервисов нет в наличии во время работы системы. Spring Dynamic Modules облегчает создание и обнаружение сервисов путем конфигурации приложения, также как и обработку обновления частей приложения.
- Spring Integration: интеграция приложений становится все более важной частью для ИТ предприятия. Spring Integration обеспечивает простую, но очень мощную модель программирования основанную на широка принятых шаблонах (patterns). Модуль позволяет реализацию маршрутизации (routing), разбиения(splitting) и других функций работы с сообщениями при минимуме усилий разработчика. Spring Integration может быть связан с несколькими различными источниками данных и каналами вывода как JMS или импорт-экспорт файлов.
- Spring Batch: приложения, работающие в пакетном режиме, остаются критически важными для большинства предприятий. Spring Batch является первым приложением с открытым кодом (open source) который поддерживает разработку и функционирование таких приложений. При создании Spring Batch особое внимание обращалось на основные проблемы, возникающие при работе с работающими в пакетном режиме приложениями, такими как повторное выполнение, обработка ошибочных ситуаций и массовое обновление данных в базах данных.
- Spring.NET: этот проект является результатом импортирования Spring Framework на платформу Microsoft.NET. Spring.NET предоставляет такие возможности как dependency injection, АОП, и абстракция сервисов для ряда .NET API таких как ASP.NET, ADO.NET и Nhibernate.
- Spring Web Flow позволяет разработчикам моделировать действия пользователя как последовательность вызовов модулей высокого уровня, которые могут выполнены в любом окружении. фреймворк улучшает производительность и облегчает возможность тестирования одновременно обеспечивает управление состояние web приложения и ужесточением выполнения правил навигации.
- Spring Web Services предназначен для создания web сервисов, созданных на основе документов и разработку contract-first SOAP сервисов. Spring Web Services позволяет осуществлять это без написания WSDL файлов вручную, что является крайне рутинной и склонной к ошибкам работе. Также модуль позволяет создание гибких web сервисов используя один из многочисленных способов обработки XML нагрузки.
- AspectJ расширяет возможности АОП подхода, реализуемого Spring Framework, делая его еще более мощным. Модуль позволяет использовать расширенные множества poincuts и более эффективно реализовывать аспекты.
Независимость от платформы
Как было уже упомянуто, Spring Framework обеспечивает независимость от платформы, на которой выполняется приложение:
- Spring сертифицирован как совместимый с IBM WebSphere, были проведены обширные тесты практически на всех платформах, поддерживаемых IBM WebSphere (http://blog.springsource.com/2007/06/21/spring-framework-certified-on-websphere/)
- Spring используется при разработке ядра BEA WebLogic начиная с версии 10. Реализация EJB 3 от BEA основана на Spring. Поэтому не только возможно использовать Spring прямо в «коробочном» варианте BEA WebLogic, более того, BEA EJB 3 является модификацией Spring EJB 3. (http://springone.wiki-neon.adaptavist.com/display/SpringOne06/A+Spring+in+the+step+of+WebLogic+Server)
- Oracle обеспечил поддержку своего продукта TopLink в Spring, это является частью Spring Framework, также как помог с интеграцией JPA. Spring поддерживается в Oracle OC4J server и Jdeveloper (http://www.oracle.com/technology/tech/java/spring/index.html)
Forester Research отметил, что большинство пользователей Java EE используют Spring. Поддержка Spring Framework является одним из пунктов оценки при сравнении различных серверов приложений.
Однако недавний анализ показывает, что Java EE оказалась перед лицом важной проблемы. Gartner недавно опубликовал исследование «тенденции в ПО промежуточного слоя: очевидны скорые проблемы» (http://www.gartner.com/DisplayDocument?ref=g_search&id=525420&subref=simplesearch). В отчете отмечается, что Java EE всё больше и больше недостаточно покрывает требования в масштабируемости и производительности, поддержки событийного программирования(event-driven programming style), сервис-ориентированной архитектуры(SOA) и динамической разработки приложений. Некоторое количество технологий, такие как Spring, OSGI, Java application programming interface for JSLEE (телекоммуникационный стандарт) поддерживается в настоящий момент многими поставщиками Java EE. В 2009 году по меньшей мере 75% базирующихся на Java платформ и интеграционном программном обеспечении промежуточного звена будут обеспечивать поддержку Spring, число увеличившееся с менее чем 20% в 2007 году. Таким образом, все более количество пользователей обращаются к альтернативным (особенно Spring) решениям, чтобы справиться с возрастающей сложностью Java EE. Новое поколение базирующихся на Java платформ реализующих требования XTP (extreme transaction processing) выбрали Spring в качестве программной модели. Spring может обеспечить поддержку любого контейнера (Java EE или другого), таким образом обеспечивая хороший уровень переносимости среди различных платформ.
В другом отчете Gartner отметил, что простота использования Spring Framework сделала его популярным среди Java разработчиков обычных учетных приложений, однако в настоящее время он все больше используется в больших, критических для бизнеса приложениях. Ведущие организации нуждающиеся в простых для использования, легковесных программных моделей альтернативных Java EE должны обратить внимание на Spring Framework в первую очередь.
В настоящее время существуют несколько перспективных направлений Enterprise Java:
- легковесные контейнеры базирующие на OSGi. Spring хорошо поддерживает OSGi благодаря Spring Dynamic Modules for the OSGi Platform. Представители Oracle и BEA также поддерживают этот проект.
- Альтернативные подходы, такие как базирующиеся на JavaSpaces высокопроизводительные вычисления. Они обычно разрабатываются с использованием Spring, поскольку в результате получается независимый от технологии код и это делает его прекрасным инструментом для облегчения перехода к новой архитектуре.
- Многие предприятия обращаются к использованию легковесных, open source серверам таким как Apache Tomcat. Недавний обзор BZ research показал, что Tomcat используется в 64,3%, в то время как IBM WebSphere в 36,9%, Jboss в 32% и BEA Weblogic в 23,7%.
SpringSource
В компании SpringSource работают все разработчики Spring Framework и практически все разработчики других проектов Spring. Поэтому Spring Framework не представляет типичный для open source проекта риск, когда нет ответственного за качество продукта.
В январе 2008 года SpringSource приобрел компания Covalent Technologies и в настоящее время оказывает коммерческую поддержку Tomcat, лидирующего на рынке Java сервера приложений, также как Apache HTTP Server, также мирового лидера среди веб серверов. Основные разработчики этих двух технологий, также как и некоторых других проектов от Apache Foundation, являются сотрудниками SpringSource. Covalent Technologies оказывал поддержку более чем 50% компаний из списка Fortune 500 и 20% из Global 2000. В SpringSource работают также разработчики Equinox, наиболее успешной реализации OSGi. Поэтому кроме Spring Framework и других проектов Spring, SpringSource может также оказывать коммерческую поддержку мощнейшую платформу Java EE, существующую сегодня на рынке.
SpringSource возглавляют авторы идеи и архитекторы технологии Spring. Benchmark Capital инвестировали около10 миллионов долларов в венчурный капитал компании, также как и в несколько других open source компаний, таких как MySQL, Red Hat, Hyperic, Zimbra и Jboss. Будучи экспертами в своей области Benchmark вложил не только деньги, они добавили также свой опыт и контакты для увеличения стоимости SpringSource.
Примеры внедрения
Многие организации получили огромные финансовые выгоды от внедрения у себя Spring и привлечения опыта специалистов SpringSource при разработке, обучении и технической поддержки. Вот некоторые примеры:
Voca
Voca является ведущей в Европе процессинговой компанией кредитных карточек, обрабатывая ежегодно около миллиардов транзакции общим объемом около 50 триллионов долларов, включая около 70% зарплатных выплат в Великобритании и около 90% коммунальных платежей. В настоящее время ядро системы функционирует под Spring.
Перед переходом на платформу Java Voca использовал систему, работающую на майнфреймах., написанную на Коболе (Cobol) и содержащую более 10 миллионов строк в исходных текстах. Стоимость сопровождения этой системы составляла около 50 миллионов долларов в год. Кроме того, большое количество девелоперов, разрабатывавщих систему, уже ушли на пенсию и с каждым годом становилось все труднее находить им замену и нанимать новых специалистов. Voca разместила проект по переносу старой системы на Java одному из крупнейших системных интеграторов. После затрат, исчисляемых 20 миллионов долларов, исполнитель создал систему, способную обрабатывать порядка 700 транзакций в секунду, что было значительно ниже требования минимальной производительности 4000 транзакций в секунду. Другой привлеченный системный интегратор в итоге пришел к заключению, что требования Voca не могут быть достигнуты, Наконец, была привлечена компания SpringSource, который помог создать приложение, базирующееся на Spring.
В конечном итоге при том же аппаратном обеспечении и инфраструктуре, что использовал первый системный интегратор, была достигнута производительность 12000 транзакций в секунду, показатель, превышающий производительность первоначальной системы, реализованной на Коболе, в 6 раз. Причем дальнейшие тесты показали, что это число является не максимально возможной производительностью системы, а ограниченной текущим аппаратным окружением. Легкий контейнер Spring превысил требования по производительности там, где другие хорошо финансируемые проекты провалились.
Результаты потверждены компанией Voca (http://www.theserverside.com/news/thread.tss?thread_id=42460#219407)
Bank of America
Девять из десяти наиболее прибыльных банков являются клиентами SpringSource. Bank of America обслуживает более 59 миллионов клиентов в 6100 офисах, из них около 24 миллионов обслуживается online, имеет около 19000 банкоматов.
Одно из приложений Spring в Bank of America является торговой аналитической системой (Trading Analysis Application), которая заменила старую систему, базирующую на Excel и отчетной системе.
HSBC
HSBC является одним из крупнейших банков в мире. Международная сеть HSBC охватывает более 10000 офисов в 83 стране в Европе, Азиатско-Тихоокеанском регионе, в Америке, Африке и Среднем Востоке. Система следующего поколения банка основана на Spring, что привело к 40% сокращению объема кода в серверной части и 25% сокращению в приложениях-клиентах. HSBC уже долгое время сотрудничает с SpringSource и пользуется его поддержкой.
Symantec
Одно из реализованных с использованием Spring приложений в компании Symantec называется Titan и гарантирует ответную реакцию не более строго определенного промежутка времени. Преимуществами, которые появились в результате использования Spring, являются:
- независимость друг от друга программной инфраструктуры и реализации бизнес логики
- Абстракция вызовов удаленных сервисов (HTTP remoting, EJB, SOAP, JMS)
- Покрытие более 75% функциональности автоматическими тестами.
- Независимость от использующихся серверов приложений (Jboss, Tomcat)
Выводы
- Spring базируется на принципах простоты, мощности, гибкости и возможности выбора. Это позволяет создавать системы уровня предприятия используя простые объекты и используя конфигурирование зависимостей (dependency injection), АОП (aspect-oriented programming) и абстракция сервисов (Enterprise Service Abstraction).
- Spring Framework является проверенной, стабильной, высококачественной платформой, использующейся повсеместно в сегодняшнем мире Java EE. Он может быть интегрирован в практически любой сервер приложений и является более мощным и предоставляет больше возможностей, чем EJB 3.0.
- Другие проекты SpringSource базируются на тех же принципах, что и Spring Framework. Эти проекты охватывают такие области как безопасность, веб сервисы, приложения, работающие в пакетном режиме, .NET и другие
- Spring совместим с ведущими платформами Java EE: IBM Websphere, BEA WebLogic, Oracle OC4J. Spring делает возможным адоптацию новых платформ, среди которых TomCat и OSGi являются наиболее важными.
- SpringSource оказывает коммерческую поддержку Spring Framework, других проектов Spring, включая обучение, консультирование и сопровождение.
- Многочисленные компании используют Spring в критически важных для бизнеса приложениях.