powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Какие приемущества использования IoC контейнера?
248 сообщений из 248, показаны все 10 страниц
Какие приемущества использования IoC контейнера?
    #37563823
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собсно не совсем понимаю смысл использования IoC. Описываем класс. Потом в xml файле описываем бин ссылающийся на наш класс. В контейнере создается экземпляр. Далее получаем контекст ApplicationContext context = new ClassPathXmlApplicationContext(... Далее из конекста получаем наш экземпляр context.getBean(...
Аналогично можно было бы напрямую создать экземпляр класса через new.
В чем преемущество черех IoC? Вроде как на лету можно переопределять зависимости исправляя xml файлы..?? Но я не уверен, что так можно. Не пробовал. В общем можно както прояснить этот вопрос на простом примере? Не отсылайте на гугл плиз.. я там был и варианты знаю, но для чего так и не понял.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37563866
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Джаб, ну заканчивай уже спамить на форуме
1. Открываешь Гугл
2. Пишешь там "Marin Fowler inversion of control"
3. Читаешь статьи, набираешься знаний
4. ???
5. PROFIT!!!
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37563879
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Использование этого кода - в большинстве случаев является ошибкой дизайна.
ApplicationContext context = new ClassPathXmlApplicationContext(
context.getBean(...

Основное преимущество это управление зависимостями вне самих классов. В противном случае у вас в каждом классе будет куча бесполезного кода по созданию экземпляров, синглтонов, их переиспользованию и переприсванию одного объекта во все зависимые объекты.
Конечно это не так просто понять, пока сам не наступишь на эти грабли. Если будет маленький проект - на пару недель работы - попробуйте реализовать без Dependency Injection.

Ну, а как результат работы DI получаем low coupling. Т.к. классы перестают заботится о том откуда берется экземпляр другого класса. Об этом уже заботится контейнер.

IoC это более общий подход. Он не только к DI применим.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37563883
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Много преимуществ, и да можно менять xml без переклмпиляции. К тому же смотри такой пример - тебе нужны реальные сервисы для продакшена, и стабовые для теста,все они имеют одинаковый интерфейс. ты описываешь их в 2 разных xml. Далее допустим когда ты запускаешь тесты ты можешь одной строкой поменять целую группу сервисов, просто поменяв имя включаемого файла. Далее IOC позволяет декларативно настроить транзакции, скоупы жизни бинов и т.д. и т.п. И да, почитай таки Фаулера)
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37563909
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никДалее IOC позволяет декларативно настроить транзакции, скоупы жизни бинов и т.д. и т.п.Ну вообще-то ни транзакции, ни скоупы к IoC никакого отношения не имеют.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37563919
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz, вот. В том то и дело, что я так понял, что такая инжекция больше подходит для синглтонов. Т.е., вернее, только для них и подходит. Допустим у меня имеется суперкласс и два подкласса. Если экземпляр подкласса по сути уникален, то его можно так вот заинжектить и потом, в коде, ссылаться на context.getBean(..., где он уже создан с описанными параметрами в xml и вроде всё замечательно. Но, если у экземпляра должны быть разные параметры в зависимости от ситуаций... Допустим у нас есть суперкласс машина и есть подкласс гоночная и грузовая. Я создам бин для гоночной, где укажу максимальную скорость, для грузовой максимальную грузоподьемность. А если у меня в проекте нужно будет 30 гоночных с разными максимальными скоростями? Понадобится создать 30 бинов с разным id и параметрами инициализации? Както не весело.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37563927
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант, я не создаю бины, а делаю new в нужном месте кода, для каждой гоночной машины и всё.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37563928
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Джаб, ну заканчивай уже спамить на форуме
1. Открываешь Гугл
2. Пишешь там "spring ioc scope prototype"
3. Читаешь статьи, набираешься знаний
4. ???
5. PROFIT!!!
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37563931
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczКонечно это не так просто понять, пока сам не наступишь на эти грабли. Если будет маленький проект - на пару недель работы - попробуйте реализовать без Dependency Injection.
Боюсь, что пока не будет. Я сам себе придумываю проекты, чтоб разобраться в вопросах. Не берут меня пока в проекты...
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37563932
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomДжаб, ну заканчивай уже спамить на форуме
1. Открываешь Гугл
2. Пишешь там "spring ioc scope prototype"
3. Читаешь статьи, набираешься знаний
4. ???
5. PROFIT!!!

Не все знания приходят после прочтения статей. Нужна наработка, чтоб прочувствовать. Ну или, чтоб товарищи, прошедшие этот путь, подсказали примерчик наглядный, на котором можно прочувтсвовать.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37563938
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jabsvenomДжаб, ну заканчивай уже спамить на форуме
1. Открываешь Гугл
2. Пишешь там "spring ioc scope prototype"
3. Читаешь статьи, набираешься знаний
4. ???
5. PROFIT!!!

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

Конечно, не все. :) Но читать надо . Вы ведь прочтите вначале :)
Тем более, что очень много статей на русском очень наглядно это все поясняют.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37563952
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большой Синий Кит, читал и написал свое понимания в постах выше.

З.Ы. Я ведь тоже могу заходить в любую тему и отправлять топикстартера на гугл, хотя сам при этом не буду знать ответа на вопрос, но зато напущу важности. По крайней мере, я не боюсь признаться, что я чегото не понимаю и не прячуть за общими фразами мол в литературе всё описано.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37563991
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenom, ты часом DI и IoC не путаешь?:) Декларативное описание транзакций и скоупов по сути и есть inversion of control.

jab. в твоем примере IoC в принципе избыточен - потому что ты работаешь с сущностью(автомобилем), IoC рулит когда тебе надо заинжектить сервисы, дао и тому подобную муть, которая зачастую и есть синглтоны, тут ты прав. Все принципы надо использовать без фанатизма
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37563999
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никsvenom, ты часом DI и IoC не путаешь?:) Декларативное описание транзакций и скоупов по сути и есть inversion of control.Не, не путаю. А вам поясню на всякий случай.
IoC - одна из методик уменьшения связанности между объектами. Это подход.
DI - одна из реализаций IoC. Другая распространенная реализация - Service Locator
Идем дельше - как реализуются DI? а) контейнеры; б) фабрики.

Spring IoC - это IoC, реализованный через DI, реализованный через контейнер.
Вам стало понятнее?

Идем дальше - что такое Spring IoC? Это модуль, который реализует непосредственно контейнер. Все. То есть это Context, BeanFactory и их реализации.

Идем дальше - транзакции в Spring. Что это? Это библиотека классов. И так как эти классы имеют конструкторы, геттеры и сеттеры, то вы, само собой, можете их использовать в спринговом контексте. Для упрощения работы с ними в спринге есть синтаксический сахар, с помощью которого можно вместо, например, объявления всяких интерсепторов и проксей в контексте, просто написать tx:annotation-driven, но идея остается та же - транзакции не имеют никакого отоношения к IoC. IoC это подход к управлению зависимостями между классами.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37564008
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jabСобсно не совсем понимаю смысл использования IoC
Сейчас смысл от IoC чувствуется при использовании web-фреймворков предоставляют поддержку Spring'а "из коробки". Для вас, по сути тоже самое - просто помечаете аннотацией какой-нибудь userService и он сам будет правильно инициализирован. Вот тогда становится приятно, и жизнь существенно облегчается.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37564023
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
:) Ты все-таки не понимаешь чем они отличаются. Все то что ты красиво описал - это и есть Dependency Injection, а вот IoC это как раз более масштабный принцип, следуя которому некоторую специфическую часто повторяющуюся логику(зачастую инфраструктурную) обособляют от так называемой бизнес-логики, вот почему декларативное управление транзакциями это часть IoC, насчет скоупов ты даже сами себе противоречишь, утверждая что IoC - одна из методик уменьшения связанности между объектами, так вот избавление от контроля за циклом жизни объектов, это и есть ничто иное, как методика уменьшения связанности между объектами. И да, DI это вовсе никакая не реализация IoC, а всего лишь его подмножество. Сами же советовали Фаулера, а то человек почитает вас и примет ваши догадки за истину.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37564024
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonidv, какой аннотацией? Это про @Autowired идет разговор? Ну так там просто конструктор класса без параметров выполнится. Что может быть не правильным тут? Но для этого мне надо ещё предварительно этот бин описать. По поводу слабой связанности понятно, но какбы мне пока ещё не пришлось столкнуться реально, где это мне пригодилось бы. Реализация слабой связанности, на уровне интерфейсов, более прозрачна для понимания.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37564047
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никВсе то что ты красиво описал - это и есть Dependency InjectionПовторяемс: IoC -> DI -> SpringIoC (containter)
забыл ника вот IoC это как раз более масштабный принципЭта фраза вроде по делу, но вот только я уже об этом написал.
забыл никследуя которому некоторую специфическую часто повторяющуюся логику(зачастую инфраструктурную) обособляют от так называемой бизнес-логикиА вот это уже жесть пошла. Почитайте тут:
http://msdn.microsoft.com/en-us/library/ff648478.aspx
http://msdn.microsoft.com/en-us/library/dd458879.aspx
http://msdn.microsoft.com/en-us/library/ff648476.aspx

Теперь на пальцах попробую вам объяснить:
Есть интерфейс А, есть интерфейс В. Есть реализация AImpl, есть реализация BImpl, у которой один из членов класса - типа А. Вопрос: как сказать реализации BImpl, инстанс какого класса использовать на месте интерфейса A?
Решение в лоб:
Код: java
1.
2.
3.
4.
5.
6.
public class B {
    private A a;
    public B() {
        a = new AImpl();
    }
}


Решение? Решение. Но вот незадача - у нас тут high coupling, так как BImpl обязан знать об AImpl, а потому все наши интерфейсы нахрен никому не сдались.

А вот другое возможное решение:
Код: java
1.
2.
3.
4.
5.
6.
public class B {
    private A a;
    public B() {
        a = ServiceLocator.get(A.class);
    }
}


Что мы тут сделали? Мы делегировали контроль над тем, какую реализацию интерфейса A впихнуть BImpl за пределы BImpl. В этом и заключается IoC = Inversion of Control = Инверсия контроля . Что значит инверсия ? Значит вместо одного действия (создаем объект сами) мы переходим к обратному действию (просим создать объект за нас). Что значит контроль ? Контроль чего? Контроль вставки зависимости в класс.
Приведенный мною пример это IoC через ServiceLocator .

Вам становится яснее? Все таки прочитайте ссылки с MSDN, которые я привел выше, в особенности на картинки посмотрите. После того, как вы это сделаете, вы поймете, что фраза:
забыл никследуя которому некоторую специфическую часто повторяющуюся логику(зачастую инфраструктурную) обособляют от так называемой бизнес-логикиесть ни что иное, как бред.

забыл никвот почему декларативное управление транзакциями это часть IoCЕще раз.
Управление транзакциями это часть IoC = false .
Управление транзакциями это часть SpringIoC = false ;
Управление транзакциями есть в одной из частей Spring = true .

забыл никнасчет скоупов ты даже сами себе противоречишь, утверждая что IoC - одна из методик уменьшения связанности между объектами, так вот избавление от контроля за циклом жизни объектов, это и есть ничто иное, как методика уменьшения связанности между объектами.Логическая ошибка.
IoC это один из методов уменьшения связанности классов = true
Все, что уменьшает связанность классов, это IoC = false

забыл никИ да, DI это вовсе никакая не реализация IoC, а всего лишь его подмножество.Круто, то есть у нас получается примерно следующий разговор:
Я: Банановая кожура скользкая!
Вы: Нет! Неправильно! На банановой кожуре можно подскользнутся!
Кэп?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37564089
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты бы вместо того чтобы нервничать и подсовывать ссылки на статьи, в которых вначале прям таки написано что эта информация устаревшая, почитал бы все-таки Фаулера, раз я для тебя не авторитет) и пораскинул мозгом. http://martinfowler.com/bliki/InversionOfControl.html. Все что делается не внутри обычного хода выполнения программы, а отдается на откуп фреймфоркам или контейнерам и есть IoC, а ты мне все про DI втираешь:)
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37564091
kiR@ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
svenom,

Респект, отлично расписано. Я даже по вашему ответу систематизировал свои знания:) С спорах рождается истина.

А по теме. Вообще, IoC, в частности DI - это такая тема, которую сложно вот так понять, просто прочитав пару статей. Сам неоднократно пытался "въехать". Читал статьи, топики на хабре. Залезал в чужие языки, потому что про Java не находил. Но понять всё равно до конца не мог. Ну меньшая связанность кода, да (очень, кстати, расплывчатое понятие), ну типа должно быть удобно(но только должно быть, как именно - непонятно), а в чём реальный то смысл? Тут нужна практика. Пока не попробуещь - не поймешь. Пока сам не использовав пару раз уже готовый и настроенный самописный DI в одном из наших проектов - не понял. Это на уровне эмоций. Используешь, и только пост-фактум понимаешь, что это действительно, блин, удобно. Например, стандартный пример - DAO классы. Они могут понадобиться в любом месте. Любой DAO класс. Не предугадаешь заранее. Поэтому их логично засунуть в контейнер, и потом просто одной строчкой кода(ну ладно, с аннотацией - двумя) подключить в нужном месте. И так же легко убрать, если не нужно. Во-первых, не нужно париться над созданием объекта, управление жизненым циклом. Во-вторых, не загромождаешь логику(код самих методов) одинаковыми, ненужными созданиями нужных тебе постоянно классов. С этим @Autowired всё смотрится органично. Потом по-другому уже просто не можешь:) И в третьих, не нужно синглтонов - достаточно спорный паттерн, у которого есть свои минусы. Особенно на Java.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37564097
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jabLeonidv, какой аннотацией? Это про @Autowired идет разговор? Ну так там просто конструктор класса без параметров выполнится.
1. @Autowired (или @Resource) это на уровне Spring'а. Интгерация с Wicket, например, осуществляется через аннотацию @SpringBean.
2. Необязательно без параметров. Параметры можно в xml-ке задать;
3. Еще есть @PostCreated (вроде так) - выполняет после инициализации компонентов.

jabЧто может быть не правильным тут?
К чему это, я не осознал...

jabНо для этого мне надо ещё предварительно этот бин описать.
Не ясно, что значит "описать". Можно пометить аннотацией @Service.

jabРеализация слабой связанности, на уровне интерфейсов, более прозрачна для понимания.
Ну так по хорошему Spring активно использует интерфейсы.

jabПо поводу слабой связанности понятно, но какбы мне пока ещё не пришлось столкнуться реально, где это мне пригодилось бы.
Тестирование уровней. Например, тестируете вы какую-нибудь форму. А в коде там вот так:
Код: java
1.
class MyWindow { private UserService userService = new UserService()}



И все, протестировать нормально будет очень тяжело. А если там вот так:
Код: java
1.
2.
3.
4.
class MyWindow { 
 @Autowired 
 private UserService userService; // и set/get к нему
}


то в тесте делаем вот так:

Код: java
1.
2.
3.
UserService userServiceMock = mock(UserService.class);
userServiceMock.when(userServiceMock.getUsers()).return(asList(new User("Petya"),new User("Vasya"))).
myWindow.setServiceUser(userServiceMock)



Что позволит вам очень просто проверить код именно MyWindow, изолировав его выполнение от других компонент. Что и есть сутью модульного тестирования.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37564099
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никТы бы вместо того чтобы нервничать и подсовывать ссылки на статьи, в которых вначале прям таки написано что эта информация устаревшая То есть с момента публикации статьи понятия Inversion of Control, Dependency Injection и Service Locator как-то принципиально изменились?

забыл никВсе что делается не внутри обычного хода выполнения программы, а отдается на откуп фреймфоркам или контейнерам и есть IoC , а ты мне все про DI втираешьСначала пара логических утверждений:
DI это IoC = true
Если мы говорим про DI, следовательно мы говорим про IoC = true

А теперь по поводу вашей фразы, выделенной жирным - к сожалению, она бессмысленна. Поясните вот эти моменты:
1) Что такое "обычный ход выполнения программы"? Значит есть "необычный"? Как их отличить друг от друга и в чем заключаются их характерные черты?
2) Что значит "отдается на откуп фреймворкам"? Вот я попросил Spring заинжектить мне бин? Это "откуп"? А вот я попросил Хибер вытащить мне инфу из БД. Это "откуп"?

Еще раз, максимально сжато: IoC - это способ снижения связанности классов путем делегирования процесса установления зависимсотей между объектами от самих объектов к некому стороннему компоненту. Я не знаю, как это можно еще проще объяснить
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37564132
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jabБоюсь, что пока не будет. Я сам себе придумываю проекты, чтоб разобраться в вопросах. Не берут меня пока в проекты...IoC и прочая enterpriZe муть (тс...) показывает бонусы только на больших проектах. В проекте на 2-3 класса IoC yfabu не впился - new и все дела ;)

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

дальше - больше. но на тестовом проекте профита от Spring IoC может и не оказаться. Дольше Spring настраивать по сравнению с реализацией 2-3 функций выполняющих реальную логику.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37564139
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDAIoC и прочая enterpriZe муть (тс...) показывает бонусы только на больших проектах. В проекте на 2-3 класса IoC yfabu не впился - new и все дела ;)IoC это наиболее известная и применимая реализация подхода "code to interfaces". То есть можно смело сказать, что использование IoC значительно улучшит качество 95% проектов без оного за счет серьезного снижения связанности компонентов, причем проектов любого размера.
Да, на маленьких проектах профита меньше, чем на средних и больших. Но буквально 5-10 взаимодействующих классов - IoC уже значительно облегчает жизнь - легче поддерживать, легче расширять и т.д.. Я только не знаю - 5-10 классов это уже большой проект в вашей терминологии или нет?

VoDAк примеру настройку соединения с БД проще держать в конфиге, а не в коде. чтобы не пересобирать проект каждый раз когда сменился пароль у пользователя.Утверждение к теме IoC ортогонально
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37564197
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomДа, на маленьких проектах профита меньше, чем на средних и больших. Но буквально 5-10 взаимодействующих классов - IoC уже значительно облегчает жизнь - легче поддерживать, легче расширять и т.д.. Я только не знаю - 5-10 классов это уже большой проект в вашей терминологии или нет? 5-10 классов, да еще на java. феноменально. как вы только умудряетесь в одиночку такие огромные проекты поднимать? ;)

если на 5-10 ваших классах IoC реально помогает - ура, я рад за вас. у меня рабочий функционал реальных проектов ну ни разу не укладывался в 10 классов (надеюсь эти классы не забиты вложенными до уровня 5-10 тыс строк кода ). и для себя использовать IoC для 10 классов я считаю не выгодным. в качестве исключения обучение и прототипизация работы с конкретным IoC контейнером.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37564289
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomТо есть с момента публикации статьи понятия Inversion of Control, Dependency Injection и Service Locator как-то принципиально изменились?

При чем здесь вообще это? Я твои скажем прямо, не совсем авторитетные статьи прочитал, а вот ты даже не удосужился взглянуть на мою ссылку, ибо если бы удосужился, может бы наконец осознал, что ты говоришь глупость, точнее не глупость, а не совсем правду.

Сначала пара логических утверждений:
DI это IoC = true
Если мы говорим про DI, следовательно мы говорим про IoC = true
Это ты сам себя в чем то убедил видимо, ну да ладно:)

А теперь по поводу вашей фразы, выделенной жирным - к сожалению, она бессмысленна. Поясните вот эти моменты:
1) Что такое "обычный ход выполнения программы"? Значит есть "необычный"? Как их отличить друг от друга и в чем заключаются их характерные черты?
2) Что значит "отдается на откуп фреймворкам"? Вот я попросил Spring заинжектить мне бин? Это "откуп"? А вот я попросил Хибер вытащить мне инфу из БД. Это "откуп"?

Еще раз, максимально сжато: IoC - это способ снижения связанности классов путем делегирования процесса установления зависимсотей между объектами от самих объектов к некому стороннему компоненту. Я не знаю, как это можно еще проще объяснить

Ок, я программист а не писатель и иногда свои мысли доношу не совсем правильно, но постараюсь обьяснить на пальцах. Сам термин Inversion of Control - неужели не наводит тебя на мысль, что IoC - это способ снижения связанности классов путем делегирования процесса установления зависимсотей между объектами от самих объектов к некому стороннему компоненту - ну скажем так слишком упрощенное определение? Если бы IoC включал только это , то его было бы логичнее назвать Inversion of Instantiation или еще как-либо в этом духе.

Итак, что же такое "обычный ход выполнения программы" - это неудачный перевод термина flow of control of programm. Под этим термином подразумевается процедурный ход выполнения программы, для примера(который кстати у Фаулера),
Код: ruby
1.
2.
3.
4.
5.
6.
puts 'What is your name?'
  name = gets
  process_name(name)
  puts 'What is your quest?'
  quest = gets
  process_quest(quest)



В этом случае твой код всегда находится под твоим контролем, ты решаешь когда задать вопрос, как на него отреагировать, когда завершить программу. Inversion of control происходит когда ты пробуешь перенести свою программу на оконный интерфейс, ты создаешь методы по обработке ввода пользователя, создаешь контролы и биндишь методы на события, тебя больше ничего не волнует. Ты "отдаешься на откуп" оконной системе, именно она будет гонять вечный цикл в ожидании ввода пользователя, диспетчиризации событий и т.п., твой же код будет вызван только тогда когда это будет необходимо, и будет делать только то, что ты указал - таким образом flow of control переходит от тебя к оконной системе(в данном контексте ее можно назвать фреймворком). Все это называется так называемым Принципом Голливуда - не звони нам, мы сами тебе позвоним. Таким образом контроль выполнения инвертирован - не ты вызываешь оконную систему, а она вызывает твои методы, когда нужно, всю работу с инфраструктурой оконная система берет на себя. IoC - это главное отличие библиотек от фреймворков(хотя термин фреймворк тоже достаточно расплывчат), библиотека функций - это набор классов и методов, которые ты непосредственно вызываешь, они делают полезные вещи, а потом возвращают контроль тебе. В отличие от них фреймворки обладают некоторой дополнительной функциональностью и имеют некий абстрактный дизайн, его ты можешь только сконфигурировать, и обьяснить когда и в какие моменты времени фреймворк должен вызвать твой код, это и есть IoC.
Великолепным примером IoC являются EJB2, когда ты создаешь сессионный EJB бин, то ты определяешь методы ejbPassivate() и т.д.. но ты не вызываешь их напрямую, они будут вызваны тогда, когда нужно, тебе не нужно заботиться об этом - опять тот же Принцип Голливуда. Классическим примером IoC кстати является паттерн Template Method, как ни странно.

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

Что касается - автор2) Что значит "отдается на откуп фреймворкам"? Вот я попросил Spring заинжектить мне бин? Это "откуп"? А вот я попросил Хибер вытащить мне инфу из БД. Это "откуп"?

Таким образом, когда Spring инжектит бин - это IoC, когда хибер достает данные из базы - это скорее вызов библиотеки, хотя граница тут очень размыта.

Более того, ServiceLocator исходя из этого, вовсе никакое не IoC, а вот Dependency Injection - да. В общем DI - это всего лишь подмножество IoC, о чем я тебе и пытаюсь обьяснить.

Таким образом декларативные транзакции и управлением скоупами жизни бина - это как раз и есть IoC.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37564291
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть у тебя компонент, который должен взаимодействовать с другими. Как ему их найти? Компоненту приходилось самому их искать "контейнер дай мне". Но для того чтобы это сделать у компонента должна быть ссылка на контейнер, а это лишняя зависимость.

Появились IoC Container-ы, которые "по тихому" делают инекцию в компонент нужных ресурсов. И ты "магическим образом" получаешь полностью готовый компонент.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37564312
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Видеотуториал по Спрингу (и ИоК в частности): http://www.youtube.com/user/ytkach#p/c/B0276A0A62BDEF06
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37564422
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник ,
По поводу вышей поправки, что IoC это более широкое понятие - согласен. И Template туда пролезет, по сути любой колбак есть IoC.

забыл никБолее того, ServiceLocator исходя из этого, вовсе никакое не IoC, а вот Dependency Injection - да.
http://en.wikipedia.org/wiki/Inversion_of_control - поиск по словам Service Locator
http://msdn.microsoft.com/en-us/library/ff648478.aspx - поиск по словам Service Locator
http://martinfowler.com/articles/injection.html#UsingAServiceLocator

забыл никВ общем DI - это всего лишь подмножество IoC, о чем я тебе и пытаюсь обьяснить.Так я же уже раза 3 об этом сказал

забыл никТаким образом декларативные транзакции и управлением скоупами жизни бина - это как раз и есть IoC.Ваша правда.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565090
Pavel Kurakin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я в java пока почти полный ноль, но попробую ответить на вопрос ТС "Какие приемущества использования IoC контейнера? "
так как я это понял для себя, в первом приближении.

У нас есть интерфейс:
Код: java
1.
2.
3.
public interface ПЕРЕВОЗЧИК {
    public void ДОСТАВИТЬ();
}



И есть несколько классов реализующих его:
Код: java
1.
2.
3.
4.
5.
public class АВИАКОМПАНИЯ implements ПЕРЕВОЗЧИК {
    public void ДОСТАВИТЬ() {
        //реализация доставки самолетом
    }  
}


Код: java
1.
2.
3.
4.
5.
public class ПАРОХОДСТВО implements ПЕРЕВОЗЧИК {
    public void ДОСТАВИТЬ() {
        //реализация доставки пороходом
    }  
}


Код: java
1.
2.
3.
4.
5.
public class АВТОПРЕДПРИЯТИЕ implements ПЕРЕВОЗЧИК {
    public void ДОСТАВИТЬ() {
        //реализация доставки автомобилем
    }  
}



А это наш "главный" класс который выполняет "полезную" работу.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public class ТРАНСАГЕНСТВО {

    private ПЕРЕВОЗЧИК bailee;

    public void setBailee(ПЕРЕВОЗЧИК bailee) {
        this.bailee = bailee;

    public void ОТПРАВИТЬ_ГРУЗ {
        bailee.ДОСТАВИТЬ();
    }
}


Так вот ему совершенно похер, каким конкретно перевозчиком будет отправлен груз, он знать о нем ничего не знает кроме того что он может его доставить. И вот тут IoC контейнер по сути делает всю работу за нас, включая создание конкретного экземпляра перевозчика, мы просто указываем в конфигурационном файле какого перевозчика сейчас использовать. А если нам захотелось изменить перевозчика то достаточно внести изменения в конфигурационный файл и не надо компилировать приложение.
Как то так. :)
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565164
kiR@ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Pavel KurakinТак вот ему совершенно похер, каким конкретно перевозчиком будет отправлен груз, он знать о нем ничего не знает кроме того что он может его доставить. И вот тут IoC контейнер по сути делает всю работу за нас, включая создание конкретного экземпляра перевозчика, мы просто указываем в конфигурационном файле какого перевозчика сейчас использовать. А если нам захотелось изменить перевозчика то достаточно внести изменения в конфигурационный файл и не надо компилировать приложение.
Как то так. :)

Это вы сейчас сказали часть от паттерна Factory, часть от полиморфизма, и часть от Hot Swap. Как-то так:)
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565207
XEugene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kiR@chЭто вы сейчас сказали часть от паттерна Factory, часть от полиморфизма, и часть от Hot Swap. Как-то так:)Я бы сказал - это паттерн Visitor в чистом виде.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565220
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну дела.
Тут нет паттерна Factory - где метод newInstance()?
Тут нет паттерна Visitor - где классического вызова visitor.visit(this)?.
Тут нет никакого Hot Swap. Что это вообще такое? Если меняется xml с определением бинов, то да, проект не надо перекомпилировать, но его все равно надо пересобирать и передеплоивать.
Тут есть только полиморфизм.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565226
kiR@ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
svenom,

Есть такое понятие, называется "ирония":) Вообще, тяжело жить без чувства юмора, да.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565230
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Visitorом тут не пахнет. Как и Hot swap.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565235
kiR@ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кто позвал зануд?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565236
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Factory кстати есть - только это скрыто от наших глаз:)
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565242
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если ты не видел мы занудим тут уже не первый день:)
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565252
kiR@ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл ник,

Видел, видел:)
Всё это мне напоминает уроки литературы в школе. "А что хотел сказать автор своим произведением?"
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565257
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никFactory кстати есть - только это скрыто от наших глаз:) Неправда. Не все Сreational Pattern'ы это фабрика. Контейнер спринга нельзя подогнать под конкретный паттерн. В нем присутствует функционал:
Синглтона - http://en.wikipedia.org/wiki/Singleton_pattern
Прототипа - http://en.wikipedia.org/wiki/Prototype_pattern
Ожбэкт пула - http://en.wikipedia.org/wiki/Object_pool_pattern
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565258
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот фабрики в нем как раз таки нет вообще.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565279
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenom, чтобы стать синглтоном - объект то должен кто-то создать? То же самое с пулом. Прототип тоже не подходит в этом случае. А вот newInstance() и привидение к интерфейсу, где-то внутри спринга как раз есть) Хотя этот спор бессмысленен, потому что он бестолковый)
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565283
XEugene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomТут нет паттерна Visitor - где классического вызова visitor.visit(this)?.

visit(this) вот:
Код: java
1.
2.
3.
4.
5.
6.
    public void setBailee(ПЕРЕВОЗЧИК bailee) {
        this.bailee = bailee;

    public void ОТПРАВИТЬ_ГРУЗ {
        bailee.ДОСТАВИТЬ();
    }



Вызова visitor.visit(this), действительно, нет. Эта функция возложена на клиентский класс. .
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565287
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, это всего лишь делегирование
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565290
XEugene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XEugenevisit(this) вот:
Код: java
1.
2.
3.
4.
5.
6.
    public void setBailee(ПЕРЕВОЗЧИК bailee) {
        this.bailee = bailee;

    public void ОТПРАВИТЬ_ГРУЗ {
        bailee.ДОСТАВИТЬ();
    }



то есть в параметре не this конечно. Но очень близко к идее Visitor.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565305
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никsvenom, чтобы стать синглтоном - объект то должен кто-то создать?Верно, но я повторю вам - creational pattern'ов много:
Builder
Factory Method
Abstract Factory
Singleton
Multiton
Object Pool
и т.д.
Они все создают объекты. Но это же не значит, что они все фабрики?

забыл никТо же самое с пулом.Вы знаете в чем object pool заключается? Инстацировать объекты, положить их куда-то, а потом выдавать пользователю. Это именно то, что делает спринг при развертывании контекста. Все синглтоны инстанцируются и прикрепляются к контексту.

забыл никПрототип тоже не подходит в этом случае.
Прототип относится только к тем бинам, у которых указано scrope="prototype". Они инстанцируются заново при каждом вызове context.getBean(). Прототипом в этом случае выступает xml-описание бина: какие объекты куда подставить.

забыл никА вот newInstance() и привидение к интерфейсу, где-то внутри спринга как раз есть)В классическом Factory Method newInstance() не имеет параметров, всегда выдает новый объект, и выдает инстанс объекта строго определенного типа.
Наверняка в спринге есть что-то типа newInstance(Class class), но только это не делает его фабрикой в классическом понимании.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565314
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XEugeneВызова visitor.visit(this), действительно, нет. Эта функция возложена на клиентский класс. . Это вы уже сами придумали.
XEugeneто есть в параметре не this конечно. Но очень близко к идее Visitor. Вообще ни разу не близко. В паттерне Visitor именно visit(this) и является ключевой его частью. А тут идет просто вызов какого-то метода какого-то объекта без параметров. А следовательно объект, чей метод вызывают не может быть визитором по определению, так как он не знает, кого "визитить"
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565318
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А кто говорил про классическую фабрику? Ты опять что-то придумал. Я ж не спорю что ты знаешь много creational patternов, я их тоже знаю - и когда и зачем использовать. Если быть точным, то спринг использует что-то вроде фабрики в сочетании с object pool, но опять же спор ни о чем.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565379
XEugene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomВообще ни разу не близко. В паттерне Visitor именно visit(this) и является ключевой его частью. А тут идет просто вызов какого-то метода какого-то объекта без параметров. А следовательно объект, чей метод вызывают не может быть визитором по определению, так как он не знает, кого "визитить" Он "визитит" конкретную реализацию интерфейса ПЕРЕВОЗЧИК, которую клиентский код передал в setBailee и вызывает у него метод ДОСТАВИТЬ(). Заявление, что это "Visitor в чистом виде", было немного провокационным с моей стороны, но это тот случай, когда используют Visitor.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565384
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XEugene, Да успокойтесь вы уже со своими "провокациями" Это просто один объект вызывает метод другого.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565419
XEugene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я совершенно спокоен.
svenomодин объект вызывает метод другогоТрудно с этим не согласиться.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565454
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XEugeneОн "визитит" конкретную реализацию интерфейса ПЕРЕВОЗЧИК, которую клиентский код передал в setBailee и вызывает у него метод ДОСТАВИТЬ(). Заявление, что это "Visitor в чистом виде", было немного провокационным с моей стороны, но это тот случай, когда используют Visitor.Визитор решает строго определенную проблему, а именно:
wikiНад каждым объектом некоторой структуры выполняется одна или более операций. Определить новую операцию, не изменяя классы объектов.

соответственно класс визитор должен иметь (а) интерфейс для того чтобы его можно было прозрачно заменить на другой класс (б) набор методов для посещения КАЖДОГО типа объектов по которым он ходит.

Минимальная конфигурация визитора:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
interface Visitor
{
    void VisitA(A a);
    void VisitB(B b);    // можно сделать вырожденный визитор посещающий только объекты типа А, тогда VisitB может отсутствовать.
} 
 
class Visitor1 implements Visitor
{
    void VisitA(A a) {}
    void VisitB(B b) {}    // можно сделать вырожденный визитор посещающий только объекты типа А, тогда VisitB может отсутствовать.
}



концептуально visit(somethingImportant) и есть суть визитора, без подобного метода паттерн визитор отсутствует.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565682
Pavel Kurakin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sql.ru знатный форум :)

Начиная со второй страницы все уже забыли о чем речь.
Напоминаю. ТС спрашивал про преимущества IoC контейнеров. Не что такое IoC, не что такое DI (хотя как по мне одно и то же), не про паттерны с транзакциями.
Это я к тому что советовать поискать по форуму сейчас уже почти бесполезное предложение, а скоро станет бессмысленным. В заголовке одно, а в содержимом другое, ну или наоборот.
Я привел простейший пример(замена реализации без перекомпиляции). Приведите еще.
З.Ы. Мне это то же интересно кстати. :)
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565731
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pavel KurakinНапоминаю. ТС спрашивал про преимущества IoC контейнеровАвтору уже популярно объяснили, что это такое и зачем надо, на первой странице.
Pavel KurakinНе что такое IoC, не что такое DI (хотя как по мне одно и то же)Пичаль. Перечитайте первую страницу, поймете, что это не так.
Pavel KurakinЯ привел простейший пример(замена реализации без перекомпиляции). Приведите еще.Главное преимущество использования IoC разжевано уже 100500 раз - это loose coupling.
Ваш пример - не имеет права на жизнь. Ну и что, что без перекомпиляции? Проект то все равно надо пересобирать, а потом передеплоивать. Так что это никакое не преимущество, как максимум - маргетинговый ход. В реальных проектах на это "преимщуество" все болт ложили, ибо не нужно.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565785
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот! Ваши рассуждения много проясняют и наталкивают на ряд полезных мыслей! Это хорошо. Кто прав, а кто не очень, ещё придется подразобраться, но всеже польза есть.
Меня вот ещё что волнует. Пока не совсем до конца продумал, как реализовать.
Допустим проект развивается. Есть пару контроллеров и хотелось бы часть функционала вынести в отдельные контроллеры. В результате контроллеров становится всё больше. Ну или как вариант, контроллеры оставляем как есть, но они разростаются в туеву хучу строк кода. Идем дальше. В проекте используется БД. Табличков всё больше и больше становится. Почти на каждую описывается сущность и реализуется DAO. В результате у нас много надо инжектить. Вот пример маинконтроллера:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
    @Resource(name = "someManager")
    protected SomeManager someManager;
    
    @Resource(name = "sessionRegistry")
    private SessionRegistryImpl sessionRegistry;

    @Autowired
    private SaltSource saltSource;

    @Autowired
    private UserDetailsService userDetailsService;

    @Autowired
    private AccountDao accountDao;

    @Autowired
    private BookDao bookDao;

    @Autowired
    private CommentDao commentDao;

    @Autowired
    private CategoryDao categoryDao;
    
    @Autowired
    private RatingDao ratingDao;


и это не предел!
Так вот мне это не очень нравится. Да и контроллеров может быть много, я упомянал, и в каждом надо повторяться с инжекциями перечисленными выше. Хотелось бы эту инжекция и вообще реализацию логики вынести из контроллера в сервисы или в сервис. Что я должен делать? Я думаю описать класс с аннотацией @Service и заавтоваредить его в нужный мне контроллер. А уже в сервисе заавтоваредить нужные мне DAO. Правильно? В нутри (в сервисе) описать нужные мне методы, которые будут использоваться в контроллере. Какбы отвязываю DAO от контроллеров. Подозреваю, что с ростом проекта и это меня не будет удовлетворять.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565827
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этот вопрос к теме IoC, да и к Spring, вообще никакого отношения не имеет. У вас проблема - как спроектировать классы. Лучшая книга, которая есть на свете по этой части - Patterns of Enterprise Application Architecture, Martin Fowler.

Читайте, вкуривайте. Ответы на ваши вопросы содержатся в главах про Domain Model (Anemic, Rich) и про MVC
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565855
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jab, именно так и делай. Вообще, видимо ты пока еще не набил руку в грамотном проектировании классов. Обычно стараются сделать так, чтобы класс имел одну отвественность(Single responsibility метод). То есть по сути твой BookController должен заниматься только действиями, прямо связанными с Book, CommentController с Comment и тд. Обычно в контроллере есть депенденси - некий сервис, иногда два или три, если больше - то надо думать как разбить контроллер на несколько. В этом сервисе опять же есть завсимости допустим от bookDAO и userDAO. Таким образом главный способ бороться со сложностью зависимостей - четко определять границы классов и их отвественности. Если твой сервис инжектит еще один сервис и 5 DAO - то это повод задуматься. Но вообще ты думаешь в правильном направлении.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565878
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо, тогда по теме. Про конфигурационные файлы. Всё, что я конфигурирую на данный момент, это в *.xml и в application.properties.
Значит в xml я описываю бины и их взаимосвязи, а в пропертях я описываю источник данных и логин-пароли. Сейчас будет глупый вопрос. Простите. Крутится приложение в TomCat. Задеплоено оно в виде war файла. Как мне менять эти конфигурации налету не раздеплоивая и не пересобирая проект?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565898
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник, всё верно! Ответственности начинают четко проявляться с ростом проекта. Собственно это мой первый проект java web, причем не реальный, а тестовый. Мало того! Так уж вышло, что изучение java, я начал практически сразу с javaEE. Вот пытаюсь усложнять и смотреть, в какую сторону надо менять проектирование, чтоб добится максимально гибкости (без фанатизма есно). Спасибо.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565911
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто, по началу, было не привычно, что в java любимая тема очень много файлов. Что не класс, то отдельный файл и т.д. Пусть даже класс на пару методов, но отдельным файлом. Причем, зачастую попадаются вообще интересные вещи/подходы! Вот допустим мне надо реализовать метод, который будет генерить префикс к файлу. В качестве префикса будет дата и время. Обычным, привычным способом, меня тянет реализовать это в виде процедуры, а в яве ненавязчиво намекают мол для этого нужно реализовать отдельный класс. Т.е. должен быть обьект, который ответственен за генерацию этого префикса. Это ломает обычное представление о программированиии. Приходится много чего переосмысливать.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565916
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никТаким образом главный способ бороться со сложностью зависимостей - четко определять границы классов и их отвественности.
вот DI как раз этому мешает
Слишком легко инжектить связи классов, и на выходе потом лапша.
Когда через конструктор или контекст или событиями, тут над "картинкой" думаешь больше.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565971
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123, я согласен, но необходимо понимать что DI - это меньшее из зол, и надо понимать как работает инструмент. Когда все в команде понимают как оно работает - то использование DI на больших проектах радикально уменьшает время разработки на больших проектах. Сложности в основном у новичков, которые не набив своих шишек приходят на все готовое. Вот тут jab молодец. Разрабатывая свои проекты он набьет шишки и поймет почему в Java многое устроено так а не иначе.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37566070
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё вопрос. Как лучше/правильнее грузить бин? Через BeanFactory или через AplicationContext?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37566075
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jabЕщё вопрос. Как лучше/правильнее грузить бин? Через BeanFactory или через AplicationContext?
Бин правильнее инжектить, а не "грузить".
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37566112
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Остроумно, но всеже как лучше?
ApplicationContext context = new ClassPathXmlApplicationContext(...
context.getBean(...

или

BeanFactory factory = new XmlBeanFactory(new FileSystemResource(...
factory.getBean(...

В чем разница?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37566149
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
исключая всяческие хаки - два варианта кода, которые ты привел - слишком низкоуровневые и нерекомендуемые к использованию. В типичном приложении ты должен просто описать бины а контейнер сам их загрузит, каким надо способом.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37566189
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jabОстроумно, но всеже как лучше?
Ну, и при чем здесь остроумие? Это замена Dependency Injection на ServiceLocator. Нужна в очень редких случаях, когда у некого стороннего фреймверка нет итеграции со Spring. И спрингом нельзя инстанциировать классы этого фреймверка. Покажите пример когда это нужно и найдем решение как это обойти.

jabApplicationContext context = new ClassPathXmlApplicationContext(...
BeanFactory factory = new XmlBeanFactory(new FileSystemResource(...
В чем разница?
Достаточно открыть JavaDoc и почитать про каждый из указанных классов. И посмотреть какое место они занимают в иерархии.
Ну, и обратить внимание на то что XmlBeanFactory уже deprecated.
http://static.springsource.org/spring/docs/3.1.0.M1/javadoc-api/org/springframework/beans/factory/xml/XmlBeanFactory.html
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37566251
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczЭто замена Dependency Injection на ServiceLocator
Странно. Один, из приведенных мной вариантов, описан там
http://cloud-cuckoo.com.ua/content/spring-dependency-injection-v-deistvii
именно как Dependency Injection.
Таким образом реализована слабая зависимость базового класса с рыцарем, а рыцаря с квестами. Можно конечно и на аннотациях реализовать, но по сути, я думаю, что смысл один и тотже.
Я не понял, что Вы имели ввиду.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37566271
XEugene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никисключая всяческие хаки - два варианта кода, которые ты привел - слишком низкоуровневые и нерекомендуемые к использованию. В типичном приложении ты должен просто описать бины а контейнер сам их загрузит, каким надо способом.
Причём контейнер при этом проинициализирует именно ApplicationContext.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37566272
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мое упрощенное понимание DI на этот момент:
Значит описываем мы конфигурации бинов в xml. Пишем какие быны нужны, откуда взять, как будут называться, как будут связаны между собой. На момент запуска приложения Spring создаст экземпляры обьектов в контейнере IoC. Далее, в нашем распоряжении есть ряд команд позволяющих получить экземпляр обьекта из контейнера. При этом, мы получаем экземпляр по имени и можем выполнять его методы описанные в интерфейсе. Т.е. использующий класс, по сути, изначально не знает кто именно и как будет реализовывать нужный ему методы. А вот контейнер как раз и инжектит эту зависимость в процессе выполнения.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37566275
XEugene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jabЧерез BeanFactory или через AplicationContext?Обычно используется ApplicationContext. Только его не нужно создавать вручную, о чём тут и говорят. А вообще, ApplicationContext расширяет BeanFactory, из чего как бы можно предположить "кто круче")
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37566288
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XEugene, да да. BeanFactory находится/используется в Spring core containter для реализации Dependency Injection. Это какбэ фундоментально.. наверно, а остальное обвес.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37566307
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XEugeneТолько его не нужно создавать вручную, о чём тут и говорят.Неправда. А как же его тогда создавать то?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37566347
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jab http://cloud-cuckoo.com.ua/content/spring-dependency-injection-v-deistvii
именно как Dependency Injection.

В данном случае в методе main используется ServiceLocator. Всё остальное - DI. Если вы не понимаете, то не нужно спорить аргументами вида "а тут написано".

jabЯ не понял, что Вы имели ввиду.
Вы main методы часто пишете? А в JEE приложениях?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37566358
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Да он же с EE учить яву начал. :) Что уже звучит забавно. А теперь умничает на тему IoC.
Все же я очень завидую Вашему терпению.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37567312
Pavel Kurakin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomPavel KurakinНе что такое IoC, не что такое DI (хотя как по мне одно и то же)Пичаль. Перечитайте первую страницу, поймете, что это не так.
Я конечно могу и ошибаться, но на сейчас мой вывод таков, что IoC это принцип или если хотите паттерн предназначенный для обеспечения слабой связанности. А DI это конкретная реализация. Так что в данном контексте это одно и то же по моему мнению, но может это мнение и изменится впоследствии. :)
svenomГлавное преимущество использования IoC разжевано уже 100500 раз - это loose coupling.
Ваш пример - не имеет права на жизнь. Ну и что, что без перекомпиляции? Проект то все равно надо пересобирать, а потом передеплоивать. Так что это никакое не преимущество, как максимум - маргетинговый ход. В реальных проектах на это "преимщуество" все болт ложили, ибо не нужно.
А мой пример всего лишь показывает реализацию loose coupling :) посредством DI. Отсутствие необходимости перекомпиляции это так, для более наглядного примера.

jabМое упрощенное понимание DI на этот момент:
У меня пока сложилось точно такое же мнение.

Большой Синий КитBlazkowicz,
Да он же с EE учить яву начал. :) Что уже звучит забавно. А теперь умничает на тему IoC.
Не вижу ничего в этом такого веселого. Почему бы и нет. Тем более что ТС, по крайней мере в этом топике, не показал что он не знает основ без которых нельзя начать сразу с ЕЕ. Я вот тоже иду по примерно похожему пути.
Так что не умничайте :)
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37567607
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pavel Kurakin,

ТС уже показал в других топиках свою безграмотность в элементарнейших вещах. Если Вы идете по тому же пути, Вы тоже ее проявите, поверьте. А умничать я все же буду.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37567629
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большой Синий КитPavel Kurakin,
ТС уже показал в других топиках свою безграмотность в элементарнейших вещах. Если Вы идете по тому же пути, Вы тоже ее
проявите, поверьте. А умничать я все же буду.
-1
Предлагаем выделить подфорум для новичков?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37567775
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Вы не поняли мою мысль. Я советовал и jab, и советую Pavel Kurakin изучать яву нормально . Бросаться в ентерпрайз, не зная элементарных вещей, - губительно. Задаются потом дурацкие вопросы, которые сами по себе указывают на то, что человек не готов работать в ентерпрайзе. И - опять же во благо новичков - я ,безусловно, советую бросить это занятие и начать с основ.

На мой взгляд, такой совет гораздо полезнее чем ответы абракадабрами (для них) от опытных программистов.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37567887
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большой Синий Кит, может хватит уже бить себя пяткой в грудь? Я больше чем уверен, что есть вопросы на которые и Вы не в состоянии будете дать верный ответ. Причем эти вопросы не только из java EE, но и из "основ", о которых Вы тут рассказываете. Сразу всё знать не получается как не крути. Есть определенные задачи, под которые происходит поиск решений. Ещё раз повторюсь, книжки читаются и перечитываются регулярно! Некоторые вещи подзабываются, а некоторые остаются недопонятыми до пока не столкнешся на практике.

З.Ы. В этой теме, да и в многих других, у участников есть свои разногласия и свои взгляды на поставленный вопрос. И это вовсе не означает, что их (всех тех, чьё мнение отличается от твоего) мнение в корне не верно. Кто как может, так и пытается обьяснить и за это им спасибо! Но есть и такие, кто заходит просто самоутвердится лишний раз, мол все бараны, а я в белом пальто. Последнее печально, но неизбежно. Извините за небольшей оффтоп. Просто надоело, что очередная тема переходит на личности и превращается в балаган. Не нравится вопрос или лично автор, нет ничего полезного сказать - проходи мимо!
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37567903
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jab, так-то ты прав. Просто оптимальнее начинать все же не с J2EE а с J2SE, как ни крути. Написать допустим редактор файлов или что-то подобное на свинге. Мне например не парит отвечать, да и ты вроде стараешься. Просто многие следуют твоим путем и когда на них обрушиваются сложность J2EE, включая ОРМы IoC и т.п. - начинают троллить на форумах что java унылое говно, и делфи с пхп намного круче:)
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37567904
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jab,
пиши, пиши.
По крайней мере, один читатель (я) у тебя есть. :)
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37567915
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jabЯ больше чем уверен, что есть вопросы на которые и Вы не в состоянии будете дать верный ответ.
Сегодня ссылка накопалась
http://java.dzone.com/articles/technical-job-interview
я аж сам припух от таких вопросов. Даже те что знаю - многие сходу не отвечу. Не говоря уже про Amdahls Law/Gustafson's Law
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37567970
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz, ещё и на английском. На русском то не сразу понять, что от тебя хотят.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37568880
Pavel Kurakin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большой Синий КитЯ советовал и jab, и советую Pavel Kurakin изучать яву нормально . Бросаться в ентерпрайз, не зная элементарных вещей, - губительно.
А что значит нормально? Начать с "hello world"? Это мне уже ну совсем не интересно.
Я давно программирую,начинал с FoxPro для DOS, последние несколько лет Delphi. Я не вижу каких то кардинальных отличий между Delphi и Java как например между тем же Delphi и Haskel.
А вот Вы ответьте мне на вопрос в чем разница между SE и EE?
По мне так словечко Enterprise используется что бы побольше нулей в ценнике нарисовать.
EE это тот же SE + доп. библиотеки/фреймворки.
И кстати, вот написал я "Hello world" используя IoC контейнер spring и его реализацию DI. Это что уже enterprise? Я думаю нет, но и не core java, а тогда что?. Так что я думаю путь jab имеет право на жизнь. И мой то же, хотя я пока больше стою чем иду. :)
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37569648
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pavel KurakinИ кстати, вот написал я "Hello world" используя IoC контейнер spring и его реализацию DI. Это что уже enterprise? Я думаю нет, но и не core java, а тогда что?. Так что я думаю путь jab имеет право на жизнь. И мой то же, хотя я пока больше стою чем иду. :)Spring, как и GWT, это довольно мощные течения в java-мире, потому их можно неформально причислить к лику enterprise.

Опять же многие идеи обкатанные на Спринге интегрируют в JSR-спеки и стандартизуют. После чего их могут взять под зонтик JavaEE, что формально делает их входящими в enterprise.

Pavel KurakinА вот Вы ответьте мне на вопрос в чем разница между SE и EE?
По мне так словечко Enterprise используется что бы побольше нулей в ценнике нарисовать.
EE это тот же SE + доп. библиотеки/фреймворки.Enterprise это набор готовых технологий, best practice, библиотек и ЛЮДЕЙ умеющих это готовить. Для компаний это есть набор подходов, технологий, стандартов, которые были придуманы и реализованы для решения различных проблем, которые нужно решать в ИТ-системах корпораций. Конечно можно делать свой велосипед с колесами в виде восьмерки, но на практике из таких велосипедов реально полезны только 10%, остальные это повторение уже существующих вещей. а значит можно было взять готовый компонент сократить время и удешевить стоимость разработки.

Когда приходит человек и говорит я умею готовить enterprise, то пробегаешься - какие из enterprise технологий он уже готовил - JPA, JSP/JSF, JaxB, JAAS, JNDI, JMS, JMX, J**

знание этих технологий позволяет работнику получать больше, потому что компания не тратит свои деньги, на его обучение.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37569665
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDAОпять же многие идеи обкатанные на Спринге интегрируют в JSR-спеки и стандартизуют.Какие например?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37569725
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomVoDAОпять же многие идеи обкатанные на Спринге интегрируют в JSR-спеки и стандартизуют.Какие например?Основные идеи (что пришло на ум):
возможность конфигурировать сервлет через аннотацию, не прописывая в web.xml

CDI хотя, возможно, CDI больше наследник Guice, чем Spring

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

возможность создания кастомных профилей и запуска только требуемых приложению технологий. может в каком нибудь JavaEE 9 работающем поверх Java 8 с модулями можно будет указать какие базовые модули нужны для приложения, и эта информация будет использована сервером чтобы поднимать только минимум технологий

возможность использовать JPA внутри WAR

появление стандартного механизма JAAS-авторизации из кода приложения. Раньше приходилось городить вендор-специфичные реалмы для каждого производителя и адский гов** код для проброса аутентификационных данных в реалм и получения ответа от него.

Это что вспомнил. Посмотри презентацию JavaEE 6. Я когда ее увидел на Sun Tech Days порадовался, что наконец то удобные вещи давно реализованные в Спринге можно применять и в JavaEE.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37570656
Pavel Kurakin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDAПосмотри презентацию JavaEE 6. Я когда ее увидел на Sun Tech Days порадовался, что наконец то удобные вещи давно реализованные в Спринге можно применять и в JavaEE.
Так, стоп!
Я что то перестал понимать о чем речь. Я понимаю так что JavaEE это набор спецификаций? Spring набор библиотек, фреймворков etc.?
Если я правильно понял, то Ваша фраза "наконец то удобные вещи давно реализованные в Спринге можно применять и в JavaEE." звучит по меньшей мере странно, типа наконец то реализацию можно применить в спецификации.
Может Вы хотели сказать, что некоторые части Spring стали удовлетворять спецификации и стали теперь EE?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37570673
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDAвозможность конфигурировать сервлет через аннотацию, не прописывая в web.xmlКак это относится к Spring - непонятно.
VoDACDI хотя, возможно, CDI больше наследник Guice, чем SpringС натяжкой можно признать, хотя это не классический DI и не замена EJB.
VoDAпоявление профилей как реакция на то, что Спринг может подниматься только с требуемым набором технологий , а JavaEE всегда запускал все-что-только-можно, даже если большая часть технологий не применяетсяВообще непонятно о чем речь. Что грузит всегда? Кто грузит всегда? С чего вы вообще взяли, что на решение внедрить профили оказал влияние именно Spring? Вы, часом, не с Maven перепутали? Очень похоже на ничем не подтврежденные фантазии.
VoDAвозможность использовать JPA внутри WAR0_о Причем тут спринг вообще?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37572028
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pavel KurakinЯ что то перестал понимать о чем речь. Я понимаю так что JavaEE это набор спецификаций? Spring набор библиотек, фреймворков etc.?
Если я правильно понял, то Ваша фраза "наконец то удобные вещи давно реализованные в Спринге можно применять и в JavaEE." звучит по меньшей мере странно, типа наконец то реализацию можно применить в спецификации.
Может Вы хотели сказать, что некоторые части Spring стали удовлетворять спецификации и стали теперь EE?Все правильно, кроме последнего абзаца.

Читать стоит так: наконец то удобные вещи давно реализованные в реализации от Interface21/SpringSources/VMware (тот самый Spring) заспецифицировали в стандартных JavaEE спеках (от того самого Sun/Oracle) и можно надеяться на их реализацию во всех JavaEE совместимых серверах - тех самых JBoss/GlassFish/Geronimo. Со временем ;)
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37572031
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomVoDAвозможность конфигурировать сервлет через аннотацию, не прописывая в web.xmlКак это относится к Spring - непонятно.Spring - один из первых (или первый) фреймворк удобно реализовавший эту возможности. JavaEE повторил удобный опыт.

VoDACDI хотя, возможно, CDI больше наследник Guice, чем SpringС натяжкой можно признать, хотя это не классический DI и не замена EJB.CDI, как и Spring - реализация IoC. EJB injections из той же серии.

VoDAвозможность использовать JPA внутри WAR0_о Причем тут спринг вообще?Попробуйте закинуть Entity в WAR и развернуть на JavaEE 5 совместимом сервере. Оно взлетело?
Теперь в WAR добавляется Spring (с настройкой для Hibernate) и закидывается на Tomcat. Оно уже взлетит.


VoDAпоявление профилей как реакция на то, что Спринг может подниматься только с требуемым набором технологий , а JavaEE всегда запускал все-что-только-можно, даже если большая часть технологий не применяетсяВообще непонятно о чем речь. Что грузит всегда? Кто грузит всегда? С чего вы вообще взяли, что на решение внедрить профили оказал влияние именно Spring? Вы, часом, не с Maven перепутали? Очень похоже на ничем не подтврежденные фантазии.Maven относится только к сборке. Отключить не используемые сервисы JavaEE complaint server-ов он не может.

Запустите JBoss с приложением использующим только сервлеты. Сколько не нужных (не запрошенных приложением) подсистем взлетает только потому что JavaEE обязывает?
Запустите Tomcat со Spring. Сколько не нужных систем поднимет Спринг? Тут ноль поскольку конфигурируется только то, что используется и не более.
Спринг заметно быстрее поднимает приложение просто потому, что грузит ровно то, что требуется и не более.

Spring сильно выигрывал у JavaEE по многим причинам. Две из них:
Первая - запускается ровно то, что сконфигурировано, а не вся стопка JavaEE технологий.
Вторая - Spring контекст можно поднять из Unit тестов и прогнать интеграционное тестирование тех или иных наборов компонент. Для JavaEE это решалось только частным вендор-зависимым образом и довольно не тривиально.


Введение профилей позволяет JavaEE совместимым серверам догнать Spring по возможности кастомизации ЧТО ИМЕННО будет работать и запускаться. Что ускоряет как запуск сервера, так и время через которое приложение становится доступно для использования.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37572111
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDASpring - один из первых (или первый) фреймворк удобно реализовавший эту возможности. JavaEE повторил удобный опыт.Хоть убейте - не могу понять, о чем вы говорите. Как спринг связан с сервлетами? Может быть вы про Spring MVC говорите?
А как спринг с аннотациями связан? Аннотации - это глобальный тренд, его используют и JPA, и JAXWS, и вские биндинговые фреймворки, и XML-фреймворки, и Hibernate, и Spring, и т.д.. Как можно утверждать, что аннотации в сервлетах - это веяние Спринга - непонятно.

VoDAПопробуйте закинуть Entity в WAR и развернуть на JavaEE 5 совместимом сервере. Оно взлетело?
Теперь в WAR добавляется Spring (с настройкой для Hibernate) и закидывается на Tomcat. Оно уже взлетит.Опять логическая ошибка. Оно взлетает не из-за спринга, а из-за хибера. Я могу спокойно засунуть в варник ентити и хибер и он взлетит. Спринг тут вообще ни при чем.

VoDAЗапустите JBoss с приложением использующим только сервлеты. Сколько не нужных (не запрошенных приложением) подсистем взлетает только потому что JavaEE обязывает?
Запустите Tomcat со Spring. Сколько не нужных систем поднимет Спринг? Тут ноль поскольку конфигурируется только то, что используется и не более.
Спринг заметно быстрее поднимает приложение просто потому, что грузит ровно то, что требуется и не более.Опять логическая ошибка. То, что грузит сервер, никак не свзано с тем, что грузит приложении. Если я запускаю томкат, то это как бэ вообще не сервер приложений, он запустит только контейнер сервлетов . Если я запускаю WebSphere, то само собой, она грузит дохрена чего, так как это сервер приложений, и он расчитан на широкий круг задач. Там и EJB, и WebServices, и JNDI, и еще куча всего. Спринг опять таки тут абсолютно ни при чем. Вы сравниваете принципиально разные продукты и каким-то образом пытаетесь запихнуть сюда спринг
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37572141
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
офф: У нас на учебе (эконом) была пара девочек, такие себе быдло-девочки подружки, все на свете знали, были крутейшими из крутейших и никогда, никого не слушали. Им говорят препод говорит, а они одно что, доказывают, что это не так, хотя вся группа видит, что материал они вообще в глаза не видели. Зато пафоса ууух как много. Правда и запросы у них были - лишь бы 3 отхватить.
Дак вот, некоторые здесь, мне этих девочек сильно напоминают.
Прежде чем с кем-то спорить и ругаться, посмотрели бы на профиль того, кто ответил и сравнили со своим. Очень "радует" когда такие вот быдло-девочки приходят из ветки "просто треп", где у них 90% сообщений и начинают "гнуть пальцы" или восхищаться элементарными вещами, хваля за ответ, который можно было нагуглить за 5 минут.
Простите - накипело )))
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37572395
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первое и основное. Наверное это и не дает svenom понять меня )))

Я говорю не про реализацию, а про идею. Откуда пошла идея, где она была обкатана. Это примерно как iPhone показал всем производителям телефонов, что можно сделать телефон без кнопок. На одном только тач-скрине. Да были и до iPhone подобные разработки. Но первая коммерчески успешная - именно iPhone и после него уже другие производители подхватили идею и начали делать тач-скриновые мобилки.

Я пытался показать что Spring это удобная реализация и именно он стоит во главе многих глобальных трендов развития java.

svenomVoDASpring - один из первых (или первый) фреймворк удобно реализовавший эту возможности. JavaEE повторил удобный опыт.Хоть убейте - не могу понять, о чем вы говорите. Как спринг связан с сервлетами? Может быть вы про Spring MVC говорите?
А как спринг с аннотациями связан? Аннотации - это глобальный тренд, его используют и JPA, и JAXWS, и вские биндинговые фреймворки, и XML-фреймворки, и Hibernate, и Spring, и т.д.. Как можно утверждать, что аннотации в сервлетах - это веяние Спринга - непонятно.Согласен. Вы правильно пишете.

Моя мысль - тренд применять аннотации вместо web.xml для конфигурирования сервлетов начал Spring.

svenomVoDAПопробуйте закинуть Entity в WAR и развернуть на JavaEE 5 совместимом сервере. Оно взлетело?
Теперь в WAR добавляется Spring (с настройкой для Hibernate) и закидывается на Tomcat. Оно уже взлетит.Опять логическая ошибка. Оно взлетает не из-за спринга, а из-за хибера. Я могу спокойно засунуть в варник ентити и хибер и он взлетит. Спринг тут вообще ни при чем.Cогласен. Spring дает удобную возможность использовать JPA в WAR.

Тренд давать возможность в WAR работать с JPA в JavaEE навеяна Spring. Spring довольно удобно реализовал и заместил JavaEE во многих проектах.

svenomОпять логическая ошибка. То, что грузит сервер, никак не свзано с тем, что грузит приложении.Так это и есть проблема. Нафига сервер грузит то, что не требуется в его работе? Задача сервера - обслуживание приложений. Если приложения не требуют тех или иных сервисов, то данные сервисы вообще не должны запускаться.

Идея не грузить то, что не нужно пришла в JavaEE под давлением со стороны Spring.

svenomЕсли я запускаю томкат, то это как бэ вообще не сервер приложений, он запустит только контейнер сервлетов . Если я запускаю WebSphere, то само собой, она грузит дохрена чего, так как это сервер приложений, и он расчитан на широкий круг задач. Там и EJB, и WebServices, и JNDI, и еще куча всего.я сравниваю возможности предоставляемые Tomcat+Spring с одной стороны и WebSphere с другой. Учитывая, что мне из этой кучи нужно 3-4 технологии. Остальное просто бессмысленно запускается.

К примеру WebServices- если ни одно приложение не пользуется WebServices эта служба не должна запускаться и тратить время в разработке и ресурсы в продакшене. К этому сейчас и подходят в JavaEE.

svenomСпринг опять таки тут абсолютно ни при чем. Вы сравниваете принципиально разные продукты и каким-то образом пытаетесь запихнуть сюда спринг Spring идет в связке Tomcat+Spring.

Основная мысль в том, что проигрывая связке T+S в кастомизуемости и минимизации запускаемых сервисов JavaEE начала терять аудиторию. И для сохранения потребителей они ввели профили, которые и позволяют (по крайней мере на слайдах презентаций ) настраивать JavaEE complaint сервера так же гибко, как это позволяет связка T+S.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37572448
justforsqlru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomзабыл никsvenom, ты часом DI и IoC не путаешь?:) Декларативное описание транзакций и скоупов по сути и есть inversion of control.Не, не путаю. А вам поясню на всякий случай.
IoC - одна из методик уменьшения связанности между объектами. Это подход.
DI - одна из реализаций IoC. Другая распространенная реализация - Service Locator
Идем дельше - как реализуются DI? а) контейнеры; б) фабрики.

Spring IoC - это IoC, реализованный через DI, реализованный через контейнер.
Вам стало понятнее?



Мне да, спасибо за матчасть :)
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37572455
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDAМоя мысль - тренд применять аннотации вместо web.xml для конфигурирования сервлетов начал Spring.Все равно ничего не ясно. Вы про какие аннотации вообще говорите? @Controller и иже с ними?
Вывод: Spring не давал и не дает аннотаций типа @WebServlet. Для Spring MVC входной точкой является сервлет, который определен в web.xml.

VoDAТренд давать возможность в WAR работать с JPA в JavaEE навеяна Spring. Spring довольно удобно реализовал и заместил JavaEE во многих проектах.А вы можете объяснить, почему именно это неваяно именно Spring? Я вот свой контраргумент привел - Хибер спокойно работает в JavaEE5 баз Спринга, Хибер через JPA тоже спокойно работает в JavaEE5 без спринга. В чем здесь заслуги Spring?
Вывод: что хибер, что JPA спокойно работают в JavaEE5 без спринга, следовательно он тут вообще нипричем.

VoDAИдея не грузить то, что не нужно пришла в JavaEE под давлением со стороны Spring.Ок, вопрос: каким образом Спринг решает, что грузить, а что нет? Если мне не изменяет память, то определением набора используемых библиотек занимается в первую очередь сборочны тулзы, аля Ant/Maven. Спринг же вообще никак не управляет загрузкой тех или иных компонентов. И ваш пример с Томкатом крайне странный. Вы берете контейнер сервлетов, запихиваете в варник кучу либов и довольно утверждаете: "На томкате то грузится только то, что надо!". Ну конечно, ведь до того, как вы загрузили туда варнки с либами (например, всякие EJB< JPA, JAXWS...), их там мообще не было. Я с таким же успехом могу сказать: вот как круто, я запустил десктоп приложение и оно загрузило только то, что нужно!
Немного оффтоп - и что это за такое мифическое преимущество "быстрый старт ервера и приложения"? У вас в продакшене приложения и сервера стартуют/перестартуют по 100 раз на дню?
Вывод: судя по всему, вы перепутали Spring и Ant/Maven.


VoDAя сравниваю возможности предоставляемые Tomcat+Spring с одной стороны и WebSphere с другой. Учитывая, что мне из этой кучи нужно 3-4 технологии. Остальное просто бессмысленно запускается.
К примеру WebServices- если ни одно приложение не пользуется WebServices эта служба не должна запускаться и тратить время в разработке и ресурсы в продакшене. К этому сейчас и подходят в JavaEE.Ок, мне тут нечего добавить к тому, что я написал выше. Спринг никоем образом не управляет тем, что грузить, а что нет. Это ответственность сборщиков и настройки класслоадеров.

VoDAОсновная мысль в том, что проигрывая связке T+S в кастомизуемости и минимизации запускаемых сервисов JavaEE начала терять аудиторию . И для сохранения потребителей они ввели профили, которые и позволяют (по крайней мере на слайдах презентаций ) настраивать JavaEE complaint сервера так же гибко, как это позволяет связка T+S.Очень забавная мысль. Вы считаете, что из-за того, что Томкат стартует за 5 секунд, а та же WebSphere за 50, она потеряет аудиторию в пользу Spring?
Вы немного путаете - на проектах, где хватает томката (простенькие сайты и корп. приложения), используют Томкат. Если требования к приложению указывают, на то, что надо использовать полноценный сервер приложений, то используют сервер приложений. И уж поверьте, время старта сервера, никогда не является причиной выбора Томката в пользу сервера приложений
Вывод: логическай ошибка в рассуждении, непонимание на основании чего выбирают платформу для приложения.

И для сохранения потребителей они ввели профили, которые и позволяют (по крайней мере на слайдах презентаций ) настраивать JavaEE complaint сервера так же гибко, как это позволяет связка T+S.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37572486
justforsqlru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenom...

Уважаемый svenom поделитесь пожалуйста знаниями.

Ну нафига большие конторы юзают сервера приложений ?
Почему им не хватает томката плюс спринга.

Судя по вашим знаниям вы реально понимаете назначение использования тяжеловесных серверов EJB вместо томката и спринга.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37572536
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Что использует приложение? Если ему нужно EJB, JPA с XA транзакциями, то что проще - купить ту же WebSphere с уже готовыми реализациями EJB, JPA и иже с ними, где IBM их будет вылизывать с ного до головы, оперативно реагировать на баги и предоставлять прочие плюшки лицензионного ПО, или же взять Томкат, в который потом запихнуть какой-нибудь опен-сорсный OpenEJB, разработчики которого вам ничего не должны + хз, как оно вообще заведется с томкатом? Если приложение мелкое, а бабал нет - не вопрос, мудимся с Tomcat, если с деньгами нормуль - покупаем готовое коробочное решение, вместо попыток скрестить коня с ослом.
В такие плюшки AppServer-ов входят EJB, JDBC - всякие коннекшн пулы, WebService - с кучей всякий плюшек по всяким WS-Security, WS-Adressing и прочих WS-*, JMS и т.д.
2) Возможности инфраструктуры. Вот нужно моему приложению работать с MQ, оно заведется на Tomcat? Ну, с кучей возни и проблем, гляди и заведется. А в сфере заводится с пол-щелчка, используя все плюшки и особенности MQ.
А вот мне надо приложение воткнуть в ESB-шину. Что делать? В той же сфере шина поднимается в лет, мгновенно интегрируется со всякими security realm'ами и JMS'ами. А томкат что?
Далее - кластеризация и кеширование, high availability. У каждого вендора свои плюхи
3) Остальные плюшки - например, проприетарные IDE или проприетарные обкатанные JVM, например для RAD, AIX. У меня ребята в соседнем проекте работают в RAD, пищят от восторга. Не потому, что он универсален, а потому что на их требования он лег идеально. А вот у меня тоже проект на WebSphere, но мне RAD не пошел - другие технологии, он просто не нужен.
4) Чуть не забыл - а как с еарниками то быть? Томкат еарники не понимает, его политика класслоадеров весьма топорная, (почитайте на досуге, как работают класслоадеры в Tomcat, и что можно делать с класслоадерами в WebSphere)

Общий вывод - любые сервера, любые контейнеры это инфраструктура. Выбор того или иного контейнера осуществляется, исходя из:
1) Функицональных требований
2) Нефункциональных требований (банально, правда? )
3) Бюджета
4) Опыта команды
5) Политической подковерной волокиты - будем честными, она имеет место быть.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37572568
justforsqlru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenom...

Спасибо ....

Просто часто слышу типа "нахера эти сервера приложений" взял томкат прикрутил spring и все работает.

Причем так говорят чуть ли не в подовляющем большинстве москвоских контор пишущих на java.

Вот и интересно стало если сервера приложения все же живы значит кто то их юзает.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37572586
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justforsqlru ,
Томкат это контейнер сервлетов, точка. Он решает принципиально другие задачи, чем AppServer'ы.
Про "живость" аппсерверов - они всегда были и остаются значительно более живые, чем томкат, так как программирование на Java не ограничивается написанием простеньких веб-приложений.
Вот вам сводка с hh.ru, регион - Москва/Питер, вакансии за месяц:
Ключевое слово Найдено вакансии ПримечаниеTomcat 107WebSphere 113WebLogic 77JBoss 73 Возможно несовсем корректноGlassfish 28
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37572597
justforsqlru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenom justforsqlru ,
Томкат это контейнер сервлетов, точка. Он решает принципиально другие задачи, чем AppServer'ы.
Про "живость" аппсерверов - они всегда были и остаются значительно более живые, чем томкат, так как программирование на Java не ограничивается написанием простеньких веб-приложений.
Вот вам сводка с hh.ru, регион - Москва/Питер, вакансии за месяц:
Ключевое слово Найдено вакансии ПримечаниеTomcat 107WebSphere 113WebLogic 77JBoss 73 Возможно несовсем корректноGlassfish 28

Ну видать мне попадались одни быдложаражки
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37572632
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justforsqlru,
потому что самое сложное, это масштабируемость. Т.е. знать границу эффективности и оверхед'a решения.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37572647
justforsqlru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123justforsqlru,
потому что самое сложное, это масштабируемость. Т.е. знать границу эффективности и оверхед'a решения.

Ну вот поясните мне что дает использование EJB в тех же серверах приложений ?
Оно медленное, тяжкое в разработке.

Т.е. его используют только потому что потом саппорт того же веблоджика спасет проект ?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37572650
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justforsqlruНу вот поясните мне что дает использование EJB в тех же серверах приложений ?
Оно медленное, тяжкое в разработке.не медленное, не тяжкое
всё ок
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37572653
justforsqlru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grasoff.netjustforsqlruНу вот поясните мне что дает использование EJB в тех же серверах приложений ?
Оно медленное, тяжкое в разработке.не медленное, не тяжкое
всё ок

Вы мерили разницу в перфомансе между EJB и Spring ?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37572661
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justforsqlru,
холивар
авторРешение.
В данной ситуации использование EJB является излишним

http://entjava.blogspot.com/2011/05/ejb-ejb.html
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37572665
justforsqlru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123justforsqlru,
холивар
авторРешение.
В данной ситуации использование EJB является излишним

http://entjava.blogspot.com/2011/05/ejb-ejb.html

Нет я не холиварю в стиле EJB гавно юзайте Spring.
Я реально пытаюсь понять разницу в использовании.

Не могли бы вы скопировать из ссылки данные в форум (у меня не открывается ссылка)
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37572670
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justforsqlruВы мерили разницу в перфомансе между EJB и Spring ?Мне кажется, что это вы должны привести здесь аргументацию вашего выражения "EJB медленное и тяжелое". Откуда у вас такая информация? Опыт? Видели бенчмарки? АБС (адна бабка сказала)?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37572681
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, Petro123!

> http://entjava.blogspot.com/2011/05/ejb-ejb.html

Там вроде EJB2 описывается.

--
Алексей
JID: alxt@ya.ru
Posted
via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37572699
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GKS_Samara> http://entjava.blogspot.com/2011/05/ejb-ejb.html
Там вроде EJB2 описывается.

Ага. У кого-то хватила ума перевести статью 10ти-летней давности.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37572702
justforsqlru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomjustforsqlruВы мерили разницу в перфомансе между EJB и Spring ?Мне кажется, что это вы должны привести здесь аргументацию вашего выражения "EJB медленное и тяжелое". Откуда у вас такая информация? Опыт? Видели бенчмарки? АБС (адна бабка сказала)?


Я лишь слышал от девелоперов что EJB тормозное и легче юзать спринг.
Сам опытов не проводил.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37572710
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomВот вам сводка с hh.ru, регион - Москва/Питер, вакансии за месяц:
Ничего не говорящая табличка. В одной вакансии я могу указать требования к WebLogic потому-что-вот-три-года-назад-на-нем-был-проект-и-мало-ли-еще-будут.
А реально все прогается на Spring+tomcat.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37572731
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justforsqlruВы мерили разницу в перфомансе между EJB и Spring ?да, вот только что. ради пятницы и фана.

разницы нет.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37572744
justforsqlru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grasoff.netjustforsqlruВы мерили разницу в перфомансе между EJB и Spring ?да, вот только что. ради пятницы и фана.

разницы нет.

А в чем была суть замера ?

Кстати не пробывали проверять разницу перфоманса когда энтит бине ejb-шные

и сравнить их с PoJo в threadLocal которые персистятся из памяти на коммит XA транзакции ?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37572749
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justforsqlruА в чем была суть замера ?во времени работы метода
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37572752
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justforsqlruКстати не пробывали проверять разницу перфоманса когда энтит бине ejb-шныенет, я последний раз такие в 2008 году видел.

ps через пару недель 2012 год, если что
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37572765
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grasoff.netjustforsqlruА в чем была суть замера ?во времени работы методана всякий, jboss702 vs jetty6126+spring306
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37572779
justforsqlru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grasoff.netgrasoff.netпропущено...
во времени работы методана всякий, jboss702 vs jetty6126+spring306

А код скиньте плиз
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37572885
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GKS_SamaraДобрый день, Petro123!
> http://entjava.blogspot.com/2011/05/ejb-ejb.html
Там вроде EJB2 описывается.

:(
ну дык других ссылок посвежее нету.
Как говорит VoDA, интересен подход, а не ..."почему сапоги не чищены".
Т.е. интересна граница оверхеда и простота решений.
Ещё заголовок 5 баллов :)
EJB-ить или не EJB-ить, вот в чем вопрос
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37572904
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, Petro123!

> Т.е. интересна граница оверхеда и простота решений.

Так EJB3 как раз много проще EJB2.
Т.е. теперь, насколько я понимаю, в смысле объёма кода разница
пренебрежимо мала.

А скорость- всё одно основные тормоза в Hibernate, который и там и там :)

--
Алексей
JID: alxt@ya.ru
Posted
via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573151
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomVoDAМоя мысль - тренд применять аннотации вместо web.xml для конфигурирования сервлетов начал Spring.Все равно ничего не ясно. Вы про какие аннотации вообще говорите? @Controller и иже с ними?
Вывод: Spring не давал и не дает аннотаций типа @WebServlet. Для Spring MVC входной точкой является сервлет, который определен в web.xml.@WebServlet появились после @RequestMapping. И мое ИМХО что именно под вилянием идей реализованых в Спринг.

svenomVoDAТренд давать возможность в WAR работать с JPA в JavaEE навеяна Spring. Spring довольно удобно реализовал и заместил JavaEE во многих проектах.А вы можете объяснить, почему именно это неваяно именно Spring? Я вот свой контраргумент привел - Хибер спокойно работает в JavaEE5 баз Спринга, Хибер через JPA тоже спокойно работает в JavaEE5 без спринга. В чем здесь заслуги Spring?
Вывод: что хибер, что JPA спокойно работают в JavaEE5 без спринга, следовательно он тут вообще нипричем.до появления спринга WAR не умел работать с JPA.

svenomVoDAИдея не грузить то, что не нужно пришла в JavaEE под давлением со стороны Spring.Ок, вопрос: каким образом Спринг решает, что грузить, а что нет? Если мне не изменяет память, то определением набора используемых библиотек занимается в первую очередь сборочны тулзы, аля Ant/Maven. Спринг же вообще никак не управляет загрузкой тех или иных компонентов.
jar ники конечно maven закидывает. только если конфигурация компонента не прописана в applicationContext, то и компонент не грузится самим Спрингом - к нему просто нет обращений.

svenomИ ваш пример с Томкатом крайне странный. Вы берете контейнер сервлетов, запихиваете в варник кучу либов и довольно утверждаете: "На томкате то грузится только то, что надо!". Ну конечно, ведь до того, как вы загрузили туда варнки с либами (например, всякие EJB< JPA, JAXWS...), их там мообще не было. Я с таким же успехом могу сказать: вот как круто, я запустил десктоп приложение и оно загрузило только то, что нужно!
Именно так!!! десктоп приложение само знает что грузить (что не надо там отсутствует). Спринг (из applicationContext) вытаскивает знания что нужно грузить. А JavaEE сервера грузят вообще ВСЕ, без обращения к приложению - это и его проблема.

И появилась задача сделать АппСервера адекватными задаче. Это реализовали через профили. Профиль - возможность настроить КАКИЕ сервисы запускает сервер.

svenomVoDAя сравниваю возможности предоставляемые Tomcat+Spring с одной стороны и WebSphere с другой. Учитывая, что мне из этой кучи нужно 3-4 технологии. Остальное просто бессмысленно запускается.
К примеру WebServices- если ни одно приложение не пользуется WebServices эта служба не должна запускаться и тратить время в разработке и ресурсы в продакшене. К этому сейчас и подходят в JavaEE.Ок, мне тут нечего добавить к тому, что я написал выше. Спринг никоем образом не управляет тем, что грузить, а что нет. Это ответственность сборщиков и настройки класслоадеров.а кто у класслоадера запрашивает классы и заставляет его их грузить? учитывая, что Спринг - IoC?

наверное класслоадер сам решает что требуется приложению и зафигачивает все jar-ники в память
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573178
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomVoDAОсновная мысль в том, что проигрывая связке T+S в кастомизуемости и минимизации запускаемых сервисов JavaEE начала терять аудиторию . И для сохранения потребителей они ввели профили, которые и позволяют (по крайней мере на слайдах презентаций ) настраивать JavaEE complaint сервера так же гибко, как это позволяет связка T+S.Очень забавная мысль. Вы считаете, что из-за того, что Томкат стартует за 5 секунд, а та же WebSphere за 50, она потеряет аудиторию в пользу Spring?скорость старта - дополнительный бонус. А вот минимизация расходов на неиспользуемые компоненты - очень даже интересный бонус.

К примеру приложению нужно JSP + JPA. На T+S для работы требуется заметно меньше памяти и CPU, чем для полноценного же JBoss. Зачем расходовать больше, если это не нужно.

svenomВы немного путаете - на проектах, где хватает томката (простенькие сайты и корп. приложения), используют Томкат. Если требования к приложению указывают, на то, что надо использовать полноценный сервер приложений, то используют сервер приложений.
А что же тогда крупные java проекты типа Liferay и Alfresco сбежали с полноценных JavaEE серверов на использование Spring? наверное за несколько лет работы не постигли ДАО и "сдулись"

PS Возможность работать на Tomcat это бонус использования Спринга.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573203
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDA@WebServlet появились после @RequestMapping. И мое ИМХО что именно под вилянием идей реализованых в Спринг.Ок, ИМХО, так ИМХО.

VoDAдо появления спринга WAR не умел работать с JPA.Ок, я делаю следующие действия:
1) Кладу в варник хибренейт
2) Кладу в варник JPA
3) Собираю
Вы можете пояснить, почему оно не будет работать? И как спринг магическим образом эту проблему решает?
На самом деле JPA может быть запущен где-угодно и кем-угодно, так как это просто библиотека , не больше и не меньше. Я могу его запустить из jar, могу из war, могу из ear. Да, само собой, я могу столкнуться с некоторыми ограничениями, например не будет поддерживаться CMT, так как у меня контейнера не будет, но факт остается фактом - JPA это обычная либа, которая запуститься откуда-угодно.

VoDAjar ники конечно maven закидывает. только если конфигурация компонента не прописана в applicationContext, то и компонент не грузится самим Спрингом - к нему просто нет обращений.Вы это серьезно? Правда серьезно?
1) Тот или иной джарник грузится на спрингом, а класслоадерами. Спринг к загрузке классов отношения не имеет.
2) Рассмотрим примерчик.
Есть два джарника, в каждом из них под одному классу:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public class A {
    public void callB() {
        Class B = new ClassB();
        b.call();
    }
}
public class B {
    public void call() {
        // пофиг что
    }
}


Теперь я это собираю в два отдельных джарника - A.jar и B.jar
Далее я пишу контекст:
Код: xml
1.
<bean id="instanceA" class="B" />


Теперь я складываю все в war/ear, потом деплою в какой-нить контейнер, потом запускаю приложение. В каком-то месте приложения происходит вот такой вызов:
Код: java
1.
2.
3.
Context ctx = // получаем наш контекст
A a = ctx.getBean("instanceA");
a.callB();


Теперь вам два вопроса:
1) Определяли ли мы в контексте бин, соответствующий классу B? (Моя догадка: нет)
2) Загружен ли у нас класс B в JVM по итогам работы сниппета выше? (Моя догадка: да)
Еще раз - спринг вообще никак не управляет загрузкой компонентов.

VoDAИменно так!!! десктоп приложение само знает что грузить (что не надо там отсутствует). Спринг (из applicationContext) вытаскивает знания что нужно грузить. А JavaEE сервера грузят вообще ВСЕ, без обращения к приложению - это и его проблема.См. выше.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573212
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDAК примеру приложению нужно JSP + JPA. На T+S для работы требуется заметно меньше памяти и CPU, чем для полноценного же JBoss. Зачем расходовать больше, если это не нужно.Напомните пожалуйста, сколько нынче стоит 1Gb оперативы - именно в такую сумму выливается описанное вами "преимущество".

VoDAА что же тогда крупные java проекты типа Liferay и Alfresco сбежали с полноценных JavaEE серверов на использование Spring? наверное за несколько лет работы не постигли ДАО и "сдулись"Я выше приводил мотивацию использования серверов приложений. Их мотивация мне не известна, вполне вероятно, как и вам. Состояние рынка труда я привел выше - делайте выводы, что сдувается, а что нет
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573215
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenom1) Что использует приложение? Если ему нужно EJB, JPA с XA транзакциями, то что проще - купить ту же WebSphere с уже готовыми реализациями EJB, JPA и иже с ними, где IBM их будет вылизывать с ного до головы, оперативно реагировать на баги и предоставлять прочие плюшки лицензионного ПО, или же взять Томкат, в который потом запихнуть какой-нибудь опен-сорсный OpenEJB, разработчики которого вам ничего не должны + хз, как оно вообще заведется с томкатом? Если приложение мелкое, а бабал нет - не вопрос, мудимся с Tomcat, если с деньгами нормуль - покупаем готовое коробочное решение, вместо попыток скрестить коня с ослом.
В такие плюшки AppServer-ов входят EJB, JDBC - всякие коннекшн пулы, WebService - с кучей всякий плюшек по всяким WS-Security, WS-Adressing и прочих WS-*, JMS и т.д.SpringSources предоставляет саппорт и на сам Спринг и на Tomcat под него. Сами же еще и "облачные" системы предлагают поверх этого.

Если приложение завинчено на EJB то никуда от JavaEE не деться. А если пишете сами, то что удобнее использовать "универсальный самосвал на 100 тонн" или "скрестив два колеса с двигателем получить мотоцикл" - тут уже выбор архитектора. Что ему больше нужно для решения - многотоннажный самосвал или спортивный байк ;)

svenom2) Возможности инфраструктуры. Вот нужно моему приложению работать с MQ, оно заведется на Tomcat? Ну, с кучей возни и проблем, гляди и заведется. А в сфере заводится с пол-щелчка, используя все плюшки и особенности MQ.
А вот мне надо приложение воткнуть в ESB-шину. Что делать? В той же сфере шина поднимается в лет, мгновенно интегрируется со всякими security realm'ами и JMS'ами. А томкат что? MQ заводится на Spring + Tomcat в той конфигурации в которой нужно. А можно вообще вынести MQ на отдельную машину и разгребать месседжи с нескольких нод.

svenomДалее - кластеризация и кеширование, high availability. У каждого вендора свои плюхиСтоит знать, что Spring также предлагает подобные возможности ;)

svenom4) Чуть не забыл - а как с еарниками то быть? при работе со спрингом можно работать и с WAR и с EAR. Tomcat это способ запустить Спринг попутно получая бонусы. Можно и на полноценном JavaEE гонять Spring. Вопрос - нужно ли?

ИМХО если проект не очень архитектурно странный, то проще его запилить в виде WAR и гонять на более легких серверах нежели WebSphere.


PS WebSphere это наверное круто и интересно. Но в опыте моей компании я не нашел задач которые на WebSphere решались бы лучше, чем кастомное решение на Spring (+ любой подходящий контейнер). выбор WebSphere был только по соображениям маркетинга или из-за хорошо залеченных топ-менеджеров.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573225
justforsqlru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDA...

Ну т.е. как я и говорил апп сервера - это понты ?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573227
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDAСтоит знать, что Spring также предлагает подобные возможности ;)Можно ссылочку на эту "возможность" спринга? Спринг мне может кластер организовать?

VoDAИМХО если проект не очень архитектурно странный, то проще его запилить в виде WAR и гонять на более легких серверах нежели WebSphere.Можете привести критерии "странности" проекта?

VoDAWebSphere это наверное круто и интересно. Но в опыте моей компании я не нашел задач которые на WebSphere решались бы лучше, чем кастомное решение на Spring (+ любой подходящий контейнер). выбор WebSphere был только по соображениям маркетинга или из-за хорошо залеченных топ-менеджеров.Ок все ясно, вы основываетесь на своем негативном опыте и пытаетесь его экстраполировать на все случаи. Бывает.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573242
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomСпринг мне может кластер организовать?
Spring это универсальный клей. JBoss Tree Cache либо Terracotta приклеиваются к нему на раз. И что главное - вы сами себе выбираете стратегию и топологию кластеризации. В JEE как реализовано, так и будете использовать.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573247
justforsqlru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenom...

Погугли Cluster4Spring
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573248
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justforsqlruПросто часто слышу типа "нахера эти сервера приложений" взял томкат прикрутил spring и все работает.Tomcat + Spring это конструктор который при должном умении позволяет собрать мотоцикл, гоночный болид или кран. А может самолет или самосвал - зависит от задачи.

Сервера приложений - это собранные за вас самосвалы.

Что вам больше подходит решение собранное специально под вас или коробка, где все запаяно и закрыто - решать только вам.

justforsqlruВот и интересно стало если сервера приложения все же живы значит кто то их юзает.Кому то стабильность нужна намного сильнее чем скорость работы или скорость разработки. К примеру банки. Вот они и покупают готовые решения.

Еще коммерческие (сильно платные) сервера приложений могут работать в едином кластере, когда версии серверов входящих в кластер - различны. Это позволяет произвести миграцию на новую версию серверов без остановки кластера.

В Spring подобное тоже реализуется, но это потребует усилий. Ибо нужно заранее просчитать такой вариант и подготовиться.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573264
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDAСервера приложений - это собранные за вас самосвалынет, их можно тюнить.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573268
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDATomcat + Spring это конструктор который при должном умении позволяет собрать мотоцикл, гоночный болид или кран. А может самолет или самосвал - зависит от задачи.
Сервера приложений - это собранные за вас самосвалы.
Что вам больше подходит решение собранное специально под вас или коробка, где все запаяно и закрыто - решать только вам.У меня начинает закрадываться ощущение, что вы меня троллите.
Правильная метафора будет такова:
1) Tomcat (спринг тут абсолютно ни при чем) - это строительная площадка, на которой валяется молоток и пара гвоздей. При желании вы покупаете нужные вам материалы и инструменты и строите, что захотите.
2) AppServer - это строительная площадка, на которую уже пригнали кучу оборудования и интсрументов. Если хотите - используете то, что уже дано для построения своего проекта. Если хотите - точно так же идете в магазин и покупаете нужные вам инструменты. То есть если в АппСервере изначально есть молоток, то это вовсе не значит, что вы обязаны его использовать. Хотите используйте, хотите купите другой. А потому фраза
VoDAгде все запаяно и закрытонапрочь лишена смысла.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573291
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Более того, кто запрещает использовать Spring в АппСерверах? У нас в огромной куче проектов на АппСерверах стоит Спринг. Все потому, что спринг это реализация DI. Она во многих моментах гибче и удобней, чем EJB.
А потому выбор Tomcat+Spring или JavaEE сервер - бессмысленен по сути. На самом деле выбор идет между Tomcat или JavaEE сервер, а потом ищут вопрос на ответ "как реализовывать DI?" - через EJB или через Spring, или через что-нить еще (если DI вообще нужен в проекта, разумеется)
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573296
justforsqlru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomгде все запаяно и закрытонапрочь лишена смысла.[/quot]

Вы когда нибудь смотрели код стабов ejb-шных
Особенно в местах где стоит строка типа (Throwable e) {}

По вашему это не запаяно и не закрыто ?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573320
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justforsqlruВы когда нибудь смотрели код стабов ejb-шных
Особенно в местах где стоит строка типа (Throwable e) {}
По вашему это не запаяно и не закрыто ?По-моему вы не поняли, о чем идет речь. VoDA утверждает, что АппСервер это некая жестка предопределенная инфраструктура, которая вносит определенные ограничения на разрабатываемое ПО. Типа "использовать только реализацию EJB, которая идет в комлпекте". Но дело в том, что это глупость, так как сервер приложений вообще никак не ограничивает разработчика. Не понравилась реализация EJB из коробки - ну ок, положи свою, которая тебе нравиться.
Вы же вообще ушли от обсждения "сервер приложений vs контейнер сервлетов", в сторону "открытые исходники vs закрытые исходники". Это к теме разговора вообще никакого отношения не имеет.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573323
justforsqlru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenom....

Ну тогда поясните нахрена юзать аппсервер при условии что EJB мы не юзаем ?

Только ради кластера ?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573327
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomОк, ИМХО, так ИМХО.это мое мнение сложившееся за то время пока возможности были в Spring и отсутствовали в JavaEE. И поддержанное некоторыми Sun-инженерами. Когда еще был Sun.

svenomВы можете пояснить, почему оно не будет работать? И как спринг магическим образом эту проблему решает? ты прав :) спринг это делает удобным. посмотрев что удобно JPA использовать в WAR без дополнительного секса - это перенесли в JavaEE. Опять же я не говорю, что это принципиально не удобно. Мысль, что идея EJB Lite была навеяна под вилянием Spring.

svenom
Class B = new ClassB();
b.call();

1) Определяли ли мы в контексте бин, соответствующий классу B? (Моя догадка: нет)
2) Загружен ли у нас класс B в JVM по итогам работы сниппета выше? (Моя догадка: да)
Еще раз - спринг вообще никак не управляет загрузкой компонентов.Пример довольно кособок увы. А где применение IoC? Или вы EJB через new создаете?

В данном примере Spring вообще не нужен как и JavaEE.

Теперь вас один вопрос:
Вы Spring хотя бы год-два в продакшен проектах использвали? (Моя догадка: нет).
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573329
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justforsqlruНу тогда поясните нахрена юзать аппсервер при условии что EJB мы не юзаем ?Вы знаете, какие задачи решает EJB и зачем он нужен?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573332
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenom
Код: java
1.
2.
3.
4.
5.
6.
public class A {
    public void callB() {
        Class B = new ClassB();
        b.call();
    }
}




Попробую набрость прямо здесь пример (в виде псевдо-кода).

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
public interface A {
    public void call();
}

public class B implements A{
    public void call() {
        // do something
    }
}

public class C implements A{
    public void call() {
        // do something else
    }
}

public class Work {
    private A a; // injection here
    ...
    public void doWork() {
        a.call();
    }
}


Теперь конфиг:
Код: xml
1.
2.
3.
4.
<bean id="a" class="C" ></bean>
<bean class="Work" >
    <property name="a" ref="a"/>
</bean>



Вопросы:
будет ли класс B загружен класслоадером? очевидно нет - не одного запроса на загрузку не пошло.
почему в вашем случае класс B был загружен? очевидный ответ - класс B был инстанциирован напрямую.

PS сорри если где криво набросал - писать код в браузере то еще удовольствие.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573334
justforsqlru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomjustforsqlruНу тогда поясните нахрена юзать аппсервер при условии что EJB мы не юзаем ?Вы знаете, какие задачи решает EJB и зачем он нужен?

Встроенная поддержка транзакций
Секурити

Что то еще забыл ?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573346
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomЯ выше приводил мотивацию использования серверов приложений. Их мотивация мне не известна, вполне вероятно, как и вам. Состояние рынка труда я привел выше - делайте выводы, что сдувается, а что нетИх мотивация мне понятна :) поработав и с тем и с другим я сделал выводы.

рынок труда вещь странная - ее нужно анализировать оченьаккуратно. к примеру у нас в вакансиях обычно значятся Tomcat, JBoss, WebSphere. Вы нас наверное во все три группы впишите... только проектов на Tomcat+Spring около десятка, а WebSphere - один. JBoss вообще указан как самый часто используемый ибо флагман открытых АппСерверов, но у нас он не применяется.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573352
justforsqlru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDA но у нас он не применяется.

Во точно
Везде пишут что требуется знание EJB + (Weblogic m JBOSS)

А реально местные давно апп сервак выкинули и все на томкат переписали.

Так что хх не показатель.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573367
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justforsqlruНу т.е. как я и говорил апп сервера - это понты ?Эм. Это однобокое понимание проблемы.

АппСервера имеют свои преимущества, кастомные решения на Spring - свои.

Если мне поставят решение собрать кластер "по быстрому" - я соберу на JBoss минут за 20 с учетом скачивания и инсталляции.
А если "по грамотному", то я же буду долго и вдумчиво медитировать над конфигурацией кластера и сделаю за месяц на Spring с нагрузочным тестированием и проверкой сколько параллельных обращений он выдержит.

Есть и нюансы типа того, что GWT на некоторых АппСерверах не дружит с JPA Entity. Т.е. чтобы передать данные на клиента их приходилось перекладывать в вид промежуточных DTO. Баг довольно известный. Потому при работе с GWT я возьму Spring.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573369
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDAты прав :) спринг это делает удобным. посмотрев что удобно JPA использовать в WAR без дополнительного секса - это перенесли в JavaEE. Опять же я не говорю, что это принципиально не удобно. Мысль, что идея EJB Lite была навеяна под вилянием Spring.Можете пояснить, в чем заключается "дополнительный секс"?

VoDAПример довольно кособок увы. А где применение IoC? Или вы EJB через new создаете?
В данном примере Spring вообще не нужен как и JavaEE.Замечена либо поптыка троллинга, либо полное непонимание предмета разговора. Я вам напомню, к чему привел этот пример:
авторjar ники конечно maven закидывает. только если конфигурация компонента не прописана в applicationContext, то и компонент не грузится самим Спрингом - к нему просто нет обращений.Взято отсюда 0 11757407 . То есть вы утверждаете, что именно спринг отвечает за то, что грузить, а что нет. Если какой-либо класс либы не прописан в контексте, то она, дескать, и не грузится вовсе. Мой пример как раз показывает случаи, когда есть две либы и одна грузит другую без какого-либо участия спринга. Если вы не можете осмыслить этот пример, то давайте я упрощу вам задачу - Hibernate требуется javassist для своей работы.
Вопрос: вы в контексте спринга что-нибудь из javassist прописываете? Ну там бины какие-нибудь? (Моя версия: нет)
Вопрос: javassist загружает при работе с Hibernate? (Моя версия: да)
Вопрос: как же тогда объяснить такой парадокс - либы нет в спринге, но она загружается?
Дальше идем, интересные вопросы:
VoDAА где применение IoC? Или вы EJB через new создаете? То есть вы убеждены, что в приложении все работает через Spring, используя DI? И все сторонние либы тоже его используют?
Причем тут EJB я вообще не понял - про него речи не было.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573373
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomМожно ссылочку на эту "возможность" спринга? Спринг мне может кластер организовать?Спринг это конструктор. Под него можно подложить EhCache или Terracotta.

svenomМожете привести критерии "странности" проекта?то что не может быть выполнено в рамках WAR-ника
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573374
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDAпочему в вашем случае класс B был загружен? очевидный ответ - класс B был инстанциирован напрямую .Совершенно верно. Вы удивитесь, но в любом приложении 95-99% объектов инстанцированы напрямую.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573380
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justforsqlruВстроенная поддержка транзакций
СекуритиК сожалению, вы забыли главное - DI.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573381
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomВы удивитесь, но в любом приложении 95-99% объектов инстанцированы напрямую.
Смелое заявление.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573385
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grasoff.netVoDAСервера приложений - это собранные за вас самосвалынет, их можно тюнить.Я специально более гротескные примеры давал, чтобы можно было проще понять.

Конечно АппСервера можно тюнить. Тот же JBoss имеет несколько заранее подготовленных конфигураций для разных случаев.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573391
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDAСпринг это конструктор. Под него можно подложить EhCache или Terracotta.То есть, я немного перефразирую: Spring не может поднять кластер, но у него есть классы-хелперы, которые позволяют быстро интегрироваться с уже существующим кластером.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573401
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomУ меня начинает закрадываться ощущение, что вы меня троллите.
Правильная метафора будет такова:я пытаюсь объяснить.

svenom1) Tomcat (спринг тут абсолютно ни при чем) - это строительная площадка, на которой валяется молоток и пара гвоздей. Томкат - запускалка для Спринг. Разговор шел и идет о Спринге.

svenom2) AppServer - это строительная площадка, на которую уже пригнали кучу оборудования и интсрументов. Если хотите - используете то, что уже дано для построения своего проекта. Если хотите - точно так же идете в магазин и покупаете нужные вам инструменты. То есть если в АппСервере изначально есть молоток, то это вовсе не значит, что вы обязаны его использовать. Хотите используйте, хотите купите другой. А потому фраза
VoDAгде все запаяно и закрытонапрочь лишена смысла.вы пробовали подменить встроенную в сервер библиотеку на более новую версию? Тот же Hibernate апгрейднуть? или встроенную реализацию JSF заменить на более подходящую?

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

Так что желание сменить версию встроенных систем может быть очень дорогим
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573405
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczСмелое заявление.Берем типичное JavaEE приложение.
Что инстанцируется в обход Spring:
1) Вся инфраструктура контейнера.
2) Все зависимости используемых библиотек. Примеры: slf4j, xml-либы, javassist, "тысячи их".
3) Все ентити
4) Все локальные объекты
5) В некоторых случаях ... контекст самого Спринга

Что инстанцируется спрингом:
1) Только то, что определено контексто, а именно всякие сервисы, контроллеры и иже с ними (причем достаточно большая их часть являются синглтонами).
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573408
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomА потому выбор Tomcat+Spring или JavaEE сервер - бессмысленен по сути. На самом деле выбор идет между Tomcat или JavaEE сервер, а потом ищут вопрос на ответ "как реализовывать DI?" - через EJB или через Spring, или через что-нить еще (если DI вообще нужен в проекта, разумеется)Чаще выбор технологии - EJB и JavaEE stack или Spring как клея и огромного количества фреймвороков, которые через него клеятся к приложению.

А на чем запускать Spring на Tomcat или в силу каких либо особенностей на WebSphere - дело десятое.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573411
justforsqlru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomjustforsqlruВстроенная поддержка транзакций
СекуритиК сожалению, вы забыли главное - DI.

в 2-ке ?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573418
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDAвы пробовали подменить встроенную в сервер библиотеку на более новую версию? Тот же Hibernate апгрейднуть? или встроенную реализацию JSF заменить на более подходящую?
Если либа вложена на уровне сервера, то попытка использовать другую версию может привоить к феерическим багам ввиду наличия в класспасе нескольких версий одних и тех же классов.Конечно пробовал. У нас в одном проекте была седьмая WebSphere, в которой веб-сервисы имплементированы на основе Axis2. А нам надо было подсунуть другую версию Axis2. Делается очень легко:
1) Кладем нашу версию Axis2 в EAR (привет варникам! )
2) Деплоим приложение
3) Изменяем порядок делегирования класслоадера EAR-ника
4) PROFIT - движком веб-сервиса стала наша либа.
У любых современных АппСерверов есть такая возможность.
Очередная попытка обощить либо свое незнание, либо негативный опыт на все ситуации. Это плохая привычка
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573422
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomВы же вообще ушли от обсждения "сервер приложений vs контейнер сервлетов", в сторону ...Как автор этой части обсуждения предлагаю вернуться к изначальной теме "Spring VS JavaEE stack".

Tomcat появился как пример дополнительной возможности, которую дает Spring. Самостоятельно он не расспатривается.

svenomПо-моему вы не поняли, о чем идет речь. VoDA утверждает, что АппСервер это некая жестка предопределенная инфраструктура, которая вносит определенные ограничения на разрабатываемое ПО. Типа "использовать только реализацию EJB, которая идет в комлпекте". Но дело в том, что это глупость, так как сервер приложений вообще никак не ограничивает разработчика. Не понравилась реализация EJB из коробки - ну ок, положи свою, которая тебе нравиться.Сколько раз вы подменяли серверную реализацию контейнера-EJB на свою? сколько времени потребовалось на поиск и исправление всех багов от этой замены?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573428
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomjustforsqlruНу тогда поясните нахрена юзать аппсервер при условии что EJB мы не юзаем ?Вы знаете, какие задачи решает EJB и зачем он нужен?Можно уточнить какие задачи решает EJB и НЕ РЕШАЕТ spriong beans?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573430
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDAЧаще выбор технологии - EJB и JavaEE stack или Spring как клея и огромного количества фреймвороков, которые через него клеятся к приложению.Ничего подобного. Контейнер - это инфраструктура, Spring/EJB - это реализация DI. Поэтому выбор идет так:
1) Определяемся с контейнером
2) Определяемся с реализацией DI - Spring или EJB.
Я повторюсь - большинство проектов, которые я видел крутящимися на сфере, имели в качетсве DI Spring, так как он в большом количестве случаев оказывается гибче и понятнее, чем EJB.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573436
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDAКак автор этой части обсуждения предлагаю вернуться к изначальной теме "Spring VS JavaEE stack".Проблема в том, что "Spring vs JavaEE stack" не имеет ровным счетом никакого смысла. Сравнивать можно "Spring vs EJB".

VoDAСколько раз вы подменяли серверную реализацию контейнера-EJB на свою? сколько времени потребовалось на поиск и исправление всех багов от этой замены?Выше про делегирование класслоадеров почитайте. Мне не приходилось подменять EJB. Если бы пришлось - пошел бы таким же путем.

VoDAМожно уточнить какие задачи решает EJB и НЕ РЕШАЕТ spriong beans?Я где-то дал повод задать мне такой вопрос?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573450
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomМожете пояснить, в чем заключается "дополнительный секс"?в прямой работе с JPA API без декларативного управления транзакциями, без иных фишечек которые может предложить AppServer для EAR или Spring для WAR.

мы помним, что это пункт про EJB 3.0 и что после появления вкусняшечек в Spring появлися EJB Lite в 3.1

svenomТо есть вы утверждаете, что именно спринг отвечает за то, что грузить, а что нет. Если какой-либо класс либы не прописан в контексте, то она, дескать, и не грузится вовсе. Мой пример как раз показывает случаи, когда есть две либы и одна грузит другую без какого-либо участия спринга.Я утверждаю что при грамотном использовании Spring - все зависимости прописываюся только в applicationContext инстанциирует. Явное глупости типа создания bean через new или попытки через new создать EJB я не рассматриваю. Так вот если Spring использован грамотно и зависимости живут только в applicationContext, то в этом случае Spring запросит у класслоадера только требуемые классы. А не требуемые для текущей конфигурации классы загружены не будут.

Сокращая утверждение: Я утверждаю что при использовании Spring будут загружены только требуемые по конфигурации классы (априори считая, что Spring применяется грамотно).
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573458
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomЯ упрощу вам задачу - Hibernate требуется javassist для своей работы.
Вопрос: вы в контексте спринга что-нибудь из javassist прописываете? Ну там бины какие-нибудь? (Моя версия: нет)
Вопрос: javassist загружает при работе с Hibernate? (Моя версия: да)
Вопрос: как же тогда объяснить такой парадокс - либы нет в спринге, но она загружается?
Я люблю упрощения
первый ответ - угадали ;)
второй тоже угадали

Дело в том, что Spring это очень умный клей. Он заранее знает что для работы Hibernate требуется одна из либ подходящих для манипуляции байт-кодом. Так вот если ни одной либы не указано явно, то Spring использует default который для Hibernate выставлен в javassist.

Можно явно указать какую либу использовать. Но чтобы не загромождать конфиг и не смущать юных падаванов эта часть скрыта от непосвященных
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573463
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDAв прямой работе с JPA API без декларативного управления транзакциями, без иных фишечек которые может предложить AppServer для EAR или Spring для WAR.Окей, тут возразить нечего. Так как нам в итоге быт ьс вашим утверждением, что JPA не запустится из war без спринга?

VoDAмы помним, что это пункт про EJB 3.0 и что после появления вкусняшечек в Spring появлися EJB Lite в 3.1Про какие именно "вкусняшечки вы говорите"?

VoDAТак вот если Spring использован грамотно и зависимости живут только в applicationContextЯ же вам привел пример - вот у нас есть Хибер. Ему нужна либа для создания проксей, например javassist. Еще ему нужен, например, slf4j. Скажите - вы будете в контексте прописывать какие-либо классы из этих либов?
Я вам намекну еще раз - зависимостями управляет Maven. Если вы где-то используете джарник, которому нужно еще 10 джарников для работы, то вы хоть прописывайте их в контексте (вот только зачем? ), хоть нет - они будут загружены.
Для понимания этих вещей - я вам рекомендую создать Maven проект, запихать туда какие-нибудь известные либы/фреймворки, и посмотреть, что реально от чего зависит.
Утверждение, что Spring оказывает хоть какое-то влияние на зугрзку классов - абсурд.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573468
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomТо есть вы убеждены, что в приложении все работает через Spring, используя DI? И все сторонние либы тоже его используют?
Причем тут EJB я вообще не понял - про него речи не было.Я убежден, что все кто сознательно выбирает Спринг работают через IoC - это его база.

EJB для аналогии - попытка создания spring beans через new по сути такой же бред, как и попытка создать EJB компонент через new . И тот и другой компонетнты управляются контейнерами, потому получить их можно только из контекста. EJB запросив у сервера, а spring bean у Spring.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573473
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomVoDAСпринг это конструктор. Под него можно подложить EhCache или Terracotta.То есть, я немного перефразирую: Spring не может поднять кластер, но у него есть классы-хелперы, которые позволяют быстро интегрироваться с уже существующим кластером.еще перефразируя - Spring помогает создать кластер любой конфигурации. Для упрощения этого процесса в нем заготовлены классы-хэлперы.

Конфигурация кластера JavaEE приложений довольно жестко прошита в сервере.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573487
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomНичего подобного. Контейнер - это инфраструктура, Spring/EJB - это реализация DI. Поэтому выбор идет так:
1) Определяемся с контейнером
2) Определяемся с реализацией DI - Spring или EJB.
Я повторюсь - большинство проектов, которые я видел крутящимися на сфере, имели в качетсве DI Spring, так как он в большом количестве случаев оказывается гибче и понятнее, чем EJB.У нас разные подходы.

Начнем с того, что Spring это контейнер как минимум для spring beans, и для всей остальной инфраструктуры, которая запущена в рамках applicationContext.

Потому выбор может быть и такой:
1) Определяемся с контейнером (опа- совпабо )
2) Определяемся с реализацией JavaEE сервера если выбран JavaEE или реализацией web-container если в качестве основного контейнера выбран Spring
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573496
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, VoDA!

> Начнем с того, что Spring это контейнер как минимум для spring beans, и
> для всей остальной инфраструктуры, которая запущена в рамках
> applicationContext.

Вот, кстати, плюс Spring- он может применяться на клиенте.
А то вот пишем JavaEE-приложение, и управление зависимостями на клиенте-
тот ещё секс- прям хоть Spring к клиенту прикручивай.

--
Алексей
JID: alxt@ya.ru
Posted
via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573500
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomПроблема в том, что "Spring vs JavaEE stack" не имеет ровным счетом никакого смысла. Сравнивать можно "Spring vs EJB".с EJB можно сравнивать только самую малую часть - Spring IoC.

а с чем вы будете сравнивать Spring WebServices? а Spring Timers? а Spring MVC?

тут явно не обойтись одними EJB.

svenomVoDAМожно уточнить какие задачи решает EJB и НЕ РЕШАЕТ spriong beans?Я где-то дал повод задать мне такой вопрос? мне интересно - может я чего не знаю )))
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573501
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDAДело в том, что Spring это очень умный клей. Он заранее знает что для работы Hibernate требуется одна из либ подходящих для манипуляции байт-кодом. Так вот если ни одной либы не указано явно, то Spring использует default который для Hibernate выставлен в javassist.Очередной абсурд. Допустим, что у нас все настройки Hiber'a по умолчанию. Вопросы вам:
1) Если я инстанцирую SessionFactory не через Spring, а руками через new, то хибернейт сможет понять, какую библиотеку использовать?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573510
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomОкей, тут возразить нечего. Так как нам в итоге быт ьс вашим утверждением, что JPA не запустится из war без спринга?оно было излишне гротескным - запустится запустится, но настолько неудобно, что лучше бы этого не было ;)

svenomVoDAмы помним, что это пункт про EJB 3.0 и что после появления вкусняшечек в Spring появлися EJB Lite в 3.1Про какие именно "вкусняшечки вы говорите"?возможность положить EJB и WAR и задеплоить на JavaEE сервер чтобы он это понял

svenomVoDAТак вот если Spring использован грамотно и зависимости живут только в applicationContextЯ же вам привел пример - вот у нас есть Хибер. Ему нужна либа для создания проксей, например javassist. Еще ему нужен, например, slf4j. Скажите - вы будете в контексте прописывать какие-либо классы из этих либов? Hibernate - конечно пропишу. Логгеры несколько иные по природе, потому их инстанциируют напрямую без привязки к контейнеру.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573521
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomОчередной абсурд. Допустим, что у нас все настройки Hiber'a по умолчанию. Вопросы вам:
1) Если я инстанцирую SessionFactory не через Spring, а руками через new, то хибернейт сможет понять, какую библиотеку использовать?Предположу, что да.

И?

Основной посыл в том, что в условиях если hibernate.jar и javassist.jar лежат в WAR-нике, но в приложении не используются то они не будут загружены.

При этом даже если приложение не использует JMS от сервера. Совсем не использует. Даже в этом случае подсистема JMS все равно будет загружена.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573526
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDAЯ убежден, что все кто сознательно выбирает Спринг работают через IoC - это его база.Ну да. EJB тоже IoC. Вы это к чему говорите?

VoDAEJB для аналогии - попытка создания spring beans через new по сути такой же бред, как и попытка создать EJB компонент через new. И тот и другой компонетнты управляются контейнерами, потому получить их можно только из контекста. EJB запросив у сервера, а spring bean у Spring.Где и кто говорил про создание EJB через new?

VoDAеще перефразируя - Spring помогает создать кластер любой конфигурации. Для упрощения этого процесса в нем заготовлены классы-хэлперы.
Конфигурация кластера JavaEE приложений довольно жестко прошита в сервере.Очередная глупость. Вы мне только что привели пример - Terracota. Мы говорим не про кластеры на основе самих апп серверов, а про сторонние кластеры. Вопрос вам - если я могу настроить Терракоту через Spring, что мне помешает сделать это без него? Да, будет геморенее, тут спору нет.
То есть вы путаете кластеры на основе апп серверов - которые мы создаем через конфигурацию инстансов этих серверов, и 3rd-party кластеры, которые к апп серверу вообще никакого отношения не имеют.

VoDA2) Определяемся с реализацией JavaEE сервера если выбран JavaEE или реализацией web-container если в качестве основного контейнера выбран SpringSpring это не контейнер в понятиях Java контейнеров. Spring это реализация DI. Вы никак не можете это понять.

VoDAа с чем вы будете сравнивать Spring WebServices? а Spring Timers? а Spring MVC?
тут явно не обойтись одними EJB.Эмм, а зчем мне их с чем-то сравнивать? Это не основа спринга, а лишь вспомогательные классы. А Spring MVC и вовсе преследует иные цели, чем DI - это реализация паттерна MVC.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573547
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDAоно было излишне гротескным - запустится запустится, но настолько неудобно, что лучше бы этого не было ;)Все неудобство из-за отсутствия DI. Достаточно большая часть современных приложений использует DI, это абсолютно естественно, ибо удобно.

VoDAHibernate - конечно пропишу. Логгеры несколько иные по природе, потому их инстанциируют напрямую без привязки к контейнеру.То есть вы отказыаетесь от вашего утверждения, что именно Spring определяет, какие классы/либы грузить, а какие нет?

VoDAОсновной посыл в том, что в условиях если hibernate.jar и javassist.jar лежат в WAR-нике, но в приложении не используются то они не будут загружены.Ок, все верно. Их не загрузит ни Spring, ни Tomcat, ни WebSphere.

VoDAПри этом даже если приложение не использует JMS от сервера. Совсем не использует. Даже в этом случае подсистема JMS все равно будет загружена.И? Какое следствие? Да, JMS скорее всего будет загружен где-то в верхних класслоадерах WebSphere, так как это часть инфраструктуры.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573636
justforsqlru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый svenom как в ejb 2.1 реализуется DI ?

Приведите плиз пример.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573669
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justforsqlruУважаемый svenom как в ejb 2.1 реализуется DI ?
Приведите плиз пример.В EJB2.1 использутеся подход Service Locator, а не Dependency Injection.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573747
justforsqlru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomjustforsqlruУважаемый svenom как в ejb 2.1 реализуется DI ?
Приведите плиз пример.В EJB2.1 использутеся подход Service Locator, а не Dependency Injection.

Можете пояснить как ?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37573756
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justforsqlruМожете пояснить как ?1) Открыть гугл, вбить туда "Inversion of Control Service Locator", вкурить
2) Открыть гугл, вбить туда "EJB 2.1 example", вкурить, найти пример использования паттерна Service Locator.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37574251
justforsqlru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomjustforsqlruМожете пояснить как ?1) Открыть гугл, вбить туда "Inversion of Control Service Locator", вкурить
2) Открыть гугл, вбить туда "EJB 2.1 example", вкурить, найти пример использования паттерна Service Locator.

Покурил посмотрел инициализацию полей через Service Location (банальная фактори).
Но где подобное в EJB 2.1 расскажите пожалуйста уважаемый svenom ...
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37574265
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
InitalContext ic = new InitialContext();
SomeEJBBean bean = ic.lookup("java:comp/env/ejb/someEJBBean");


Вторая строка это классический сервис локатор.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37574268
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justforsqlruПокурил посмотрел инициализацию полей через Service Location ( банальная фактори )Типичное заблуждение. Factory это creational pattern, он создает объекты. Service Locator в общем случае возвращает объект из некоего контекста. Он его не создает, и это не creational pattern.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37574298
justforsqlru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenom
Код: java
1.
2.
InitalContext ic = new InitialContext();
SomeEJBBean bean = ic.lookup("java:comp/env/ejb/someEJBBean");


Вторая строка это классический сервис локатор.

:) а в 3-м ejb нет jndi ?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37574334
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justforsqlruа в 3-м ejb нет jndi ?Разве я где-то это сказал?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37574380
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomНу да. EJB тоже IoC. Вы это к чему говорите?к вот этому смешному коду применения IoC - код будет забавен что на Spring что на EJB.
Код: java
1.
2.
3.
4.
5.
6.
public class A {
    public void callB() {
        Class B = new ClassB();
        b.call();
    }
}



svenomГде и кто говорил про создание EJB через new? вы показали попытку создать spring bean через new. я провел доступную аналогию.

svenomОчередная глупость. Вы мне только что привели пример - Terracota. Мы говорим не про кластеры на основе самих апп серверов, а про сторонние кластеры. Вопрос вам - если я могу настроить Терракоту через Spring, что мне помешает сделать это без него? Да, будет геморенее, тут спору нет.
То есть вы путаете кластеры на основе апп серверов - которые мы создаем через конфигурацию инстансов этих серверов, и 3rd-party кластеры, которые к апп серверу вообще никакого отношения не имеют.а вы не задумывались, что сами АппСервера это 3rd-party для вашей компании?

мне без разницы от какой 3rd-party будет логотип на том наборе компонент из которых я строю систему. я оцениваю - затраты времени, затраты на лицензии и результат в виде как самого продукта, так и архитектурных возможностей.

кластера на JavaEE строятся быстрее, но не такие гибкие.

кластера через terracotta (к примеру)подобные реализации возможно будут строиться дольше, но обладать более гибкими политиками репликации, а значит возможность масштабироваться у них выше.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37574385
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomVoDAHibernate - конечно пропишу. Логгеры несколько иные по природе, потому их инстанциируют напрямую без привязки к контейнеру.То есть вы отказыаетесь от вашего утверждения, что именно Spring определяет, какие классы/либы грузить, а какие нет?вы будете к словам цепляться или общую мысль выделять?

в подавляющем большинстве случаем именно Spring IoC определяет какие именно функции из ареала Spring * запускать. Сами же подсистемы Spring * уже поднимают и конфигурируют внешние подсистемы. Таким образом если приложению нужен Spring JMS реализованные через внешнюю зависимость, то Spring JMS и внешняя зависимость будут загружены. Если же приложению Spring JMS и внешняя зависимость не нужны, при учете того, что Spring используется адекватно(*), то ни сама прослойка Spring JMS ни внешняя зависимость не будут загружены.

(*) адекватно в этом вопросе означает что используются механизмы предложенные Spring IoC, напрямую же через new объекты не создаются.

Для сравнения - даже если JavaEE приложению не нужна подсистема JMS она будет запущена вне зависимости от настроек приложения.

svenomVoDAПри этом даже если приложение не использует JMS от сервера. Совсем не использует. Даже в этом случае подсистема JMS все равно будет загружена.И? Какое следствие? Да, JMS скорее всего будет загружен где-то в верхних класслоадерах WebSphere, так как это часть инфраструктуры.Аве!!! наконец то дошли

И? - дополнительные затраты ресурсов. в том числе времени загрузки. время загрузки важно для разработчиков, т.к. не всегда интересно ждать по 5-10 минут на загрузку АппСервера там, где Tomcat взлетает за минуту.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37574386
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomVoDA2) Определяемся с реализацией JavaEE сервера если выбран JavaEE или реализацией web-container если в качестве основного контейнера выбран SpringSpring это не контейнер в понятиях Java контейнеров. Spring это реализация DI. Вы никак не можете это понять.м... ок. ваше мнение Spring не контейнер.

Инженеры Interface21 (еще до смены имени на SpringSources) называли и продолжают именовать Spring именно контейнером. По крайней мере Spring IoC container. Я придерживаюсь официальной политики.

svenomVoDAа с чем вы будете сравнивать Spring WebServices? а Spring Timers? а Spring MVC?
тут явно не обойтись одними EJB.Эмм, а зчем мне их с чем-то сравнивать? Это не основа спринга, а лишь вспомогательные классы. А Spring MVC и вовсе преследует иные цели, чем DI - это реализация паттерна MVC.э... так вы спрингом называете IoC?

под названием Spring я подразумевал (и считал, что меня понимают) всю совокупность проектов реализованных в рамках Spring Framework.

IoC лишь малая часть. И да если рассматривать только IoC половина предыдущих высказываний кажется бредовыми. Давайте договоримся, что под названием Spring рассматриваем весь зонтик Spring * технологий, а IoC будем именовать Spring IoC. Помня, что Spring IoC без остальных технологий Spring * - это бесполезная часть.

----

- Just Do IT! (c)
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37574392
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Итог дискуссии - идеи разделились на две группы: которые просто просмотрели и по которым вышел спор.

Без спора прошли следующие идеи:
CDI хотя, возможно, CDI больше наследник Guice, чем Spring
возможность конфигурировать сервлет через аннотацию, не прописывая в web.xml

появление стандартного механизма JAAS-авторизации из кода приложения. Раньше приходилось городить вендор-специфичные реалмы для каждого производителя и адский гов** код для проброса аутентификационных данных в реалм и получения ответа от него.

Спорные мысли, которые я слегка перефразировал, чтобы уменьшить спорность момента:

появление профилей как реакция на то, что Спринг может подниматься только с требуемым набором технологий ( ибо не требуемые технологии не вносятся ни в maven ни в applicationContext ), а JavaEE всегда запускал все-что-только-можно, даже если большая часть технологий не применяется.

возможность удобно использовать JPA внутри WAR, включая декларативное использование транзакций и иные бонусы предлагаемые EJB lite .

мое мнение что инженеры Sun и других компаний, которые эти технологии перенесли в JavaEE, подсматривали на реализацию от Spring. ибо слишком уж много совпадений
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37574426
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собсно не совсем понимаю смысл использования IoC. Описываем класс. Потом в xml файле описываем бин ссылающийся на наш класс. В контейнере создается экземпляр. Далее получаем контекст ApplicationContext context = new ClassPathXmlApplicationContext(... Далее из конекста получаем наш экземпляр context.getBean(...
Аналогично можно было бы напрямую создать экземпляр класса через new.
Я продвинулся в понимании дальше, чем вы, но тоже не смог найти в Spring полезной функциональности.
Сам принцип DI я, как мне кажется, понял. Попробую объяснить его на следующем примере. Допустим, нам надо написать функцию, которая проводит какие-либо вычисления и присылает результаты на почту. Простая реализация будет выглядеть так:
Код: java
1.
2.
3.
4.
void doStuff(argument1, argument2, String emailAddress){
//..считаем results
отправитьEmail(results, emailAddress);
}


Теперь, если нам иногда надо отправлять результаты на email, а иногда печатать на принтере, то придется обобщать:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
interface ResultReporter{
	void reportResult(Result arg);
}

class EmailResultReporter implements ResultReporter{
	String emailAddress; 

	public EmailResultReporter(String emailAddress) {
		this.emailAddress = emailAddress;
	}

	public void reportResult(Result result) {
		отправитьEmail(result, emailAddress);
	}
}

class PrinterResultReporter implements ResultReporter{
	public void reportResult(Result result) {
		отправитьНаПринтер(result);
	}
}

void doStuff(argument1, argument2, ResultReporter reporter){
	//..считаем results
	reporter.reportResult(results);
}


Второй вариант написан в DI стиле, первый в обычном. Второй сложнее, но более гибкий. DI делает код более слабо связанным, и его легче тестировать - например первую реализацию функции doStuff невозможно протестировать, а вторую можно - надо передать ей mock, реализующий интерфейс ResultReporter. Наверное, DI это полезный подход, хотя, как мне кажется, в Java мире им злоупотребляют.
Если мы написали какое-то количество классов в стиле DI, то чтобы получить работающую программу, необходимо
1)Создать экземпляры всех классов.
2)Связать их друг с другом, примерно так же, как doStuff связывается с ResultReporter.
Штука, которая это делает, называется IoC контейнером.
Дальше встает вопрос, нужна ли какая-то специальная библиотека, которая служила бы IoC контейнером?
Мое мнение, что нет.
Самодельный контейнер выглядит примерно так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
class MyAppApplicationScope{
	public final Component1Class component1;
	public final Component2Class component2;
	public final Component3Class component3;
	public MyAppApplicationScope(){
		//init components 1,2,3
	}
}

class MyAppSessionScope{
	public final Component4Class component4;
	public final Component5Class component5;
	public final Component6Class component6;
	public MyAppSessionScope(MyAppApplicationScope appScope){
		//init components 4,5,6
	}
}

class MyAppRequestScope{
	//....
	public MyAppRequestScope(MyAppApplicationScope appScope, MyAppSessionScope sessionScope){
		//init request-scoped components
	}
}


На мой взгляд, преимущества такого подхода по сравнению со спринг xml-конфигурацией очевидны:
1)Соответствие типов проверяется java-компилятором.
2)При создании классов у нас есть целиком язык Java, а не ограниченный xml-язык спринг конфигураций.
3)Не надо тянуть большие дополнительные библиотеки.
В Spring есть Spring AOP, с помощью которого можно разом запроксировать много объектов. Но я не знаю, как это можно было бы применить. В документации говорится, что Spring AOP используется в первую очередь для транзакций, но мне это кажется надуманным - все можно сделать проще.
Вообще Spring у меня оставил такое впечатление: там нет настоящих технологий, только обертки над существующими API.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37574529
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDAк вот этому смешному коду применения IoC - код будет забавен что на Spring что на EJB.То есть вы не смогли осознать, что в приложении не все происходит через DI, особенно в сторонних библиотеках? Мой пример был призван продемонстрировать именно это.

VoDAвы показали попытку создать spring bean через new. я провел доступную аналогию.Ничего подобного. Если вы внимательно и вдумчиво посмотрите на мой пример - 11757590 , то вы увидите что у меня есть два класса и только один бин, и никакие спринговые бины через new я не создавал.

VoDAкластера на JavaEE строятся быстрее, но не такие гибкие.
кластера через terracotta (к примеру)подобные реализации возможно будут строиться дольше, но обладать более гибкими политиками репликации, а значит возможность масштабироваться у них выше.0_о Тааак, вижу тотальное непонимание того, что подразумевается под термином "кластер" и какие типы кластеров бывают. Вы опять сравниваете несравнимое.
То, что вы называете "кластера на JavaEE" (я так понимаю, что это кластера из AppServer'ов) решают широкий спектр задач - от распределения нагрузки на веб-сервер, до кэширования сесссий. Кластера Terracota решают ограниченный спектр задач, как-то кеширование веб-сессий и хранения большого объема данных где-то вне AppServer'а.
Если у вас стоит сервер приложений и на него вдруг навалилось 100500 миллионов пользователей, то никакая терракота вас не спасет, поможет только кластер на уровне web-сервера с лоад-балансером.
Более того, некоторые фичи терракоты, например WebSessions, вообще не имеют смысла без вышележащего кластера на основе AppServer/WebServer, ибо какой смысл кешировать сессию, если у нее только один "потребитель"?
То есть вы опять сравниваете несравнимые вещи.
И вот вопрос еще - а в чем проявляется "негибкость политик репликации" у кластеров на основе AppServer'ов?

VoDAв подавляющем большинстве случаем именно Spring IoC определяет какие именно функции из ареала Spring * запускать. Сами же подсистемы Spring * уже поднимают и конфигурируют внешние подсистемы. Таким образом если приложению нужен Spring JMS реализованные через внешнюю зависимость, то Spring JMS и внешняя зависимость будут загружены. Если же приложению Spring JMS и внешняя зависимость не нужны, при учете того, что Spring используется адекватно(*), то ни сама прослойка Spring JMS ни внешняя зависимость не будут загружены.Это звучит уже более вменяемо, значит не зря я тут время трачу Хотя глупости все еще присутствуют, например фраза:
авторпри учете того, что Spring используется адекватно(*), то ни сама прослойка Spring JMS ни внешняя зависимость не будут загружены...лишена смысла, ибо если приложению не нужен JMS, то он не будет загружен (приложением) хоть там есть спринг, хоть нет.
Я просто вам напомню ваши слова (только вот почему вы называете это "придиркой", я не понимаю - скажи вы такое на собеседовании, вам бы в лицо рассмеялись).
11753879 :
VoDAСпринг заметно быстрее поднимает приложение просто потому, что грузит ровно то, что требуется и не более.Не спринг определяет что грузить, а что нет, а разработчик.
11757407 :
VoDAjar ники конечно maven закидывает. только если конфигурация компонента не прописана в applicationContext, то и компонент не грузится самим Спрингом - к нему просто нет обращений.Спринг не грузит никакие компоненты, компоненты загружаются класслоадерами. Что грузить, а что нет, определяется внутренними зависимостями приложения, а не контекстом.
авторСпринг (из applicationContext) вытаскивает знания что нужно грузить.Ну тут без комментариев - бред сивой кобылы.

VoDAм... ок. ваше мнение Spring не контейнер.
Инженеры Interface21 (еще до смены имени на SpringSources) называли и продолжают именовать Spring именно контейнером. По крайней мере Spring IoC container. Я придерживаюсь официальной политики.Вот ваша фраза:
VoDA2) Определяемся с реализацией JavaEE сервера если выбран JavaEE или реализацией web-container если в качестве основного контейнера выбран SpringВы можете мне пояснить, что значит выражение "основной контейнер"? Какие еще "основные контейнеры" вы знаете?

VoDAПомня, что Spring IoC без остальных технологий Spring * - это бесполезная часть.Очень смело. На самом деле Spring IoC это основная и самая главная часть. Использовать или нет все остальное - зависит от требований. Spring MVC это веб-фреймворк, он к разговору вообще отношения не имеет. У меня может быть весь каркас приложения собран на основе Спринга, а веб реализован на чем-то отличном от SpringMVC, нисколько не уменьшит ценность Spring IoC. Далее, Spring WebService - имеет крайне узкую область применимости. Во-первых, он поддерживает только bottom-up подход, во-вторых его использование на серверах приложений, которые уже имеют свою реализацию движка веб-сервисов, лишено смысла. Но на Томкате пойдет на ура, факт. Далее, Spring Timers - ну я вообще не понимаю, зачем вы его привели. А если у меня нет в приложении никаких таймеров, что Spring IoC становится бесполезным?
Вывод: Spring IoC это самая важная и самая главная часть из всего Spring'a. Все остальное имеет гораздо более узкую область применения, а потому второстепенно.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37574541
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪВторой вариант написан в DI стиле, первый в обычном. Второй сложнее, но более гибкий. DI делает код более слабо связанным, и его легче тестировать - например первую реализацию функции doStuff невозможно протестировать, а вторую можно - надо передать ей mock, реализующий интерфейс ResultReporter. Наверное, DI это полезный подход, хотя, как мне кажется, в Java мире им злоупотребляют.Абсолютно неверно. В вашем примере есть такие понятия, как интерфейс и реализации, но нет DI в принципе.

Йуный джавистЪЕсли мы написали какое-то количество классов в стиле DIКласс не может быть написан "в стиле DI". DI всегда вынесен за пределы класс, а потому в самом классе не виден. Смотря на класс вы никак не можете знать, используется ли реально DI или нет.

Йуный джавистЪто чтобы получить работающую программу, необходимо
1)Создать экземпляры всех классов.
2)Связать их друг с другом, примерно так же, как doStuff связывается с ResultReporter.
Штука, которая это делает, называется IoC контейнером.Первое неверно, второе близко к истине.

Йуный джавистЪДальше встает вопрос, нужна ли какая-то специальная библиотека, которая служила бы IoC контейнером?
Мое мнение, что нет.
Самодельный контейнер выглядит примерно так:То, что вы написали назвать контейнером можно с огромной натяжкой.
Йуный джавистЪ1)Соответствие типов проверяется java-компилятором.И? В чем преимущество то заключается?
Йуный джавистЪ2)При создании классов у нас есть целиком язык Java, а не ограниченный xml-язык спринг конфигураций.В конфигурации спринга мы определяем только зависимотси, то есть что куда вставить. Мы никак не ограничены по части Java-кода.
Йуный джавистЪ3)Не надо тянуть большие дополнительные библиотеки.В чем заключается проблем подтянуть несколько мегабайт библиотек? Мы же не в 80-е годы живем.

Йуный джавистЪВ Spring есть Spring AOP, с помощью которого можно разом запроксировать много объектов. Но я не знаю, как это можно было бы применитьТранзакции, безопасность, логирование. Почитайте про AOP в целом, поймете.

Йуный джавистЪВ документации говорится, что Spring AOP используется в первую очередь для транзакций, но мне это кажется надуманным - все можно сделать проще.Что такое декларативное управление транзакциями знаете? Можете предлолжить что-то "проще"?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37575265
Pavel Kurakin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С интересом почитал дискуссию. Даже не дискуссию, а битву :)

Из прочтенного у меня появился вопрос к svenom:
svenomVoDA2) Определяемся с реализацией JavaEE сервера если выбран JavaEE или реализацией web-container если в качестве основного контейнера выбран Spring
Spring это не контейнер в понятиях Java контейнеров. Spring это реализация DI. Вы никак не можете это понять.

Мне не понятна выделенная фраза, Вы знаете какое то тайное понятие Java контейнеров не иначе. Вы абсолютно правы в том что Spring это не контейнер в понятиях Java контейнеров, но само упоминание именно понятия контейнера в Java не понимаю зачем здесь.

З.Ы. Победил VoDA
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37575298
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomSpring это не контейнер в понятиях Java контейнеров. Spring это реализация DI.
спринг - это контейнер.
как и авалон и пикоконтейнер, которые померли уже, наверное. и че там ещё было.

ты же сам пишешь:
svenomКонтейнер - это инфраструктура, Spring/EJB - это реализация DI
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37575302
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати вот интересная статейка - http://zeroturnaround.com/java-ee-productivity-report-2011/ (единственное, меня немного напрягло, что там Hibernate засунут в категорию веб-фреймворков).
Касательно популярности Tomcat/неTomcat полностью коррелирует с моей таблицей, сделанной по сайту hh.ru.

Pavel KurakinМне не понятна выделенная фраза, Вы знаете какое то тайное понятие Java контейнеров не иначе. Вы абсолютно правы в том что Spring это не контейнер в понятиях Java контейнеров, но само упоминание именно понятия контейнера в Java не понимаю зачем здесь.Ну да, фраза некорректная. Я здесь имел ввиду то, что есть контейнеры "инфраструктурные" - Tomcat (контейнер сервлетов), EJB-контейнер в AppServer'ах и т.д.. Spring же - это просто одна из реализаций DI, выполненная в виде контейнера объектов, она работает на другом уровне - уровне приложения. К чему я все это писал? Пока не знаю, надо дождаться комментариев по фразе:
VoDA2) Определяемся с реализацией JavaEE сервера если выбран JavaEE или реализацией web-container если в качестве основного контейнера выбран Spring
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37575314
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomнадо дождаться комментариев по фразе:
VoDA2) Определяемся с реализацией JavaEE сервера если выбран JavaEE или реализацией web-container если в качестве основного контейнера выбран Spring
что тут дожидаться-то. можно прекрасно жить и без web, например, если приложение - десктопное, в котором спринг используется как контейнер. чотакогото.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37575327
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grasoff.netsvenomSpring это не контейнер в понятиях Java контейнеров. Spring это реализация DI.
спринг - это контейнер.
как и авалон и пикоконтейнер, которые померли уже, наверное. и че там ещё было.

ты же сам пишешь:
svenomКонтейнер - это инфраструктура, Spring/EJB - это реализация DIили вот
http://hivemind.apache.org/

HiveMind is an services and configuration microkernel. Its features are also referred to as Inversion of Control (IoC) Container or Lightweight Container.

тоже контейнером назвали
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37575348
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomVoDAк вот этому смешному коду применения IoC - код будет забавен что на Spring что на EJB.То есть вы не смогли осознать, что в приложении не все происходит через DI, особенно в сторонних библиотеках? Мой пример был призван продемонстрировать именно это.поразите меня - вы в своих JavaEE приложениях EJB связываете без применения EJB DI?

svenomVoDAвы показали попытку создать spring bean через new. я провел доступную аналогию.Ничего подобного. Если вы внимательно и вдумчиво посмотрите на мой пример - 11757590 , то вы увидите что у меня есть два класса и только один бин, и никакие спринговые бины через new я не создавал.ок, тогда пример не имеет смысла в данном контексте. я рассказывал про spring beans и работу согласно спеке Спринга.

svenomТааак, вижу тотальное непонимание того, что подразумевается под термином "кластер" и какие типы кластеров бывают. Вы опять сравниваете несравнимое.
То, что вы называете "кластера на JavaEE" (я так понимаю, что это кластера из AppServer'ов) решают широкий спектр задач - от распределения нагрузки на веб-сервер, до кэширования сесссий. Кластера Terracota решают ограниченный спектр задач, как-то кеширование веб-сессий и хранения большого объема данных где-то вне AppServer'а.terracotta это инфраструктура через которую можно кэшировать как веб-сессии, так и любые другие сессионные или не сессионные данные.

svenomЕсли у вас стоит сервер приложений и на него вдруг навалилось 100500 миллионов пользователей, то никакая терракота вас не спасет, поможет только кластер на уровне web-сервера с лоад-балансером.а вы считаете, что web-server с лоад-балансером эта фича которую только AppServer-а умеют делать? такое даже на PHP можно реализовать без привлечения какой либо java

svenomТо есть вы опять сравниваете несравнимые вещи.
И вот вопрос еще - а в чем проявляется "негибкость политик репликации" у кластеров на основе AppServer'ов?Тот же JBoss, который полноценный JavaEE compatible server, довольно интересно реплицирует web-sessions. Репликация идет все-со-всеми. Как результат при интенсивной работе не рекомендуется больше 4-х нод. Выше падает производительность из-за высоких затрат на репликацию между нодами кластера. В качестве рекомендаций были либо использовать специальный "плагин" который реализует репликацию внутри группы, и сразу предупреждение о слабой протестированности оного. Либо предложение деления всего кластера на независимые группы и управление балансировщиком, чтобы пользователя всегда направляло на определенную группу (пока жива сессия).

Первое - совсем странно для продакшена, второе проще сделать самостоятельно ;)
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37575352
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomVoDAПомня, что Spring IoC без остальных технологий Spring * - это бесполезная часть.Очень смело.
...
Вывод: Spring IoC это самая важная и самая главная часть из всего Spring'a. Все остальное имеет гораздо более узкую область применения, а потому второстепенно.Я технологии рассматриваю с точки зрения "что мне это дает".

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

Мне нужны декларативные транзакции - потому я применяю Spring обертку поверх JTA и мне приходится воспользоваться IoC.

Мне нужно закрыть страницы от несанкционированного доступа - я применяю Spring Security и, как следствие, пользуюсь IoC.

Для реализации требований ТЗ мне нужно чтобы перед вызовом определенных методов вызывались некие другие. Я реализую требование через интерсепторы. Для того, чтобы интерсепторы работали я опять же вынужден использовать IoC.

Потому для меня требования заказчика - точка отсчета. Способ реализации - основное действие, а применение IoC просто особенность реализации. Именно поэтому я считаю Spring IoC второстепенным, а основным, для чего нужен IoC, системы типа Spring Security.

svenomЯ просто вам напомню ваши слова (только вот почему вы называете это "придиркой", я не понимаю - скажи вы такое на собеседовании, вам бы в лицо рассмеялись).думаю, что при личной встрече мы бы намного быстрее пришли к единой терминологии и раньше сошлись на общем понимании. Есть доска, есть бумага - можно написать и объяснить =) личное общение в формате face-to-face очень важно для программистов.

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

Мир, труд, жвачка?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37575364
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pavel KurakinЗ.Ы. Победил VoDAСпасибо =)

Хотя моя задача была поделиться своими знаниями и пониманием, что в разных ситуациях выгодными могут быть различные подходы. Когда полноценный AppServer в лице WebSphere или JBoss, а когда солянка сборная решение индивидуальное в виде Spring*, работающем поверх web-container или вообще отдельным приложением ;)
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37575367
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDAдумаю, что при личной встрече мы бы намного быстрее пришли к единой терминологии и раньше сошлись на общем понимании. Есть доска, есть бумага - можно написать и объяснить =) личное общение в формате face-to-face очень важно для программистов.

Мир, труд, жвачка? о. дак предлагаю сегодня на крестовском острове собраться в "карл и фридрих".
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37575377
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grasoff.netVoDAдумаю, что при личной встрече мы бы намного быстрее пришли к единой терминологии и раньше сошлись на общем понимании. Есть доска, есть бумага - можно написать и объяснить =) личное общение в формате face-to-face очень важно для программистов.

Мир, труд, жвачка? о. дак предлагаю сегодня на крестовском острове собраться в "карл и фридрих".я за, только по вечерам я учусь.

сейчас напишу тебе на email - дальше договоримся ;)

PS учусь пять вечеров в неделю плюс суббота до 16-30.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37575383
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDAпоразите меня - вы в своих JavaEE приложениях EJB связываете без применения EJB DI?Это вы на основании чего сделали такой вывод? Перечитайте то, что я написал:
svenomТо есть вы не смогли осознать, что в приложении не все происходит через DI, особенно в сторонних библиотеках ?Напомню, что это относится к вашим интересным утверждениям типа "Spring решает, что грузить, а что нет".

VoDAок, тогда пример не имеет смысла в данном контексте. я рассказывал про spring beans и работу согласно спеке Спринга.Пример преследует лишь одну цель - опровергунть ваши некорректные утверждения о том, что спринг как-то влияет на загрузку классов и библиотек.

VoDAterracotta это инфраструктура через которую можно кэшировать как веб-сессии, так и любые другие сессионные или не сессионные данные.Да.

VoDAа вы считаете, что web-server с лоад-балансером эта фича которую только AppServer-а умеют делать? такое даже на PHP можно реализовать без привлечения какой либо javaДа, можно. Вопрос вот в чем - какой смысл использовать Terracota WebSessions, если у нас только один web-сервер? Этот пример призван показать, что кластеризация на уровне серверов приложений решает задачи, отличные от тех, которые решает та же Terracota.

VoDAТот же JBoss, который полноценный JavaEE compatible server, довольно интересно реплицирует web-sessions. Репликация идет все-со-всеми. Как результат при интенсивной работе не рекомендуется больше 4-х нод. Выше падает производительность из-за высоких затрат на репликацию между нодами кластера. В качестве рекомендаций были либо использовать специальный "плагин" который реализует репликацию внутри группы, и сразу предупреждение о слабой протестированности оного. Либо предложение деления всего кластера на независимые группы и управление балансировщиком, чтобы пользователя всегда направляло на определенную группу (пока жива сессия).
Первое - совсем странно для продакшена, второе проще сделать самостоятельно ;)Ну ок, так вы тогда и говорите, что "JBoss имеет негибкие политики репликации", а не обобщайте это на все JavaEE сервера.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37575401
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 svenom , для завершения тема про минимизацию ресурсов.

Возможно я полностью не прав. Тогда вопрос - почему в стандарте JavaEE появились профили? какую задачу они реализуют?

Не для кого не секрет (надеюсь) что JSR пишутся после того, как определенный функционал уже реализован и показал свою эффективность. Стандарты всегда играют догоняющую роль - сначала реализация, потом стандарт. JPA рисовали посматривая на Hibernate, аннотации делали посмотрев на XDoclet и его необходимость и рабоче-способность для java приложений.

Вопрос с какой реализации рисовали JavaEE web profile?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37575450
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDA ,
Давайте спросим об этом соответствующий JSR :
JSRProfiles
The reach of the Java EE platform has become so broad that it has lost some of its original focus. To refocus the Java EE platform on particular classes of developers and applications, we propose the introduction of Java EE platform Profiles. Profiles will reference the Java EE platform, as defined by the JCP process, and may include a subset of Java EE platform technologies, additional JCP technologies not part of the base Java EE platform , or both. In addition to defining the base Java EE platform, this specification will define the rules for referencing Java EE platform technologies in Java EE Profiles.
This expert group will also define the first version of a Java EE Web Profile - a subset of the Java EE platform targeted at web application development. This profile will provide a more gentle introduction to the Java EE platform , providing only those technologies needed by most web application developers, without the enterprise technologies that sometimes confuse such developers .
Про ресурсы и производительность ни слова, что вполне логично. Дополнительные 50-100-200 метров памяти уже давно не вызывают каких-либо проблем.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37575458
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomНу ок, так вы тогда и говорите, что "JBoss имеет негибкие политики репликации", а не обобщайте это на все JavaEE сервера.JavaEE сервера в общем виде не обладают свойством "гибких политик репликации", т.к. как минимум несколько из них не обладают данным свойством

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

Но говоря в общем о JavaEE complaint говорить о обязательном наличии гибких политик нельзя. Говоря о JavaEE можно говорить о наборе свойств присущих всем JavaEE серверам, так что в общем случае это сводится к набору JSR.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37575490
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDAJavaEE сервера в общем виде не обладают свойством "гибких политик репликации", т.к. как минимум несколько из них не обладают данным свойством
1) Никаких JSR и иных спецификаций по кластеризации серверов приложений не существует. А следовательно "гибкость" зависит исключительно от вендора. Поэтому утверждение "AppServer'a не обладают достаточной гибкостью в кластеризации" не имеет вообще никакого смысла.
2) Пример "гибкой" кластеризации (опять таки - я не знаю ваших критериев) - WebSphere. Если вам будет не лень, пробегитесь по вот этому документу - http://www.redbooks.ibm.com/redbooks/pdfs/sg246688.pdf. Если лень - то прочитайте хотя бы главу 2.4.1. Это достаточно гибко?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37576510
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenom,
авторТранзакции, безопасность, логирование. Почитайте про AOP в целом, поймете.
Что такое декларативное управление транзакциями знаете? Можете предлолжить что-то "проще"?

1)Логирование.
На нужные классы навешиваются соответствующие аннотации, во время сборки на них натравливается AspectJ. Не вижу, где здесь можно использовать Spring.
2)декларативное управление транзакциями.
Пишем 2 функции:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
static withTransaction(Runnable r){
 // достаем коннекшн из пула
 // кладем его в ThreadLocal
 // начинаем транзакцию
 try{
     r.run();
 }catch/finally
     //Если вылетел Exception, откатываем транзакцию. Иначе комитим.
     //Очищаем ThreadLocal
 }
}



Код: java
1.
2.
3.
static Connection getConnection(){
  достаем коннекшн из ThreadLocal и возвращаем его
}



Код, который хочет залезть в базу, получает коннекшн через getConnection().
Транзакции заворачиваем в WithTransaction.
Я не вижу недостатков в таком способе.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37576536
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪ1)Логирование.
На нужные классы навешиваются соответствующие аннотации, во время сборки на них натравливается AspectJ. Не вижу, где здесь можно использовать Spring.Ну как бы спринг именно так и работает (вернее, это один из вариантов его работы).

Йуный джавистЪЯ не вижу недостатков в таком способе.Бывает. А я вот вижу в вашем подходе следующие недостатки:
1) Где параметры транзакции? Уровень изоляции, параметры присоединения/открытия (Requires, RequiredNew, Supported, Mandatory и т.д.)? Вы вообще про такие вещи слышали?
2) Как вложенные транзакции будут у вас работать?
3) Как мне быть, если я хочу откатывать транзакции только при определенных исключениях?
4) Runnable - громаднейший косяк. То есть вы заставляете код жестко подстравиться под вас - в классе может быть не более одного транзакционного метода. То есть пишу я значит сервис с 3-мя транзакционными методами, в Спринге мне для этого надо написать 1 класс, в вашем случае минимум 3. Ну круто, чо.
Теперь некоторое пояснение - декларативные транзакции на то и декларативные, что они вообще никак не проявляют себя в коде и не накладывают на него никаких ограничений. Spring нам такую возможность дает, ваш подход - заставляет разработчика подстраиваться под надуманное правило "implements Runnable", то есть ни о какой декларативности речи не идет в принципе.

Йуный джавистЪЯ не вижу недостатков в таком способе.Ок, не вопрос.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37576542
justforsqlru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenom1) Где параметры транзакции? Уровень изоляции, параметры присоединения/открытия (Requires, RequiredNew, Supported, Mandatory и

ЭЭЭЭ это есть в спринге ?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37576550
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justforsqlrusvenom1) Где параметры транзакции? Уровень изоляции, параметры присоединения/открытия (Requires, RequiredNew, Supported, Mandatory и

ЭЭЭЭ это есть в спринге ?тебе тоже ссылку на спринг референсе дать? :)
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37576555
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justforsqlruЭЭЭЭ это есть в спринге ?Ну как бы без этого в принципе нельзя говорить о транзакциях.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37576559
justforsqlru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grasoff.netjustforsqlruпропущено...


ЭЭЭЭ это есть в спринге ?тебе тоже ссылку на спринг референсе дать? :)


угу там где эти атрибуты указаны ну или их аналоги
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37576560
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪ ,
С вашего позволения позволю себе продолжить разнос _кода_без_недостатков_:
5) А как мне параметры передать в транзакционный метод? У нормальных людей это выглядит вот так:
Код: java
1.
service.method(param1, param2);


У вас же я должен сделать следующее:
Код: java
1.
2.
Service service = new Service(param1, param2);
withTransaction(service);

То есть на каждый вызов сервиса нужен новый одноразовый инстанс этого сервиса. Круто.

6) А как бы мне вернуть результат вызванного транзакйионного метода? У нормальных людей это выяглдит вот так:
Код: java
1.
Result result = service.method(param1, param2);

У вас это не выглядит никак, ибо это невозможно
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37576576
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При создании классов у нас есть целиком язык Java, а не ограниченный xml-язык спринг конфигураций.

В конфигурации спринга мы определяем только зависимотси, то есть что куда вставить. Мы никак не ограничены по части Java-кода.

В Java нормальные средства декомпозиции, а в Spring XML - кривые.
Чтобы разбить большой xml файл на части, надо использовать import. Если в двух файлах, подтягиваемых импортом, есть бины с одинаковыми именами, то спринг не сообщит об ошибке, а молча использует то описание бина, которое встретится последним. Счастличой отладки. В Java просто невозможна ситуация, когда, например, в классе определены 2 метода с одинаковыми именами, и используется только последний. Мы вносим изменения в первый, и не понимаем, почему эти изменения не действуют.
Если для описания конфигурации полноценный язык не нужен, то зачем тогда надо было делать Spring EL? Мне кажется, через пару лет разрешат вставлять в XML файлы куски кода на нормальных языках и конфигурировать бин с названием codeEvaluator, который наследует от AbstractCodeEvaluatorFactory, и у которого из коробки три реализации - JavaCodeEvaluatorFactory, JavaScriptCodeEvaluatorFactory и еще какой-нибудь GroovyCodeEvaluatorFactory.
В чем заключается проблем подтянуть несколько мегабайт библиотек? Мы же не в 80-е годы живем.

В нескольких мегабайтах библиотек содержатся тысячи багов и граблей (см пример выше).
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37576584
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenom,
авторУ вас же я должен сделать следующее:

Service service = new Service(param1, param2);
withTransaction(service);

То есть на каждый вызов сервиса нужен новый одноразовый инстанс этого сервиса. Круто.

В моем коде Runnable - точный аналог
TransactionCallback , а WithTemplate - упрощенный аналог TransactionTemplate . Разумеется, бины не должны имплементить Runnable, так же как они не должны имплементить TransactionCallback. Service вызывается так:

Код: sql
1.
2.
3.
4.
5.
6.
final Service service = ...;
withTransaction(new Runnable(){
  public void run(){
    service.businessMethod();
  }
});


Если мне не изменяет память, такая идиома называется template method.
Странно, что вы не поняли - в спринге сотни таких методов(JdbcTemplate в основном из них состоит).
На остальные вопросы отвечу завтра.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37576590
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, раз вы не уловили аналогии моего WithTransaction со спринговским TransactionTemplate, можно сделать вывод, что вы Spring сами не знаете. При этом позволяете себе хамить:
С вашего позволения позволю себе продолжить разнос _кода_без_недостатков_:
.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37576591
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪВ Java нормальные средства декомпозиции, а в Spring XML - кривые.Вам виднее

Йуный джавистЪЧтобы разбить большой xml файл на части, надо использовать import. Если в двух файлах, подтягиваемых импортом, есть бины с одинаковыми именами, то спринг не сообщит об ошибке, а молча использует то описание бина, которое встретится последним.Счастличой отладки. 1) Пишем xml-конфигурацию log4j
2) Пишем конфигурацию Hibernate
3) Пишем persistence.xml
4) Пишем определения сервлетов в web.xml
5) Пишем структуру приложения в application.xml
6) Пишем сборочный скрипт для Ant или Maven
Что объединяет все эти случаи? То, что на этапе компиляции мы не сможем отловить ошибки в xml-никах. Ай беда беда, это смахивает заговор прям
Рекомендации:
1) Боитесь описания контекста в XML - переходите на аннотации
2) http://en.wikipedia.org/wiki/Convention_over_configuration - это для общего развития, чтобы вы понимали откуда вообще к нам пришли эти дурацкие xml-ники, сулящие адский ад при дебаге.

Йуный джавистЪВ Java просто невозможна ситуация, когда, например, в классе определены 2 метода с одинаковыми именами, и используется только последний. Мы вносим изменения в первый, и не понимаем, почему эти изменения не действуют.Эммм, ну вы как бы в контексте спринга описываете только имена классов и зависимости. Методы в нем не описываются

Йуный джавистЪЕсли для описания конфигурации полноценный язык не нужен, то зачем тогда надо было делать Spring EL? Мне кажется, через пару лет разрешат вставлять в XML файлы куски кода на нормальных языках и конфигурировать бин с названием codeEvaluator, который наследует от AbstractCodeEvaluatorFactory, и у которого из коробки три реализации - JavaCodeEvaluatorFactory, JavaScriptCodeEvaluatorFactory и еще какой-нибудь GroovyCodeEvaluatorFactory.Все может быть

Йуный джавистЪВ нескольких мегабайтах библиотек содержатся тысячи багов и граблей (см пример выше).Голословщина.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37576592
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪ,
к сожалению, это издержки декларативности.
Вы больше конфигурируете и меньше программируете.
Вместо обработки транзакций по БЛ и вместе с БЛ, вы навешиваете мета-язык (аннотации\xml) над Java.
Другой подход.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37576598
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВ моем коде Runnable - точный аналог
TransactionCallback, а WithTemplate - упрощенный аналог TransactionTemplate. Разумеется, бины не должны имплементить Runnable, так же как они не должны имплементить TransactionCallback.Ок, ответ принимается, вопрос снимается.

авторКстати, раз вы не уловили аналогии моего WithTransaction со спринговским TransactionTemplate, можно сделать вывод, что вы Spring сами не знаете. При этом позволяете себе хамитьИнтересный вывод. Напоминаю вам, что речь идет про декларативные транзакции . Вот вам пример, как это выглядит в спринге (один из 2х вариантов).

1. Интерфейс:
Код: java
1.
2.
3.
4.
5.
public interface SomeInterface() {
    public Integer someMethod1();
    public void someMethod2(Object arg1, Long arg2);
    public SomeClass someMethod3(SomeOtherClass arg1) throws Exception;
}



2. Реализация:
Код: java
1.
2.
3.
public class SomeInterfcaeImpl implements Interface() {
    // любая имплементация без каких-либо ограничений, про транзакции нигде ни слова
}



3. Спринг:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
    <property name="transactionManager" ref="transactionManager" />
    <property name="transactionAttributes">
        <value>
            ru.sql.SomeInterface.someMethod1=PROPAGATION_REQUIRED
            ru.sql.SomeInterface.someMethod2=PROPAGATION_REQUIRES_NEW
            ru.sql.SomeInterface.someMethod3=MANDATORY
            ....
        </value>
    </property>
</bean>

<bean id="someInterface" class="org.springframework.aop.framework.ProxyFactoryBean">
    <property name="target">
        <bean class="ru.sql.impl.SomeInterfaceImpl" />
    </property>
    <property name="proxyInterfaces">
        <list>
            <value>ru.sql.SomeInterface</value>
        </list>
    </property>
    <property name="interceptorNames">
        <list>
            <value>transactionInterceptor</value>
        </list>
    </property>
</bean>



4. Вызов транзакционных методов:
Код: java
1.
2.
3.
SomeInterface instance = context.getBean("someInterface");
Integer result1 = instance.someMethod1();
instance.someMethod2(result1, 50L);



Ну что, вы начинаете понимать, что такое декларативные транзакции ? Вы все еще убеждены, что я не знаю Spring?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37577076
justforsqlru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomавторВ моем коде Runnable - точный аналог
TransactionCallback, а WithTemplate - упрощенный аналог TransactionTemplate. Разумеется, бины не должны имплементить Runnable, так же как они не должны имплементить TransactionCallback.Ок, ответ принимается, вопрос снимается.

авторКстати, раз вы не уловили аналогии моего WithTransaction со спринговским TransactionTemplate, можно сделать вывод, что вы Spring сами не знаете. При этом позволяете себе хамитьИнтересный вывод. Напоминаю вам, что речь идет про декларативные транзакции . Вот вам пример, как это выглядит в спринге (один из 2х вариантов).

1. Интерфейс:
Код: java
1.
2.
3.
4.
5.
public interface SomeInterface() {
    public Integer someMethod1();
    public void someMethod2(Object arg1, Long arg2);
    public SomeClass someMethod3(SomeOtherClass arg1) throws Exception;
}



2. Реализация:
Код: java
1.
2.
3.
public class SomeInterfcaeImpl implements Interface() {
    // любая имплементация без каких-либо ограничений, про транзакции нигде ни слова
}



3. Спринг:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
    <property name="transactionManager" ref="transactionManager" />
    <property name="transactionAttributes">
        <value>
            ru.sql.SomeInterface.someMethod1=PROPAGATION_REQUIRED
            ru.sql.SomeInterface.someMethod2=PROPAGATION_REQUIRES_NEW
            ru.sql.SomeInterface.someMethod3=MANDATORY
            ....
        </value>
    </property>
</bean>

<bean id="someInterface" class="org.springframework.aop.framework.ProxyFactoryBean">
    <property name="target">
        <bean class="ru.sql.impl.SomeInterfaceImpl" />
    </property>
    <property name="proxyInterfaces">
        <list>
            <value>ru.sql.SomeInterface</value>
        </list>
    </property>
    <property name="interceptorNames">
        <list>
            <value>transactionInterceptor</value>
        </list>
    </property>
</bean>



4. Вызов транзакционных методов:
Код: java
1.
2.
3.
SomeInterface instance = context.getBean("someInterface");
Integer result1 = instance.someMethod1();
instance.someMethod2(result1, 50L);



Ну что, вы начинаете понимать, что такое декларативные транзакции ? Вы все еще убеждены, что я не знаю Spring?

О спасибо
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37577125
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justforsqlruугу там где эти атрибуты указаны ну или их аналоги http://static.springsource.org/spring/docs/2.5.x/reference/transaction.html

там чуть ниже середины картинки симпатишные (9.5.7)
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37577168
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grasoff.net http://static.springsource.org/spring/docs/2.5.x/reference/transaction.html Много раз натыкался на эту статью. все время распухала голова, уж очень там перегружено всяким низкоуровневым AOP-ом. В реальности, если наша цель только декларативные транзакции, то выбор обычно идет между либо связкой transactionManager/transactionInterceptor/proxy-бины (как в моем примере), либо аннотациями, прямой AOP нафиг не сдался.
Но эта статья очень хорошо раскрывает теоретические аспекты декларативных транзакций и преимуществ их применеия, а потому настоятельно рекомендуую ее к прочтению Йуный джавистЪ .
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37577173
am_sasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Йуный джавистЪ Если в двух файлах, подтягиваемых импортом, есть бины с одинаковыми именами, то спринг не сообщит об ошибке, а молча использует то описание бина, которое встретится последним. "меня терзают смутные сомнения" (с), что вы не разобрались со спрингом...
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37577199
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomgrasoff.net http://static.springsource.org/spring/docs/2.5.x/reference/transaction.html Много раз натыкался на эту статью. все время распухала голова, уж очень там перегружено всяким низкоуровневым AOP-ом. В реальности, если наша цель только декларативные транзакции, то выбор обычно идет между либо связкой transactionManager/transactionInterceptor/proxy-бины (как в моем примере), либо аннотациями, прямой AOP нафиг не сдался.
Но эта статья очень хорошо раскрывает теоретические аспекты декларативных транзакций и преимуществ их применеия, а потому настоятельно рекомендуую ее к прочтению Йуный джавистЪ .какая ж ето статья. это ведь спрингреференсе. его надо прочитать всем. с первой страницы до последней.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37577269
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если в двух файлах, подтягиваемых импортом, есть бины с одинаковыми именами, то спринг не сообщит об ошибке, а молча использует то описание бина, которое встретится последним.

"меня терзают смутные сомнения" (с), что вы не разобрались со спрингом...

В чем именно я не разобрался? Разве то что я написал, неверно?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37577283
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenom,
В вашем коде используется PROPAGATION_REQUIRES_NEW. Вы не могли бы привести пример, зачем PROPAGATION_REQUIRES_NEW бывает нужен?
Мне никогда не встречалась необходимость его использовать.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37577288
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪВ чем именно я не разобрался? Разве то что я написал, неверно?Вы с чего взяли, что это ошибка или проблема? 1) Случай высосан из пальца. Именя бинов в большинстве случаев делают соответствуютщими имени класса, тут хрен ошибешься
2) Если даже такое и произошло, это очень скоро даст о себе знать ClassCastException и свалившимися тестами. Это вам не проблемы с многопоточностью, которые хрен выловишь, это элементарнейшая и простейшая ошибка, которая исправляется за минуту.
3) Эта фича полезна при тестировании и при развертывании приложения в разных окружениях. Вот у меня дефолтная конфигурация для WebSphere, а вот у меня импорт, который заменяет JNDI ресурсы на локальные, а вот у меня импорт, который позволит работать на WebLogic - например, подменяет TransactionManager.
Так что никакого криминала в этом "недостатке" нет, не выдумывайте.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37577290
am_sasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Йуный джавистЪ,
неверно, для веба так
Код: java
1.
2.
        XmlWebApplicationContext webctx=(XmlWebApplicationContext) configurableWebApplicationContext;
        webctx.setAllowBeanDefinitionOverriding(false);
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37577313
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪВ вашем коде используется PROPAGATION_REQUIRES_NEW. Вы не могли бы привести пример, зачем PROPAGATION_REQUIRES_NEW бывает нужен? Мне никогда не встречалась необходимость его использовать.Пример из жизни. Веб приложение, пользователь кликает на кнопку и запускает длительный процесс. Процесс может завершиться успешно, может свалиться с ошибкой - . При этом пользователь хочет видеть прогресс выполнения.
1) Открывается транзакция, запускается процесс - PROPAGATION_REQUIRED
2) Пишем в базу запись о начале процесса - упрощенно INSERT (id, start_date) - PROPAGATION_REQUIRES_NEW
3) Идет выполнение процесса, какое-то взаимодействие с базой, какая-то незакоммиченная информация
4) Через некоторые интервалы пишем в базу статус выполнения процесса - упрощенно UPDATE completed = 5/10 WHERE id - PROPAGATION_REQUIRES_NEW
5) Дальше выполняем, какое-то взаимодействие с базой, какая-то промежуточная незакоммиченная информация в базе
6) Эксепшн, вылетаем, всяе промежуточное откатывается.
По итогам - пользователь видит, что процесс оборвался на таком-то этапе, но база в целостном состоянии.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37577419
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор3) Эта фича полезна при тестировании и при развертывании приложения в разных окружениях. Вот у меня дефолтная конфигурация для WebSphere, а вот у меня импорт, который заменяет JNDI ресурсы на локальные, а вот у меня импорт, который позволит работать на WebLogic - например, подменяет TransactionManager.

Значит, чтобы действовал определенный импорт, остальные надо удалить или закомментировать?
Если мне надо деплоить приложение на WebLogic и WebSphere, то я скорее всего захочу написать пару скриптов deploy_to_web_sphere.bat и deploy_to_weblogic.bat, потому что каждый раз править руками applicationContext.xml очень неудобно.
Как мне написать такие скрипты? Придется делать препроцессинг applicationContext.xml?

Теперь представьте себе, что в apllicationContext.xml разрешены условные конструкции:
Код: xml
1.
2.
3.
4.
5.
6.
<if condition="props('server.properties').get('servername')='WEBSPHERE' ">
   <import 'websphere.sql'/>
</if>
<if condition="props('server.properties').get('servername')='WEBLOGIC' ">
   <import 'weblogic.sql'/>
</if>


Скрипту останется создать файл server.properties:
Код: xml
1.
echo servername=WEBSPHERE > server.properties



Такой способ я считаю нормальным. Но он требует нормального языка, который по крайней мере поддерживает if'ы. Так как засунуть такой язык в XML - явное безумие, выход один - не пользоваться Spring XML, а создавать бины сразу в Java.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37577453
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪЕсли мне надо деплоить приложение на WebLogic и WebSphereа надо, да?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37577464
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если мне надо деплоить приложение на WebLogic и WebSphere
а надо, да?

svenom пишет, что ему надо:
Вот у меня дефолтная конфигурация для WebSphere, а вот у меня импорт, который заменяет JNDI ресурсы на локальные, а вот у меня импорт, который позволит работать на WebLogic
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37577505
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪЗначит, чтобы действовал определенный импорт, остальные надо удалить или закомментировать?Варианты:
1) Поменять имя подхватываемого XML-файла руками
2) Нужные файлы контекста можно подсунуть через Ant/Maven
3) Можно сделать через файл свойств и промежуточный XML-ник
4) Еще есть какой-то вариант с EagerPropertyPlaceholderConfigurer, но я тут деталей не знаю.

Йуный джавистЪвыход один - не пользоваться Spring XML, а создавать бины сразу в JavaМне жаль, что единственный для вас выход решить проблему, которая заключается в отсутствии проблемы, - изобрести велосипед. Приведите пример, как вы будете "создавать" бины в Java.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37577513
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪ ,
И вы как-то плавно с темы транзакций съехали. Чем меня прикалывают длинные вот такие длинные дискусии, так тем, что оппоненты, как правило, предпочитают забывать про свои спорные утверждения и не отвечать на вопросы, которые явно поставят их в невыгодное положение, а вместо этого продолжают заваливать меня вопросами
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37577538
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪТеперь представьте себе, что в apllicationContext.xml разрешены условные конструкции:

Такой способ я считаю нормальным. Но он требует нормального языка, который по крайней мере поддерживает if'ы. Так как засунуть такой язык в XML - явное безумие, выход один - не пользоваться Spring XML, а создавать бины сразу в Java.в новом 3.1 разрешены - смотри profile

if в конфигурации плохо. конфиг не должен быть ЯП, по крайней мере в идеале.

PS никто не мешает создавать бины в Java и отдавать в Spring. Можно даже всю конфигурацию держать в виде java кода.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37577565
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приведите пример, как вы будете "создавать" бины в Java.

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

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

авторВам виднее

авторВсе может быть

авторГолословщина.

Это уже говоря о том, что вы отправляете меня читать документацию, которую я читал, а вы нет, потому что от нее "пухнет голова".
Так что не надо делать мне замечания.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37577579
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDA,
авторникто не мешает создавать бины в Java и отдавать в Spring. Можно даже всю конфигурацию держать в виде java кода.

Я так и делаю, только Spring IoC не использую.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37577850
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪПриводил пример в первом посте в этом треде.Помню, помню, велосипед. Все уже давно написано и отлажено за вас. Зачем тратить время на повторное набивание шишек - непонятно.

Йуный джавистЪКаждое свое утверждение я подкрепляю какими-то аргументами, примерами кода, объяснениями.Дак речь про то, что на те мои посты, где вам есть, что опровергнуть, вы отписываетесь с удовльствием. А вот те посты, на которые ответить негативного нечего, остаются без внимания

Йуный джавистЪВаши посты часто состоят из одного - двух слов и смайликов, напримерВы про вот эти: 11761662 , 11768047 , 11768086 , 11768157 , 11768191 , 11770239 , 11770334 , 11770865 ? Это все, что я вам отвечал, односложных постов я там не увидел, все по делу, с разжевыванием. Есть односложные ответы на комментарии, которые основываются либо на вашем негативном опыте работы с чем-либо (читай - "не смог разобраться"), либо же на додумках, вроде:
Йуный джавистЪВ Java нормальные средства декомпозиции, а в Spring XML - кривые.Вам виднее - народ пользуется, не жалуется особо. Хотите - XML, хотите - аннотации. Как говориться, на любой вкус. Если вы не смогли с ними совладать, то это означает только то, что вы не смогли с ними совладать. Сам продукт это никак не характеризует.
Йуный джавистЪЕсли для описания конфигурации полноценный язык не нужен, то зачем тогда надо было делать Spring EL? Мне кажется, через пару лет разрешат вставлять в XML файлы куски кода на нормальных языках и конфигурировать бин с названием codeEvaluator, который наследует от AbstractCodeEvaluatorFactory, и у которого из коробки три реализации - JavaCodeEvaluatorFactory, JavaScriptCodeEvaluatorFactory и еще какой-нибудь GroovyCodeEvaluatorFactory.Все может быть - что тут можно еще ответить?
Йуный джавистЪВ нескольких мегабайтах библиотек содержатся тысячи багов и граблей (см пример выше).Голословщина - она и есть голословщина. Весь Java-мир построен на open-source библиотеках, и все нормально работает. У одного вас какие-то мифические тысячи багов отовсюду лезут У меня сейчас приложение - 35 метров еарник, и это мы еще потрудились, что бы его урезать, был около 60. Проработал уже 4 года без проблем. Что мы делаем не так? Что нужно сделать, что бы наткнуться на эти тысячи багов?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37577877
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪ ,
Можно даже сделать приблизительную оценку количества багов в моем текущем проекте.
1) Если в нескольких мегабайтах кода содержатся тысячи багов (цитирую вас), то давайте остановимся на умеренной оценке 1 мегабайт = 1000 багов.
2) То есть в моем приложении сейчас примерно 35000 тысяч потенциальных багов.
3) Чисто нашего кода, который профессионально оттестирован, либо же сгенерирован - примерно 10 метров. Считаем, что там багов нет или почти нет. Остается 25000 багов в сторонних библиотеках.
4) Пускай из сторонних библиотек используется в среднем только 1% их функционала. Получается, что мы должны постоянно сталкиваться с 350 багами той или иной критичности.
Что-то я их пока в таком количестве не вижу. Нет, я помню забавный баг(скорее недоработку) в Хибере, который выдает невнятное сообщение об ошибке в определенных случаях; я помню баг в Rampart, когда вылетал NullPointerException; я помню баг в JVM веб-сферы, когда она не могла через рефлекшн найти метод (вылечилось установкой фикспака) ... но вот где остальные 347?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37577879
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исправление: не 350 и 347, а 250 и 247 соответственно
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37606076
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
параметры присоединения/открытия (Requires, RequiredNew, Supported, Mandatory и т.д.)

В 99.99% случаях запрос обрабатывается так: открывается транзакция, делается вся работа, транзакция закрывается. Не надо никакого xml, не надо генерировать и загружать код в рантайме, не надо засорять стэк вызовов.

Вот пример из документации спринга:
public Object someServiceMethod() {
return transactionTemplate.execute(new TransactionCallback() {
// the code in this method executes in a transactional context
public Object doInTransaction(TransactionStatus status) {
updateOperation1();
return resultOfUpdateOperation2();
}
});
}

Теперь для всего кода внутри someServiceMethod будет propagation=Requires.
В случае с Hibernate и web-интерфейсом в транзакцию надо заворачивать вообще весь сервлет (из-за lazy loading в шаблонизаторе). То есть просто навешиваем servlet-фильтр на все и дальше не паримся.

Вообще, spring transactions почти нормальная библиотека (совершенно отдельная от spring ioc). Единственная претензия - разработка требует огромной внимательности. Очень легко допустить ошибку, которую не выявят никакие тесты. Пример:
Код: java
1.
2.
3.
4.
5.
private JdbcTemplate jdbcTemplate;
public void transferMoney(long from, long to, int amount){
  jdbcTemplate.update("update account set amount = amount + ? where id = ?", amount, to);
  jdbcTemplate.update("update account set amount = amount - ? where id = ?", amount,from);
}


Разработчик пишет такую функцию, и забывает завернуть ее в транзакцию(неважно как - через @Transactional, через xml либо через такое API как выше). В результате оба запроса выполняются с autocommit=true, что очень печально.
В том API, которое я описывал ранее в этом треде 11767978 , если мы забываем открыть транзакцию, при попытке выполнить sql запрос просто вылетит exception, что не позволяет допустить глупую ошибку.

Еще бывают автономные транзакции, но они нужны крайне редко. Если все таки нужны, то можно написать как то так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public class Logger{
public boolean useAutonomousTx;
public logToDatabase(String msg){
    Propagation = useAutonomousTx?PROPAGATION_REQUIRES_NEW:PROPAGATION_REQUIRES;
    return transactionTemplate.execute(propagation,new TransactionCallback() {
      public Object doInTransaction(TransactionStatus status) {
       //логируем в базу данных
    }
    });
}
}


Если бы было много функций, которые можно выполнять как в текущей транзакции, так и в отдельной, то такая писанина конечно быстро бы надоела. Но так как это бывает нужно крайне редко, то все ок.
Ну и напоследок, если все таки хочется совсем как в Spring, то xml все равно не нужен:
It is also possible to use the Spring Framework's @Transactional support outside of a Spring container by means of an AspectJ aspect. To use this support you must first annotate your classes (and optionally your classes' methods with the @Transactional annotation, and then you must link (weave) your application with the org.springframework.transaction.aspectj.AnnotationTransactionAspect defined in the spring-aspects.jar file.

То есть AspectJ во время сборки добавляет в методы, помеченные @Transactional возню с transactionTemplate. Spring IoС здесь банально не нужен для AOP, как я уже отмечал в 11767978 .
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37606083
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪВ 99.99% случаях запрос обрабатывается так: открывается транзакция, делается вся работа, транзакция закрывается. Не надо никакого xml, не надо генерировать и загружать код в рантайме, не надо засорять стэк вызовов.Что любопытно - вы так и не поняли, что значит декларативное управление транзакциями и в чем его преимущество по сравнению с программным.
Поэтому нет никакого смысла комменитровать вашу дальнейшую писанину
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37606094
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что любопытно - вы так и не поняли, что значит декларативное управление транзакциями и в чем его преимущество по сравнению с программным.

Ну, собственно, я даже не знаю что это такое. Википедия ничего об этом не знает. В гугле большинство ссылок ведет на спринг, но Spring документация подразумевает, что это понятие уже известно читателю. По поводу преимуществ - все что я нашел в документации к Spring о преимуществах, это следующее:
Most users of the Spring Framework choose declarative transaction management. It is the option with the least impact on application code, and hence is most consistent with the ideals of a non-invasive lightweight container.

Ну то есть преимущество в том, что это соответствует идеалам. С такой же мотивацией можно вставлять в код цитаты из Ленина, потому что это соответствует идеалам борьбы за коммунизм.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37606100
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ок, давайте проще попробуем. В чем смысл AOP понимаете?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37606109
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ок, давайте проще попробуем. В чем смысл AOP понимаете?

Вы лучше укажите, чем плох описанный мной подход. Либо киньте ссылку на ресурс, где описываются преимущества декларативного управления транзакциями в Spring.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37606119
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что бы понять, чем плох ваш подход вам надо понять, для чего нужен AOP, потому я и спрашиваю у вас - понимаете вы, для чего он нужен или нет. И тут не идет разговор про декларативные транзакции в спринге , разговор идет про декларативные транзакции в принципе .
Так вот, есть такое понятие, как separation of concerns, которое гласит нам, что мухи должны быть отдельно, а котлеты отдельно. AOP это одно из развитий этой идеи. Эта идеаология гласит - есть бизнес логика, а есть вспомогательная, скажем так - инфраструктурная логика, и они должны быть разделены. Основная мотивация - легкость в восприятии, легкость в поддержке, легкость в разработке.
Декларативные транзакции - одна из реализаций идеи AOP (другие примеры - фильтры сервлетов, управление авторизацией и аутентификацией, интерсепторы в EJB - это все чистый AOP).
Когда мы управляем транзакциями декларативно, у нас появляется возможность сфокусироваться на бизнес-логике, и не морочить себе голову одинаковым повторяющимся вспомогательным кодом, которым будет засрана всяе бизнес-логика. На выходе у нас получается чистая бизнес-логика без каких-либо зависимостей от менеджера транзакций.

Что бы вам было проще представить это, давайте возьмем пример из реальной жизни. Представьте себе, что вы директор, который идет в свой офис, и ожидает там через несколько часов каких-то людей для переговоров. Вы хотите быть уверенным, что когда они придут, ваш кабинет будет чистым, будет достаточно канцелярских принадлежностей и вас не будут отвлекать звонками.
Вот вариант, как этого можно добиться без AOP:
- попросить уборщицу протереть полы в кабинете
- попросить офис-менеджера принести канцелярские принадлежности
- попросить секретаря, что бы вас не беспокоили
- принять партнеров
- сказать секретарю, что вас уже можно "беспокоить"
То есть вам надо было только принятб партнеров, а вам вместо этого еще потратить время на кучу вспомогательных действий.

А вот вариант с использованием AOP:
- принять партнеров
Все. Все остальные действия сделаны за вас, так как:
- Аспект "уборщица" знает, что при наступлении события "7 утра" надо "протереть полы в офисе"
- Аспект "офис-менеджер" знает, что при наступлении события "понедельник четной недели" надо "принести канцелярские принадлежности"
- Аспект "секретарь" знает, что при наступлении события "в кабинете директора появились посторонние", надо перейти в режим "нельзя беспокоить", а при наступлении события "в кабинете директора больше нет посторонних" перейти в режим "можно беспокоить".

Вот вам как было бы комфортнее работать - по первому или по второму сценарию?

При этом, естественно, за все надо платить. И платой за использование AOP является дополнительный оверхед на динамические прокси, на рефлексию и т.д.. Но от этого никуда не деться, в программировании, как и в любых других дисциплинах действует адаптированное золотое правило механики - выиграли в одном, проиграли в другом. И готовы ли вы пойти на этот дополнительный оверхед зависит исключительно от разрабатываемой системы. В большинстве случаев мы можем пойти на это, потеряв несколько десятков микросекнуд. А в каком-нибудь крайнем случае, это может быть невозможно. И это абсолютно естественно - у каждой технологии есть свои границы применимости.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37606143
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪ,
да нет осбых Явных преимуществ. Кому-то нравится управлять кодом, кому-то расставлять аннотации.

В модели среда контейнера заботится о запуске, фиксации и окате транзакций. Разработчик отвечает только за указание поведения транзакции.
В первых двух он это делал так:
старт
f1()
f2()
f3()
откат \ commit

в декларативной он пишет аннотацию и кучу флагов.
Код: java
1.
2.
  @Transactional(propagation=Propagation.REQUIRED,
    rollbackFor=Exception.class)



Кому что больше нравится.
Хочу обратить внимание:
- очерёдность и события не относятся к декл.транз.
- надо строго знать модель, стратегию и атрибуты аннотаций. То что ты писал в коде, теперь надо будет расставлять "флажками".
- При использовании модели декларативных транзакций контейнер не будет автоматически откатывать транзакцию в случае проверяемого исключения. Разработчик должен указывать, где и когда откатывать транзакции в случае проверяемого исключения (rollbackFor).
Т.е. пока вы не определитесь со стратегией и моделью хотя бы на пакет действий С ОТКАТАМИ БИЗНЕС-ТРАНЗАКЦИИ, ВЫ НЕ ПОЙМЁТЕ ПРЕИМУЩЕСТВА ДЛЯ ДАННОГО ПРОЕКТА.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37606186
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Svenom,
AOP на джаваскрипте делается в 10 строчек:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
<script>
function println(str){
	document.write(str+'<br>')
}

//constructor for dummy object with methods foo(), bar() and baz()
function createFooService(){
	return {
	        foo:function(){println('this is foo() method')},
		bar:function(){println('this is bar() method')},
		baz:function(){println('this is baz() method')}
	}
}

function addLoggingAspectToFunction(func,name){
	return function(args){
		println('Logging aspect: Invoked method ' + name);
		return func(args);
	}
}

//Adds logging aspect to all methods of arbitrary object
function addLoggingAspectToObject(obj){
	for(method in obj)
		obj[method] = addLoggingAspectToFunction(obj[method],method);
	return obj;
}

var fooService = addLoggingAspectToObject(createFooService());

fooService.foo();
fooService.bar();
fooService.baz();
</script>


Можно скопировать в htm и открыть в браузере. Результат работы такой:
Код: javascript
1.
2.
3.
4.
5.
6.
Logging aspect: Invoked method foo
this is foo() method
Logging aspect: Invoked method bar
this is bar() method
Logging aspect: Invoked method baz
this is baz() method


Сравните - в Java надо иметь несколько Mb библиотек, какой-то мутный XML, генерировать и подгружать код в рантайме.
В Javascript вообще не надо библиотек, все делается в 10 строк.
Создатели языков не добавляют такие возможности в языки потому что их использование - очень плохая практика. Глядя на код, невозможно понять откуда к нам пришел какой-то объект, какие аспекты на него навесили. В дебагере вообще будет адский ужас - код без исходников, либо код с исходниками, который поковыряли после компиляции.
Возможно, в каких-то крайних случаях приходится идти даже на такое. Но управление транзакциями - это явно не тот случай.
авторТак вот, есть такое понятие, как separation of concerns, которое гласит нам, что мухи должны быть отдельно, а котлеты отдельно. AOP это одно из развитий этой идеи. Эта идеаология гласит - есть бизнес логика, а есть вспомогательная, скажем так - инфраструктурная логика, и они должны быть разделены.


Вообще я вижу смысл отделять инфраструктурную логику, только если предполагается, что в разных случаях она разная, и ее можно подцепить или отцепить.
Если же вместе с какой-то функцией ВСЕГДА идет эта инфраструктурная логика, то отцепляя ее, мы усложняем на ровном месте. Когда я работаю с базой, я всегда делаю это в рамках какой-то транзакции.
Кстати Svenom, вы понимаете, что в таком примере:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public void a(){
}

public void b(){
  a();
}

public void c(){
  b();
}


если мы запроксируем функцию c(), а функции a() и b() оставим как есть, то при вызове функции c() все три функции a,b и c будут выполняться в одной транзакции.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37606240
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪСравните - в Java надо иметь несколько Mb библиотек, какой-то мутный XML, генерировать и подгружать код в рантайме.
В Javascript вообще не надо библиотек, все делается в 10 строк.Сравнил, какой я должен сделать из этого вывод?

Йуный джавистЪСоздатели языков не добавляют такие возможности в языки потому что их использование - очень плохая практика.Ах вооот оно как А я то думал, что в Java так сделать нельзя, так как это язык со строгой типизацией и в нем нельзя передавать функцию в качестве параметра , а на самом то деле вон оно как оказывается - это потому что AOP очень плохая музыка практика.
Кстати, то, что вы написали, это нe AOP, а говнокод, уж извините, так как он абсолютно нерасширяемый и неподдерживаемый.

Йуный джавистЪГлядя на код, невозможно понять откуда к нам пришел какой-то объект, какие аспекты на него навесили.Совершенно верно, именно это и является целью введения AOP - что бы бизнес-логика не была засорена вспомогательным сервисным кодом. Вы только что сами проговорили одно из основных преимуществ AOP.

Йуный джавистЪВ дебагере вообще будет адский ужас - код без исходников, либо код с исходниками, который поковыряли после компиляции.Это ваша додумка. А все потому, что вы даже не удосужились разобраться, как работает AOP в том же спринге.
1) Исходники того, что вы сами написали, есть всегда, и их всегда можно дебажить
2) "Ковыряние" идет не в вашем классе, а во вспомогательной проксе. Ваш же класс никто не трогает.
Одним словом, классический клинический случаи - слышал звон, да не знаю, где он.

Йуный джавистЪВозможно, в каких-то крайних случаях приходится идти даже на такое. Но управление транзакциями - это явно не тот случай.Безусловно.

Йуный джавистЪВообще я вижу смысл отделять инфраструктурную логику, только если предполагается, что в разных случаях она разная, и ее можно подцепить или отцепить.
Если же вместе с какой-то функцией ВСЕГДА идет эта инфраструктурная логика, то отцепляя ее, мы усложняем на ровном месте. Когда я работаю с базой, я всегда делаю это в рамках какой-то транзакции.Умываю руки. Поработаете в серьезных проектах - поймете. Ну и, напоследок, повторю еще разок места где вы уже используете AOP:
1) Servlet - фильтры
2) Servlet - всевозможные листенеры на создание контекста, сессию и т.д.
3) Servlet - безопасность
4) JPA/Hibernate - Lazy-инициализация
5) EJB - интерсепторы
6) EJB - безопасноть
Это то, что сходу в голову пришло. То есть весь JavaEE насквозь пронизан концепциями AOP, а тут выясняется, что AOP - это "очень плохая практика" Да будет так.

Йуный джавистЪКстати Svenom, вы понимаете, что в таком примере, если мы запроксируем функцию c(), а функции a() и b() оставим как есть, то при вызове функции c() все три функции a,b и c будут выполняться в одной транзакции.Разумеется. Только это вы к чему?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37606320
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪВообще я вижу смысл отделять инфраструктурную логику, только если предполагается, что в разных случаях она разная, и ее можно подцепить или отцепить.
Если же вместе с какой-то функцией ВСЕГДА идет эта инфраструктурная логика, то отцепляя ее, мы усложняем на ровном месте. Когда я работаю с базой, я всегда делаю это в рамках какой-то транзакции.
да, в случаях с транзакциями, логика кода очень переплетена с с ними. Если это не банальный Crud на автокоммите.
Поэтому выделить девственно чистый код БЛ без транзакционной обработки (if невышло to откат) - нонсенс.
Так сказать POJO БЛ :).
Спринг даёт выбор, и замечательно.
Никто не сказал, что транзакции, это НЕ БЛ, или какая то техническая прослойка.
IMHO, подозреваю, что одно из направлений Jav'ы вместе с БД хочет вынести из своего кода и TranXXX куда подальше :)
...
Рейтинг: 0 / 0
248 сообщений из 248, показаны все 10 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Какие приемущества использования IoC контейнера?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]