W multimodule spring project nie działa Autowire

W multimodule spring project nie działa Autowire
KB
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 13 lat
  • Postów:8
0

Poniższe dotyczy wielomodułowego projektu maven.
Mam projekt A a w nim modele, DAO i serwisy oraz ze 2 kontrolery do testowania. Wszystko działa dobrze jak działam w obrębie tego projektu tylko.
Projekt B jest drugim modułem. Chciałem w nim skorzystać z zasobów projektu A. W projekcie B uruchamiam serwis z projektu A, w którym mam zmienną typu DAO jako @Autowire. Okazuje się, że zmienna ta ma wartość null - tak jak by DAO nie zostało wcześniej utworzone i przesłane do kontrolera. Jeśli to samo robię w obrębie projektu A DAO nie jest null i wszystko działa poprawnie. Czy spotkaliście się z czymś takim?

Pozdrawiam

Krzysztof

0

A jak ją deklarujesz? Bo wygląda na to, że albo nie wczytujesz kontekstu z modułu A, albo też tworzysz ten obiekt samemu.

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

@kblaszke opisz swój problem dokładniej bo z tego co piszesz wynika trochę tak jakbyś ładował kontekst tylko dla jednego projektu, a potem korzystał z klas drugiego projektu. Jak nie załadujesz kontekstu to beany się nie zainicjalizują.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
KB
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 13 lat
  • Postów:8
0
wartek napisał(a)

A jak ją deklarujesz? Bo wygląda na to, że albo nie wczytujesz kontekstu z modułu A, albo też tworzysz ten obiekt samemu.

Chyba wybrnąłem z sytuacji.

  1. Dodałem Projekt A do buildpath projektu B
  2. W controllers.xml dodałem <context:component-scan na pakiety obiektu A (bez skanowania Controllerów
  3. W persistence.xml dodałem mapowania poszczególnych ORMów

Czy to poprawne rozwiązanie? Działać działa ale może właśnie robią coś nie tak jak się powinno...

@Shalom A Ty jak myślisz?

Pozdrawiam

Krzysiek

edytowany 1x, ostatnio: kblaszke
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

A to są dwa osobne projekty / komponenty, czy np. projekty typu "core" i "common" czyli takie gdzie jeden z projektów przechowuje klasy wspólne dla kilku osobnych aplikacji / komponentów?
Bo jeśli to są dwie różne aplikacje / komponenty to zrobiłeś to źle i absolutnie tak ci nie wolno. Takie powiązania musisz skądś wyczarować (np. z jndi).
Jeśli to opcja nr 2 to możesz od biedy zrobić tak jak napisałeś.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
KB
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 13 lat
  • Postów:8
0
Shalom napisał(a)

A to są dwa osobne projekty / komponenty, czy np. projekty typu "core" i "common" czyli takie gdzie jeden z projektów przechowuje klasy wspólne dla kilku osobnych aplikacji / komponentów?
Bo jeśli to są dwie różne aplikacje / komponenty to zrobiłeś to źle i absolutnie tak ci nie wolno. Takie powiązania musisz skądś wyczarować (np. z jndi).
Jeśli to opcja nr 2 to możesz od biedy zrobić tak jak napisałeś.

To miała być raczej ta druga opcja. Zrobiłem projekt wielomodułowy w maven. W jednym module są klasy ORM, DAO, i serwisy. W drugim module kontrolery platformy administracyjnej. W trzecim module kontrolery właściwej aplikacji. Po między modułami ustawiłem zależności w pom.xml. Czy jest jeszcze jakiś inny/lepszy sposób na osiągnięcie zamierzonego efektu? Siedzę już nad tym dwa dni i nie mogę nic sensownego wygooglać. JNDI? Myślałem, że to tylko do trzymania namiarów na bazę danych na zewnątrz aplikacji. Chyba muszę się tym bardziej zainteresować... :)

K.

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

Jeśli to jest ta druga opcja i w tym projekcie "common" też masz application context to musisz ten kontekst załadować (możesz go na przykład załączyć do application context aplikacji)


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
KB
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 13 lat
  • Postów:8
0
Shalom napisał(a)

Jeśli to jest ta druga opcja i w tym projekcie "common" też masz application context to musisz ten kontekst załadować (możesz go na przykład załączyć do application context aplikacji)

Jakoś podać mu ścieżkę do kontekstu drugiego modułu w parametrach DispatcherServlet'a?

n.p.:
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/app/servlet-context.xml ../../../ModulA/src/main/webapp/WEB-INF/spring/app/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 1x, ostatnio: Shalom
KB
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 13 lat
  • Postów:8
0
Shalom napisał(a)

http://lmgtfy.com/?q=spring+splitting+applicationcontext+into+multiple+files

Ok! Gdybym znalazł coś sensownego googlając to bym głowy nie zawracał. Chodzi o to, że wszędzie piszą jak wczytać kilka kontekstów (kawałków kontekstu) ale tego samego projektu... To jest dla mnie jasne. Jednak gdy mam dwa osobne projekty, znaczy w osobnych katalogach to sprawa się komplikuje... Czegoś tutaj nie łapię...

Krzysiek

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.