Как архивировать АОП в OSGi с помощью Apache Felix

В настоящее время я работаю над проектом OSGi, некоторые части которого идеально подходят для АОП-программирования. Не имея большого опыта работы с АОП в сочетании с OSGi, я хотел бы знать, как лучше всего реализовать АОП в среде OSGi? Я читал несколько статей об этой проблеме, но не нашел подходящего решения. Например, есть проект Equinox Incubator для AspectJ, но последняя сборка была 2008 года. Но поскольку я использую Apache Felix и Bnd(tools), я хочу избежать использования чего-либо из Equinox. Кстати, одним из требований к процессу ткачества будет то, что он должен быть во время компиляции и, возможно, позже во время загрузки. Кроме того, я использую Ant и Bnd для создания своих пакетов. Так что было бы здорово, если бы я смог интегрировать Aspectj в этот процесс сборки.

Надеюсь, кто-то может поделиться опытом с таким вариантом использования.

ИЗМЕНИТЬ

Резюме на данный момент:

  • есть возможность использовать Spring AOP, как упомянул Кристиан Шнайдер в своем ответе (но, к сожалению, не то, что я ищу)

person christian.vogel    schedule 03.07.2012    source источник


Ответы (1)


Я думаю, вы можете взглянуть на Aries JPA. Недавно туда добавили плетение времени загрузки. Похоже, в новой спецификации OSGi также есть крючок для плетения. Так что поддержка AspectJ и тому подобного теперь вполне возможна. Хотя я еще не видел его в действии.

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

person Christian Schneider    schedule 03.07.2012
comment
привет Кристиан. Спасибо за ваш ответ. На мой взгляд, Aries больше подходит для случаев использования JPA, когда вы работаете с источниками данных. Но, если честно, возможно, это решает другую проблему, так что, тем не менее, спасибо за упоминание об этом ;) Об АОП: Один из случаев, когда я хочу его использовать, — это многие стандартные процессы ведения журнала. Кроме того, некоторые проблемы безопасности также идеально подходят для этого. Конечно, я мог бы решить это без использования аспектов, но было бы здорово избежать избыточного/плохого кода. Но вы правы, я должен быть осторожен, чтобы не злоупотреблять АОП. - person christian.vogel; 03.07.2012
comment
Я настоятельно рекомендую не использовать полный АОП, так как он легко выходит из-под контроля. Что очень хорошо работает, так это использование аспектов в классах, которые внедряются с помощью интерфейсов. В этом случае вы можете использовать динамические прокси вместо манипулирования байт-кодом. Например, spring позволяет выполнять безопасность, ведение журналов и транзакции на границах интерфейса. Затем это очень хорошо работает и в OSGi. Мне лично никогда не нужно было использовать больше, чем это. Единственным исключением является jpa, но для этих случаев существуют специализированные библиотеки. - person Christian Schneider; 04.07.2012
comment
Не могли бы вы дать ссылку для более подробного описания? - person christian.vogel; 04.07.2012
comment
Для Spring dm это в основном обычная конфигурация, как описано в документации Spring. См. static.springsource.org/spring/docs/2.5.x. /reference/aop.html В главе 6.1.3 описывается, что Spring по умолчанию использует динамические прокси. Они отлично работают в OSGi, так как не требуют плетения. - person Christian Schneider; 04.07.2012
comment
Привет. В последние дни я пытался отстоять ваше предложение использовать Spring AOP. Во-первых, это выглядит хорошо, так как это не АОП напрямую, Spring использует динамические прокси, как вы упоминали ранее. Но у него есть некоторые ограничения в отсутствии классов bean-компонентов. В моем случае я не хочу добавлять полную поддержку Spring в свою среду, поэтому я не хочу иметь спецификации bean-компонентов и некоторый xml, который их определяет. Поэтому я думаю, что Spring - это не то, что я искал. У вас есть другие предложения для меня? - person christian.vogel; 08.07.2012