我正在創建一個模塊化的Maven項目。項目部署在Glassfish 3.1上。項目(web應用)包括三個模塊:使用Maven,如何根據J2EE/JPA JAR正確部署WAR?
- 「普通」,由核心功能(持久性,認證邏輯等),內置於JAR
- 「用戶」,這取決於普通,內置於一個WAR
- 「管理」,還取決於通用和通用爭戰
兩個WAR使用重型註釋(@實體,@注入,@EJB,...)班。目前常見的是JAR,但這不是必需的。問題是:如何正確部署這樣的項目?
通過我目前(谷歌和計算器的影響)的知識:
常見不可能是一個JAR,因爲.jar文件放入WEB-INF \ lib目錄中的JAR。這使得部署時初始化成爲可能,因爲Glassfish期望.class併產生「Unsatisfied dependencies」錯誤,導致部署失敗。
通用不能一戰,因爲生成後WAR覆蓋複製ocurrs - 導致依賴於自身建設......
編輯
麥克甲板意見建議設置是好的,我認爲提供一個完整的錯誤信息將是有用的:
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
我圍住相關類(修剪了一下,即不get/set方法,進口等)
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;
}
}
常見的可以並且應該是JAR。我不確定你的部署失敗的原因,但是WEB-INF/lib絕對是爲了容納WAR的JAR文件依賴關係。這聽起來像你有正確的基本設置,你真正需要做的是解決部署錯誤。 – 2011-05-27 22:22:36