gpt4 book ai didi

java - JBoss 7.2 中的 JHipster 应用程序部署

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:21:44 25 4
gpt4 key购买 nike

我想在 JBoss AS 7.2.0 中使用 webapp 上下文部署我的 JHipster 应用程序。首先,我添加了一个 jboss-deployment-structure.xml 文件以允许部署并解决 JBoss 库和应用程序库之间的冲突:

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<deployment>
<dependencies>

<!-- Add some dependencies because of javaee.api exclusion -->
<module name="javax.xml.bind.api" />
<module name="javax.xml.ws.api" />
<module name="javax.jws.api" />
<module name="javax.annotation.api" />

</dependencies>

<exclude-subsystems>
<subsystem name="webservices" />
<subsystem name="jaxrs" />
<subsystem name="jpa" />
</exclude-subsystems>
<exclusions>
<module name="org.slf4j" />
<module name="org.slf4j.impl" />
<module name="org.slf4j.jcl-over-slf4j" />
<module name="org.apache.commons.logging" />
<module name="org.jboss.logging" />
<module name="org.apache.log4j" />

<module name="javaee.api" />

</exclusions>
</deployment>
</jboss-deployment-structure>

为了添加一个 webapp 上下文,我添加了一个 jboss-web.xml :

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
<context-root>myapp</context-root>
</jboss-web>

所以,我可以去 http://localhost:8080/myapp 查看主页面,但是 REST 请求失败了。请求被发送到 http://localhost:8080/app/rest... 而不是 http://localhost:8080/myapp/app/rest.. .(即使我尝试在 URL 中使用 webapp 上下文,也会发生 404 错误)

我尝试删除 jboss-web.xml 并部署一个 myapp.war 文件,现在请求已通过上下文路径完成 (http://localhost:8080/myapp/app/rest) 但总是出现 404 错误。我已将文件重命名为 ROOT.war,但行为是一样的 :(

我看到 webapp 上下文的问题已经解决,所以应该没问题吧? https://github.com/jhipster/generator-jhipster/issues/235当我部署相同的应用程序Tomcat时,没问题...

我认为我的问题与 servlet 注册字符串有关。例如,swagger-ui 的/api-docs 也不可用。

有什么想法吗?

最佳答案

此问题与用 / 映射的 Spring Dispatcher Servlet 相关联。 Tomcat 可以,但 JBoss AS 不行。所以我添加了一个带有 /* 的映射以允许在 JBoss AS 中部署。这个方法可以添加到 WebConfigurer 中:

public void onStartup(ServletContext servletContext) throws ServletException {
[...]
initDispatcherServlet(servletContext, disps);
[...]
}

/**
* Initializes Spring Dispatch Servlet to allow deployment in JBoss
*/
private void initDispatcherServlet(ServletContext servletContext, EnumSet<DispatcherType> disps) {


// Using listener to be able to get the Dispatcher Servlet not yet initialized
servletContext.addListener(new ServletContextListener() {

@Override
public void contextInitialized(ServletContextEvent event) {
try {
Map<String, ? extends ServletRegistration> servlets=null;
servlets = event.getServletContext().getServletRegistrations();
Set<String> keys = servlets.keySet();

log.debug("Registred servlets : "+keys);

ServletRegistration dspSrvlt = servlets.get("dispatcherServlet");
if(dspSrvlt != null) {
Collection<String> maps = dspSrvlt.getMappings();
log.debug("Dispatcher servlet mapping size : "+maps.toArray().length);
log.debug("Servlet dispatcher mapping : "+maps);
if( !maps.contains("/*") ) {
log.debug("Adding /* for Spring Dispatcher servlet");
servlets.get("dispatcherServlet").addMapping("/*");
}
} else {
log.warn("Unable to change the Servlet Request dispatcher mapping to allow deployment with JBoss");
}
} catch (Exception e) {
log.warn("Unable to change the Servlet Context to allow deployment with JBoss");
}

}

@Override
public void contextDestroyed(ServletContextEvent arg0) {
}
});

}

关于java - JBoss 7.2 中的 JHipster 应用程序部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28177098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com