Я создаю модульный проект Maven. Проект развернут на Glassfish 3.1. Проект (webapp) состоит из трех модулей:
- «Общий», состоящий из основных функций (персистентность, логика аутентификации и т. Д.), Встроенный в JAR
- «Пользователь», в зависимости от общего, встроен в WAR
- «Администратор», также в зависимости от Common и WARred
В обеих WAR используются аннотированные классы (@Entity, @Inject, @EJB, ...) из Common. В настоящее время Common - это JAR, но это не требование. Вопрос: Как правильно развернуть такой проект?
Насколько я знаю (под влиянием Google и stackoverflow):
Common не может быть JAR, потому что файл .jar помещается в каталог WEB-INF \ lib внутри JAR. Это делает инициализацию во время развертывания, поскольку Glassfish ожидает .classes и выдает ошибку «Неудовлетворенные зависимости», что приводит к неудачному развертыванию.
Общим не может быть WAR, потому что при копировании с наложением WAR происходит после сборки - в результате сборка зависит от самой себя ...
EDIT
Поскольку комментарий Майка Декса говорит о том, что настройка в порядке, я полагаю, что было бы полезно предоставить полное сообщение об ошибке:
Deployment Error for module: User: Error occurred during deployment:
Exception while loading the app : WELD-001408 Unsatisfied dependencies
for type [Authentication] with qualifiers [@Default] at injection point
[[field] @Inject xxx.xxx.servlets.LoginFilter.authentication].
Что бы это значило? В чем может быть причина?
EDIT2
Я включаю соответствующие классы (немного обрезан, т.е. не получаю / не устанавливаю методы, импортирую и т. Д.)
public class LoginFilter implements Filter {
@Inject
Authentication authentication;
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
LoginBean login = (LoginBean) httpRequest.getSession().getAttribute("loginBean");
if((login == null || !login.isAuthenticated())) {
HttpServletResponse httpResponse = (HttpServletResponse) response;
String requestUrl = httpRequest.getRequestURI().toString();
authentication.setNavigateAfterLogin(requestUrl);
httpResponse.sendRedirect("./../login.html");
}
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig fConfig) throws ServletException {}
@Override
public void destroy() {}
}
и
@SessionScoped
public class Authentication implements Serializable {
@Inject
private UserDatabaseController userDb;
private ShopUser user;
private String navigateAfterLogin;
private String login;
private String password;
public boolean doLogin(String username, String password) {
List<ShopUser> users = userDb.getUsers();
for(ShopUser shopUser : users) {
if(shopUser.getLogin().equals(username) && shopUser.getPassword().equals(password)) {
setUser(shopUser);
return true;
}
}
return false;
}
public void doLogout() {
setUser(null);
}
public boolean isAuthenticated() {
return getUser() != null;
}
}