Создание сервисов в 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" или что-то в этом роде.

Другие вопросы по тегам