Вопрос по maven, jboss, java-ee, java – циклические зависимости maven

3

У меня есть модульный проект Maven, в котором два модуля "БИЗ» а также "EJB» содержать что-то вроде этого:

//PART OF "BIZ" Module:

public interface MyInterface{

 public void foo();

}
............................................
public class ImplFactory{

public static MyInterface getInterfaceImplementation(){
MyInterface ret=null;
Class cl = null;
                try {
                    cl= (Class) Class.forName("InterfaceImpl");
                    ret= cl.newInstance();
                    }
                ....
                ret ret;
}
.......................................
public class MyClassX{

    public static void doSomethingX(){

    }
}

//PART OF "EJB" Module:

public class InterfaceImpl implements MyInterface
@EJB
private MyEJB1 ejb1;

public void  foo(){
    ejb1.doSomething();
}
........................................
@Stateless
public class MyEJB1{

    public void doSomething(){
    ...
    MyClassX.doSomethingX();
    ....
    }

}

Как вы видите, "EJB» зависит от "БИЗ» как он используетMyClassX (по правде говоря, он использует несколько классов BIZ). Это причина, почемуImplFactory использует отражение, чтобы создать экземплярInterfaceImpl, Проблема вcl.newInstance () броситClassCastException так как 2 модуля относятся соответственно к WAR и JAR (модуль "EJB» компилируется с указанием типа = "EJB» и используя плагин Maven EJB) и использовать различные ClassLoaders (он работает на JBoss 7). С другой стороны,InterfaceImpl не может быть перемещен в BIZ, поскольку это необходимоMyEJB1 для его работы, и это приведет к циклической зависимости.

Итак, мой вопрос: как бы вы решили эту сложную ситуацию (программно или путем изменения конфигурации)? Я надеюсь, что вы можете помочь мне! Спасибо!

На данный момент я бы оставил вещи такими, какие они есть: я слишком упрощал ситуацию, но я имею дело с десятками классов, использующих getInterfaceImplementation () .. (то есть я рассмотрю это во второй момент). Federico
Мне теперь любопытно .. :) Как CDI поможет решить описанную проблему? Federico
Первый вопрос: почему бы не использовать (C) DI вместо заводов? khmarbaise

Ваш Ответ

2   ответа
0

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

  1. Что касается циклической зависимости, то, что я сделал, когда в моем файле war был модуль src. Ссылающийся модуль может просто взять банку с войны, добавив maven dep что-то вроде: (сейчас не уверен насчет точного синтаксиса)

  2. В одном случае я не мог вызвать src военного модуля из-за самоизбыточности. Затем мне пришлось создать отдельный модуль src и добавить его в качестве зависимости ко всем военным модулям, где это было необходимо.

Я не уверен, может ли это помочь вам. Просто хотел поделиться тем, что знал. Дайте мне знать, если вы можете улучшить мои комментарии.

попробую поделиться кодом и объяснить больше по моему делу через день или два .. спасибо за ваше терпение .. Pawan Kumar Jha
Привет! Спасибо, что ответили, но, честно говоря, я нене понимаю, что вы хотели сказать ..: (я Federico
3

Вы должны разделить эти зависимости немного больше.

Примерно так будет лучше:

.
├── pom.xml
├── my-api ("API")
|   ├── pom.xml
|   └── src
|       └── main
|           └── java
|               └── my
|                   └── package
|                       └── MyInterface.java
├── my-ejb ("EJB")
|   ├── pom.xml
|   └── src
|       └── main
|           └── java
|               └── my
|                   └── package
|                       └── InterfaceImpl.java
└── my-web ("BIZ")
    ├── pom.xml
    └── src
        └── main
            ├── java
            |   └── my
            |       └── package
            |           └── ImplFactory.java
            └── webapp
                └── WEB-INF
                    └── web.xml

BIZ будет зависеть отEJB это зависит от.API

Теперь это решит вашу непосредственную проблему, но я бы не советовал вам создавать эти фабрики, вы должны использоватьКДИ вместо этого, но этоЭто другая история.

@Federico That 'Что ты должен разделить? Или передвигаться. maba
Привет! Спасибо за Ваш ответ! Проблема в том, что, к сожалению, EJB зависит от BIZ .. Federico

Похожие вопросы