CDI перехватчик и несколько EAR - PullRequest
0 голосов
/ 17 января 2020

У меня есть некоторые jpa-сущности и некоторые EJB-компоненты, которые управляют ими.

Теперь у меня есть PostgreSQL материализованное представление, и я хочу обновить sh мое представление, когда кто-то делает вставку, обновление или удаление.

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

Я объясню более подробно ...

У меня есть EJB, пусть будет ViewRefresher и метод для обновления sh представления ...

this.viewRefresher.refreshView();

Хорошо, система работает хорошо. Например, когда я импортирую файл CSV, в конце я вызываю метод, и представление обновляется.

У меня есть заметка в моем Standard.jar:

@InterceptorBinding
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface RefreshView {}

У меня есть "PriceEJB" в моем Shared.jar с некоторыми методами, аннотированными для его перехвата:

@Stateless(name = "PriceStd")
@PermitAll
public class PriceStdFacade extends AbstractFacade<PriceStd> implements PrezziStdFacadeRemote {
    ...
    @Override
    @RefreshView
    public PriceStd create(String entity, String token) throws Exception {
        return super.create(entity, token);
    }
    ...
}

В моем Specifi c .jar я реализовал перехватчик:

@RefreshView @Interceptor
public class MySpecialInterceptor {
...
   @AroundInvoke
   public Object refreshView(InvocationContext ctx) throws Exception{
       Object o =  ctx.proceed();
       this.viewRefresher.refreshView();
       return o;
   }
}

Файл структура выглядит так:

Стандартный архив с большим количеством вещей

Standard.jar:

  • my.package
    • RefreshView. java

Архив с некоторым стандартным EJB, совместно используемым несколькими проектами

Shared.jar:

  • my.package
    • PriceStdFacade. java
  • META-INF
    • бобы. xml

Некоторые спецификации c JAR, используемые некоторыми EAR:

Specific1.jar:

  • my.package. special1
    • MySpecialInterceptor. java
    • ViewRefre sher. java
  • META-INF
    • бобы. xml

Specific2.jar:

  • my.package.special2
    • MySpecialInterceptor. java
    • ViewRefresher. java
  • META- INF
    • бобы. xml

И некоторые EAR. Я развернул EAR на Wildfly 16.

Бобы Specific1.jar. xml и бобы Specific2.jar. xml имеет определенный перехватчик:

<interceptors>
    <class>my.package.spescialX.MySpecialInterceptor</class>
</interceptors>

To пусть перехватчик работает, мне нужно определить его в jar bean-компонентах Shared. xml, но если я сделаю это, SharedJar станет зависимым от SpecificX.jar.

Как я могу сделать это, оставив Shared.jar независимым?

Завтра я хочу создать MyNewProject и не должен менять Shared.jar

...