Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Vaadin 7 and Spring injection - не работает 100% / 16 сообщений из 16, страница 1 из 1
08.08.2014, 15:13
    #38716081
_webdev_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Vaadin 7 and Spring injection - не работает 100%
Здравствуйте, я интегрировал Spring and Vaadin 7, но @Inject у меня работает только в главном классе AdminPanelMain


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
@Component
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@PreserveOnRefresh
@Slf4j
public class AdminPanelMain extends UI {

    @Inject //It works
    private UserService userService;

    private static final long serialVersionUID = 1L;

//  @Inject
    private Panel tagsPanel = new TagsPanel();





UserService Service - просто тестовый класс.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
@Service
@Slf4j
public class UserService {

//  @Autowired
//  private UserRepository userRepository;

    public void saveUser() {

//      log.info("count: {}", userRepository.count());
        log.warn("saved");
    }
}





TagsPanel - хочу и здесь иметь сервис, но он нуль, так же как и в других похожих компонентах.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public class TagsPanel extends Panel implements Property.ValueChangeListener {

    private static final long serialVersionUID = 1L;

    @Autowired //null
    private UserService userService;


    public TagsPanel() {

        initLayout();

    }
.......
}




ApplicationInitializer

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
public class ApplicationInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {

        AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();

        rootContext.register(ApplicationConfiguration.class);
        registerSpringContextLoaderListener(servletContext, rootContext);
        registerVaadinServlet(servletContext, rootContext);
    }

    private void registerVaadinServlet(ServletContext servletContext, AnnotationConfigWebApplicationContext rootContext) {

        VaadinServlet vaadinServlet = new VaadinServlet();
        ServletRegistration.Dynamic vaadinServletRegistration = servletContext.addServlet("vaadinServlet",
                vaadinServlet);
        vaadinServletRegistration.setInitParameter("ui", AdminPanelMain.class.getName());
        vaadinServletRegistration.setInitParameter("UIProvider", SpringUIProvider.class.getName());
        vaadinServletRegistration.setLoadOnStartup(1);
        vaadinServletRegistration.addMapping("/*");

    }

    private void registerSpringContextLoaderListener(ServletContext servletContext,
            AnnotationConfigWebApplicationContext rootContext) {
        servletContext.addListener(new ContextLoaderListener(rootContext));
        servletContext.addListener(new ContextCleanupListener());
        servletContext.addListener(new RequestContextListener());
    }
}




Когда я создаю объект TagsPanel, то объект UserService=null - почему?

Спасибо за помощь.
...
Рейтинг: 0 / 0
08.08.2014, 15:19
    #38716088
DDiver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Vaadin 7 and Spring injection - не работает 100%
_webdev_,

Простите за вопрос, а как вы создаёте TagsPanel?
...
Рейтинг: 0 / 0
08.08.2014, 15:21
    #38716089
_webdev_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Vaadin 7 and Spring injection - не работает 100%
В первом куске кода

Код: java
1.
private Panel tagsPanel = new TagsPanel();
...
Рейтинг: 0 / 0
08.08.2014, 15:22
    #38716090
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Vaadin 7 and Spring injection - не работает 100%
DDiver_webdev_,

Простите за вопрос, а как вы создаёте TagsPanel?
Код: java
1.
private Panel tagsPanel = new TagsPanel();
...
Рейтинг: 0 / 0
08.08.2014, 15:23
    #38716092
DDiver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Vaadin 7 and Spring injection - не работает 100%
_webdev_,

В таком случае, спринг понятия не имеет что вам туда нужно что-то инжектить.
Инжект будет только в тех объектах, которые создает контекст спринга, через оператор NEW никакой магии не будет.
...
Рейтинг: 0 / 0
08.08.2014, 15:27
    #38716101
_webdev_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Vaadin 7 and Spring injection - не работает 100%
Если же например делать Вот так


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
@Component("TagsPanel")
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class TagsPanel extends Panel implements Property.ValueChangeListener {

...............

}


@Component("UserPanel")
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class UserPanel extends Panel{

................

}



То получим

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
13:25:51,286 SEVERE [com.vaadin.server.DefaultErrorHandler] (default task-3) : org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'adminPanelMain': Injection of autowired dependencies failed; ne
sted exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.vaadin.ui.Panel com.jdev.blog.admin.AdminPanelMain.addUserPanel; nested exception is org.springframework.beans.factor
y.NoUniqueBeanDefinitionException: No qualifying bean of type [com.vaadin.ui.Panel] is defined: expected single matching bean but found 2: TagsPanel,UserPanel
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:292) [spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185) [spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537) [spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) [spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) [spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) [spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:296) [spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:985) [spring-context-4.0.6.RELEASE.jar:4.0.6.RELEASE]
	at com.jdev.blog.admin.SpringUIProvider.createInstance(SpringUIProvider.java:25) [classes:]
	at com.vaadin.server.communication.UIInitHandler.getBrowserDetailsUI(UIInitHandler.java:199) [vaadin-server-7.2.5.jar:7.2.5]
	at com.vaadin.server.communication.UIInitHandler.synchronizedHandleRequest(UIInitHandler.java:74) [vaadin-server-7.2.5.jar:7.2.5]
	at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:41) [vaadin-server-7.2.5.jar:7.2.5]
	at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1408) [vaadin-server-7.2.5.jar:7.2.5]
	at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:237) [vaadin-server-7.2.5.jar:7.2.5]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) [jboss-servlet-api_3.1_spec-1.0.0.Final.jar:1.0.0.Final]
	at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
	at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:61) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
	at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
	at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) [undertow-core-1.0.15.Final.jar:1.0.15.Final]
	at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:113) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
	at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:56) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) [undertow-core-1.0.15.Final.jar:1.0.15.Final]
	at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:45) [undertow-core-1.0.15.Final.jar:1.0.15.Final]
	at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:61) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
	at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:58) [undertow-core-1.0.15.Final.jar:1.0.15.Final]
	at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:70) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
	at io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76) [undertow-core-1.0.15.Final.jar:1.0.15.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) [undertow-core-1.0.15.Final.jar:1.0.15.Final]
	at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) [undertow-core-1.0.15.Final.jar:1.0.15.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) [undertow-core-1.0.15.Final.jar:1.0.15.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:240) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:227) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:73) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:146) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
	at io.undertow.server.Connectors.executeRootHandler(Connectors.java:177) [undertow-core-1.0.15.Final.jar:1.0.15.Final]
	at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:727) [undertow-core-1.0.15.Final.jar:1.0.15.Final]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_51]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_51]
	at java.lang.Thread.run(Thread.java:744) [rt.jar:1.7.0_51]
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.vaadin.ui.Panel com.jdev.blog.admin.AdminPanelMain.addUserPanel; nested exception is org.springframework.beans.factory.NoUni
queBeanDefinitionException: No qualifying bean of type [com.vaadin.ui.Panel] is defined: expected single matching bean but found 2: TagsPanel,UserPanel
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:508) [spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) [spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289) [spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
	... 40 more
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [com.vaadin.ui.Panel] is defined: expected single matching bean but found 2: TagsPanel,UserPanel
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:970) [spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:858) [spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:480) [spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
	... 42 more



Явное именование Компонентов не помогает, Спринг берет за название Компонент от какого наследуемся...
...
Рейтинг: 0 / 0
08.08.2014, 15:28
    #38716107
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Vaadin 7 and Spring injection - не работает 100%
_webdev_,

Тип поля поменяй с Panel на TagsPanel.
...
Рейтинг: 0 / 0
08.08.2014, 15:28
    #38716108
_webdev_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Vaadin 7 and Spring injection - не работает 100%
Забыл добавить,

в главном классе

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
@Component
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@PreserveOnRefresh
@Slf4j
public class AdminPanelMain extends UI {
	
	@Inject
	private UserService userService;

	private static final long serialVersionUID = 1L;

	@Inject
	private Panel addUserPanel;
	
	@Inject
	private Panel tagsPanel;

.....
...
Рейтинг: 0 / 0
08.08.2014, 15:32
    #38716113
_webdev_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Vaadin 7 and Spring injection - не работает 100%
Blazkowicz_webdev_,

Тип поля поменяй с Panel на TagsPanel. - 5 БАЛОВ!!!

Я дурко! )))

Вопрос решен, а я то вижу, что ругается, но не на тот Panel думал, под носом не видел. )))
...
Рейтинг: 0 / 0
08.08.2014, 15:49
    #38716144
DDiver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Vaadin 7 and Spring injection - не работает 100%
А если попробовать вот так
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
@Component
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@PreserveOnRefresh
@Slf4j
public class AdminPanelMain extends UI {

.....
	@Inject
        @Qualifier("UserPanel")
	private Panel addUserPanel;
	
	@Inject
        @Qualifier("TagsPanel")
	private Panel tagsPanel;

.....


должно работать. Это если не хочется завязываться на конкретный класс, а использовать интерфейс.
...
Рейтинг: 0 / 0
08.08.2014, 15:53
    #38716153
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Vaadin 7 and Spring injection - не работает 100%
DDiverЭто если не хочется завязываться на конкретный класс, а использовать интерфейс.
Да, так иногда бывает лучше для абстракции. Но, по-моему, не в данном случае.
...
Рейтинг: 0 / 0
08.08.2014, 16:15
    #38716183
_webdev_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Vaadin 7 and Spring injection - не работает 100%
DDiverА если попробовать вот так - А можно поинтересоваться тогда почему у меня вот таким макаром не работало?

Код: java
1.
@Component("TagsPanel")
...
Рейтинг: 0 / 0
08.08.2014, 16:17
    #38716187
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Vaadin 7 and Spring injection - не работает 100%
_webdev_DDiverА если попробовать вот так - А можно поинтересоваться тогда почему у меня вот таким макаром не работало?

Код: java
1.
@Component("TagsPanel")


Наверное потому что это аннотация для класса-компоненты, а не для инъекции в поле.
...
Рейтинг: 0 / 0
08.08.2014, 16:27
    #38716201
DDiver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Vaadin 7 and Spring injection - не работает 100%
_webdev_,

Потому что это аналог вот такого
Код: xml
1.
2.
3.
<bean name="TagsPanel" class="x.y.z">
…
</bean>


а инжект идёт по типу, о чём собственно вам и кричал спринг в стэктрейсе.
@Qualifier явно указывает на имя бина который нужно инжектить
вроде так.
Because autowiring by type may lead to multiple candidates, it is often necessary to have more control over the selection process. One way to accomplish this is with Spring’s @Qualifier annotation.
For a fallback match, the bean name is considered a default qualifier value.
...
Рейтинг: 0 / 0
08.08.2014, 16:31
    #38716211
_webdev_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Vaadin 7 and Spring injection - не работает 100%
BlazkowiczНаверное потому что это аннотация для класса-компоненты, а не для инъекции в поле. Даже затрудняюсь какой способ выбрать, но наверное просто при построении UI будет лучше различать конкретные панели, а не просто Panel.

Если можно в догонку спрошу, а то сейчас гуглю на эту тему.

У меня отдельный проект в котором я запихнул все entyties и Repositories (Spring Data JPA)... Они у меня отдельной библиотекой как депенденси подключены в проекте.
Сейчас нужно как-то подсунуть Спрингу, чтоб он автоматически просканировал репозитории из библиотеки.
Какое лучшее решение? Или всё-таки нужно отдельно репозитории для каждого проекта создавать?


Репозитории и сущности закинул в отдельный проект, так как у меня 2 проекта пользуется ими, я разбил на серверную и клиентскую часть свой проект.

Спасибо.
...
Рейтинг: 0 / 0
08.08.2014, 16:32
    #38716212
_webdev_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Vaadin 7 and Spring injection - не работает 100%
DDiver_webdev_,

Потому что это аналог вот такого
Код: xml
1.
2.
3.
<bean name="TagsPanel" class="x.y.z">
…
</bean>



а инжект идёт по типу, о чём собственно вам и кричал спринг в стэктрейсе.
@Qualifier явно указывает на имя бина который нужно инжектить
вроде так.
Because autowiring by type may lead to multiple candidates, it is often necessary to have more control over the selection process. One way to accomplish this is with Spring’s @Qualifier annotation.
For a fallback match, the bean name is considered a default qualifier value. Спасибо - теперь понятно, а я вот пару часов с "бубном" танцевал...
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Vaadin 7 and Spring injection - не работает 100% / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]