Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';t在JBoss 6.4 EAP中部署Spring Boot EAR_Java_Spring_Jboss_Spring Boot_Servlet 3.0 - Fatal编程技术网

Java Can';t在JBoss 6.4 EAP中部署Spring Boot EAR

Java Can';t在JBoss 6.4 EAP中部署Spring Boot EAR,java,spring,jboss,spring-boot,servlet-3.0,Java,Spring,Jboss,Spring Boot,Servlet 3.0,编辑 好的,看来没有检测到SpringBootServletializer,因为它在耳朵的罐子里,而不是在战争中。我所做的是制作一个新模块,并将其包含在我的WAR中。它包含一个带有服务文件夹的META-INF目录。该服务文件夹有一个文件(javax.servlet.ServletContainerInitializer),其内容为org.springframework.web.SpringServletContainerInitializer)。然后尝试部署战争,但失败如下: Caused by

编辑

好的,看来没有检测到SpringBootServletializer,因为它在耳朵的罐子里,而不是在战争中。我所做的是制作一个新模块,并将其包含在我的WAR中。它包含一个带有服务文件夹的META-INF目录。该服务文件夹有一个文件(
javax.servlet.ServletContainerInitializer
),其内容为
org.springframework.web.SpringServletContainerInitializer
)。然后尝试部署战争,但失败如下:

Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: JBAS018104: Deployment error processing SCI for jar: test-1.0.0-SNAPSHOT.jar
        at org.jboss.as.web.deployment.ServletContainerInitializerDeploymentProcessor.loadSci(ServletContainerInitializerDeploymentProcessor.java:202)
        ... 7 more
Caused by: java.lang.ClassCastException: org.springframework.web.SpringServletContainerInitializer cannot be cast to javax.servlet.ServletContainerInitializer
        at org.jboss.as.web.deployment.ServletContainerInitializerDeploymentProcessor.loadSci(ServletContainerInitializerDeploymentProcessor.java:194)
        ... 7 more
同样,Servlet API似乎与另一个API冲突——但从我的判断来看,类路径上只有一个API(我甚至按照本测试的规定确定了它的范围)

原创

目前我在JBoss6.4EAP中部署SpringBoot(1.3.2.RELEASE)EAR时遇到了一些问题。EAR文件只是简单地将一个skinny WAR和所有JAR包装在一个/lib文件夹中

我以前做过部署WAR文件所需的更改,但不幸的是,我们遇到了部署必须是EAR的要求

作为战争部署

为了将应用程序部署为WAR,我更改了以下内容:

Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: JBAS018104: Deployment error processing SCI for jar: test-1.0.0-SNAPSHOT.jar
        at org.jboss.as.web.deployment.ServletContainerInitializerDeploymentProcessor.loadSci(ServletContainerInitializerDeploymentProcessor.java:202)
        ... 7 more
Caused by: java.lang.ClassCastException: org.springframework.web.SpringServletContainerInitializer cannot be cast to javax.servlet.ServletContainerInitializer
        at org.jboss.as.web.deployment.ServletContainerInitializerDeploymentProcessor.loadSci(ServletContainerInitializerDeploymentProcessor.java:194)
        ... 7 more
pom.xml

现在,如果我想转到Servlet2.5,还有一些额外的配置,但我不想这样做

尝试部署此项将导致以下异常:

    10:29:40,586 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/company-api-entity]] (ServerService Thread Pool -- 56) JBWEB000289: Servlet appServlet threw load() exception: java.lang.ClassCastException: org.springframework.web.servlet.DispatcherServlet cannot be cast to javax.servlet.Servlet
            at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1154) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1]
            at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1100) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1]
            at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3593) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1]
            at org.apache.catalina.core.StandardContext.start(StandardContext.java:3802) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1]
            at org.jboss.as.web.deployment.WebDeploymentService.doStart(WebDeploymentService.java:163) [jboss-as-web-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]
            at org.jboss.as.web.deployment.WebDeploymentService.access$000(WebDeploymentService.java:61) [jboss-as-web-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]
            at org.jboss.as.web.deployment.WebDeploymentService$1.run(WebDeploymentService.java:96) [jboss-as-web-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]
            at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [rt.jar:1.8.0_45]
            at java.util.concurrent.FutureTask.run(FutureTask.java:266) [rt.jar:1.8.0_45]
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_45]
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_45]
            at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_45]
            at org.jboss.threads.JBossThread.run(JBossThread.java:122)
这似乎是加载的servlet版本不匹配,但我似乎无法验证是否不匹配(或排除它)。我尝试将作用域设置为提供(因此JBoss版本将接管),但这会导致以下错误:

11:18:47,141 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/company-api-entity]] (ServerService Thread Pool -- 52) JBWEB000289: Servlet appServlet threw load() exception: java.util.MissingResourceException: Can't find bundle for base name javax.servlet.LocalStrings, locale en_IE
        at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1564) [rt.jar:1.8.0_45]
        at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1387) [rt.jar:1.8.0_45]
        at java.util.ResourceBundle.getBundle(ResourceBundle.java:773) [rt.jar:1.8.0_45]
        at javax.servlet.GenericServlet.<clinit>(GenericServlet.java:95) [jboss-servlet-api_3.0_spec-1.0.2.Final-redhat-2.jar:1.0.2.Final-redhat-2]
11:18:47141错误[org.apache.catalina.core.ContainerBase.[jboss.web].[default host].[company api entity]](ServerService线程池--52)JBWEB000289:Servlet-appServlet-Thread-load()异常:java.util.MissingResourceException:找不到基名称javax.Servlet.LocalString的捆绑包,locale en_IE
位于java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1564)[rt.jar:1.8.0\u 45]
在java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1387)[rt.jar:1.8.0\u 45]
在java.util.ResourceBundle.getBundle(ResourceBundle.java:773)[rt.jar:1.8.0\u 45]
位于javax.servlet.GenericServlet.(GenericServlet.java:95)[jboss-servlet-api_3.0_spec-1.0.2.Final-redhat-2.jar:1.0.2.Final-redhat-2]
显然,它使用的是JBoss3.0Servlet规范,但实际的Servlet3.0JAR似乎缺失了

有什么我遗漏的吗?战争真的需要web.xml吗,还是有其他方法?我所尝试的可能吗


任何帮助都将不胜感激。

修复了此问题。从WAR部署开始,我增加了一个EAR模块。我不应该用紧身衣,而是把所有的罐子都留在战争中。这允许Spring正确引导Spring引导servlet

它具有以下配置:

<build>
    <finalName>my-application</finalName>
    <plugins>
        <plugin>
            <artifactId>maven-ear-plugin</artifactId>
            <version>2.10.1</version>
            <configuration>
                <modules>
                    <webModule>
                        <groupId>com.test.app</groupId>
                        <artifactId>my-application</artifactId>
                        <bundleFileName>my-application.war</bundleFileName>
                        <context-root>/my-app</context-root>
                    </webModule>
                </modules>
            </configuration>
        </plugin>
    </plugins>
</build>
这正确地排除了
javaee.api
模块和
jpa
子系统

在此之后,EAR将正确部署到JBoss

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>com.test.app.Application</param-value>
    </context-param>

    <servlet>
        <servlet-name>appServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextAttribute</param-name>
            <param-value>org.springframework.web.context.WebApplicationContext.ROOT</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>appServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>
    10:29:40,586 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/company-api-entity]] (ServerService Thread Pool -- 56) JBWEB000289: Servlet appServlet threw load() exception: java.lang.ClassCastException: org.springframework.web.servlet.DispatcherServlet cannot be cast to javax.servlet.Servlet
            at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1154) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1]
            at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1100) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1]
            at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3593) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1]
            at org.apache.catalina.core.StandardContext.start(StandardContext.java:3802) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1]
            at org.jboss.as.web.deployment.WebDeploymentService.doStart(WebDeploymentService.java:163) [jboss-as-web-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]
            at org.jboss.as.web.deployment.WebDeploymentService.access$000(WebDeploymentService.java:61) [jboss-as-web-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]
            at org.jboss.as.web.deployment.WebDeploymentService$1.run(WebDeploymentService.java:96) [jboss-as-web-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]
            at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [rt.jar:1.8.0_45]
            at java.util.concurrent.FutureTask.run(FutureTask.java:266) [rt.jar:1.8.0_45]
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_45]
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_45]
            at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_45]
            at org.jboss.threads.JBossThread.run(JBossThread.java:122)
11:18:47,141 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/company-api-entity]] (ServerService Thread Pool -- 52) JBWEB000289: Servlet appServlet threw load() exception: java.util.MissingResourceException: Can't find bundle for base name javax.servlet.LocalStrings, locale en_IE
        at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1564) [rt.jar:1.8.0_45]
        at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1387) [rt.jar:1.8.0_45]
        at java.util.ResourceBundle.getBundle(ResourceBundle.java:773) [rt.jar:1.8.0_45]
        at javax.servlet.GenericServlet.<clinit>(GenericServlet.java:95) [jboss-servlet-api_3.0_spec-1.0.2.Final-redhat-2.jar:1.0.2.Final-redhat-2]
<build>
    <finalName>my-application</finalName>
    <plugins>
        <plugin>
            <artifactId>maven-ear-plugin</artifactId>
            <version>2.10.1</version>
            <configuration>
                <modules>
                    <webModule>
                        <groupId>com.test.app</groupId>
                        <artifactId>my-application</artifactId>
                        <bundleFileName>my-application.war</bundleFileName>
                        <context-root>/my-app</context-root>
                    </webModule>
                </modules>
            </configuration>
        </plugin>
    </plugins>
</build>
<?xml version="1.0"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
    <sub-deployment name="my-application.war">
        <exclude-subsystems>
            <subsystem name="jpa"/>
        </exclude-subsystems>
        <exclusions>
            <module name="javaee.api"/>
        </exclusions>
    </sub-deployment>
</jboss-deployment-structure>