У меня есть некоторые 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:
Архив с некоторым стандартным EJB, совместно используемым несколькими проектами
Shared.jar:
Некоторые спецификации c JAR, используемые некоторыми EAR:
Specific1.jar:
- my.package. special1
- MySpecialInterceptor. java
- ViewRefre sher. java
- META-INF
Specific2.jar:
- my.package.special2
- MySpecialInterceptor. java
- ViewRefresher. java
- META- INF
И некоторые 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