Для вашего варианта использования, когда приложение работает на одном сервере, а база данных — на другом, выбор между EJB и Spring не имеет значения. Каждая платформа поддерживает это, будь то приложение Java SE, простой контейнер сервлетов, такой как Tomcat или Jetty, PHP, Ruby on Rails или что-то еще.
Для этого вам не нужно никакого явного удаленного взаимодействия. Вы просто определяете источник данных, предоставляете URL-адрес, где находится ваш сервер БД, и все.
Тем не менее, и EJB, и Spring Beans упрощают работу с источниками данных. Они оба помогают вам определить источник данных, внедрить его в bean-компоненты и управлять связанными с ними транзакциями.
Из этих двух компонентов EJB (и Java EE в целом) является более легким и в большей степени придерживается принципа соглашения по сравнению с конфигурацией. Spring требует большей детализации, чтобы получить то же самое, и во многом зависит от XML-файлов, которые могут быстро стать очень большими и громоздкими. Обратная сторона медали заключается в том, что Spring может быть менее волшебным, и вы можете чувствовать себя более уверенно после того, как пропишете все, что хотите.
Другая проблема заключается в том, как разрабатываются EJB и Spring.
EJB бесплатен (как и бесплатное пиво), с открытым исходным кодом и не является собственностью. Существуют реализации EJB, созданные некоммерческими организациями (Apache), компаниями с открытым исходным кодом (Redhat/JBoss) и коммерческими предприятиями с закрытым исходным кодом (IBM). Лично я бы избегал последнего, но каждому свое.
Spring, с другой стороны, является бесплатным и открытым исходным кодом, но строго проприетарным. Существует только одна компания, производящая Spring, и это Springsource. Если вы не согласны с Родом, то вам не повезло. Это не обязательно плохо, но разница, о которой вы, возможно, захотите знать.
Делать все @Annotation всегда хорошо? конфигурация никогда не нужна?
Это бесконечный спор на самом деле. Некоторые утверждают, что XML трудно поддерживать, другие утверждают, что аннотации загрязняют в остальном чистую модель POJO.
Я думаю, что аннотирование bean-компонента как bean-компонента EJB без состояния (@Stateless) или объекта JPA (@Entity) более четко выполняется с использованием аннотаций. То же самое касается инъекций зависимостей @EJB или @Inject. С другой стороны, я предпочитаю, чтобы именованные запросы JPQL находились в XML-файлах, а не в аннотациях, а инъекции, представляющие чистые данные конфигурации (например, максимальное значение для чего-либо), также были в XML.
В Java EE каждая аннотация также может быть указана в XML. Если присутствуют и аннотация, и XML-эквивалент, XML имеет приоритет над аннотацией. Это делает очень удобным начать с аннотации для случая по умолчанию, но позже переопределить ее через XML для конкретного варианта использования.
Текущие предпочтения в Java EE, похоже, больше связаны с (простыми) аннотациями в сочетании с большим количеством соглашений по сравнению с конфигурацией.
person
akira
schedule
17.08.2011