Создание сервисов в Tapestry 5: ни один сервис не реализует интерфейс
Я разрабатываю свое первое приложение Tapestry с системой входа в систему, основанной на базе данных Hibernate.
На одной странице с объектом сеанса я хочу вызвать мой Authenticator
класс обслуживания, который также вводит сессию и делает некоторые вещи. Моя проблема в том, что я не могу запустить какие-либо сервисы, это очень расстраивает, несмотря на то, что я следую таким простым руководствам, как этот: http://code.google.com/p/shams/wiki/Service
В моем services
пакет, я получил Authenticator.java
а также AuthenticatorImpl.java
интерфейс и реализованный класс. в AppModule
класс, я звоню
binder.bind(Authenticator.class, AuthenticatorImpl.class);
И на моей странице 'ShowAllUsers' я добавляю свой сервисный объект Authenticator:
...
public class ShowAllUsers{
@Inject
private Session session;
@Inject
private Authenticator authenticator;
...
}
Но когда я загружаю страницу на свой сервер, я получаю следующую ошибку:
org.apache.tapestry5.ioc.internal.OperationException
Error obtaining injected value for field de.webtech2.pages.user.ShowAllUsers.authenticator: No service implements the interface de.webtech2.services.Authenticator.
trace:
- Creating instantiator for component class de.webtech2.pages.user.ShowAllUsers
- Running component class transformations on de.webtech2.pages.user.ShowAllUsers
- Injecting field de.webtech2.pages.user.ShowAllUsers.authenticator
Но мой AppModule успешно связывает класс с интерфейсом. В консоли сборки Maven я могу прочитать "Authenticator: DEFINED", и если я пытаюсь связать его в другом модуле, он жалуется, потому что он уже связан с AppMopule.
Почему гобелен не видит реализацию? Что я делаю неправильно?
2 ответа
Я не решил саму проблему, но нашел способ ее исправить. Как вы можете найти в Интернете, Tapestry допускает автоматическую перезагрузку классов. Страницы и компоненты работают нормально, сервисы имеют некоторые ограничения - вот где, похоже, возникают проблемы. Tomcat не связывает интерфейс с реализацией.
Исправлено: простая перезагрузка затмения решает эту проблему. Мех. (Это также исправляет ошибку "метод не найден", если вы добавили новый метод в существующую службу)
Кроме того, когда я выполняю mvn clean
все запутано много раз. Eclipse больше не может разрешать простейшие ссылки на классы и пакеты. Классы в одном и том же пакете больше не могут быть найдены, или ссылки на пакет javax.internet ведут в вечное ничто - тогда как все работало просто отлично минуту назад.
Fix:
Right-click eclipse project -> Properties -> Maven
Установите флажок "Разрешить зависимости от проектов Workspace" и нажмите " Применить". Если он уже отмечен, снимите флажок -> применить, затем еще раз проверьте -> применить. Затмение должно снова стать нормальным - до следующего раза...
Рад, что вы проверили вывод журнала запуска, это, безусловно, первая "проверка работоспособности" в направлении решения этой проблемы.
Я думаю, что у uklance правильная идея: сделать чистую сборку, убедиться, что у вас нет нескольких классов с именем Authenticator, плавающих вокруг... возможно, из сторонней библиотеки. У меня всегда возникают проблемы, когда я случайно импортирую не-Tapestry класс, который называется "Resource" или что-то в этом роде.