将Spring Web应用程序部署到JBoss WebApplicationContext异常 [英] Deploying Spring Web Applicaiton To JBoss WebApplicationContext Exceptions

查看:231
本文介绍了将Spring Web应用程序部署到JBoss WebApplicationContext异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

将Spring Web Application部署到JBoss 7.1.1时,会出现以下异常:

When deploying a Spring Web Application to JBoss 7.1.1, gives the following Exception:

12:26:58,053 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/i]] (MSC service thread 1-3) Exception sending context initialized event to listener instance of class com.listener.IListener: java.lang.IllegalStateException: No WebApplicationContext found: no ContextLoaderListener registered?
at org.springframework.web.context.support.WebApplicationContextUtils.getRequiredWebApplicationContext(WebApplicationContextUtils.java:84) [spring-web-3.0.6.RELEASE.jar:3.0.6.RELEASE]
at com.listener.IListener.contextInitialized(IListener.java:28) [classes:]
at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:3392) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardContext.start(StandardContext.java:3850) [jbossweb-7.0.13.Final.jar:]
at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:90) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [rt.jar:1.6.0_26]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [rt.jar:1.6.0_26]
at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_26]

12:26:58,115 ERROR [org.apache.catalina.core.StandardContext] (MSC service thread 1-3) Error listenerStart
12:26:58,115 ERROR [org.apache.catalina.core.StandardContext] (MSC service thread 1-3) Context [/i] startup failed due to previous errors
12:26:58,131 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-3) MSC00001: Failed to start service jboss.web.deployment.default-host./i: org.jboss.msc.service.StartException in service jboss.web.deployment.default-host./i: JBAS018040: Failed to start context
at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:95)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [rt.jar:1.6.0_26]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [rt.jar:1.6.0_26]
at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_26]

12:26:58,146 INFO  [org.jboss.as] (MSC service thread 1-7) JBAS015951: Admin console listening on http://127.0.0.1:9990
12:26:58,146 ERROR [org.jboss.as] (MSC service thread 1-7) JBAS015875: JBoss AS 7.1.1.Final "Brontes" started (with errors) in 4883ms - Started 225 of 304 services (2 services failed or missing dependencies, 76 services are passive or on-demand)
12:26:58,365 INFO  [org.jboss.as.server] (DeploymentScanner-threads - 2) JBAS015870: Deploy of deployment "webchannel.war" was rolled back with failure message {"JBAS014671: Failed services" => {"jboss.web.deployment.default-host./i" => "org.jboss.msc.service.StartException in service     jboss.web.deployment.default-host./i: JBAS018040: Failed to start context"}}
12:26:58,521 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-3) JBAS015877: Stopped deployment webchannel.war in 161ms
 12:26:58,521 INFO  [org.jboss.as.controller] (DeploymentScanner-threads - 2) JBAS014774: Service status report
JBAS014777:   Services which failed to start:      service jboss.web.deployment.default-host./i: org.jboss.msc.service.StartException in service jboss.web.deployment.default-host./i: JBAS018040: Failed to start context

   12:26:58,536 ERROR [org.jboss.as.server.deployment.scanner] (DeploymentScanner-threads - 1) {"JBAS014653: Composite operation failed and was rolled back. Steps that failed:" => {"Operation step-2" => {"JBAS014671: Failed services" => {"jboss.web.deployment.default-host./i" => "org.jboss.msc.service.StartException in service jboss.web.deployment.default-host./i: JBAS018040: Failed to start context"}}}}

我有一个称为IListener的ServletContextListener.当我尝试访问WebApplicationContext时,收到上述异常.但是,这在TomEE中有效.

I have a ServletContextListener called IListener. When I try to access the WebApplicationContext I receive the above Exception. However, this works in TomEE.

下面是代码:

public class IListener implements ServletContextListener {

public IListener() {

}

public void contextInitialized(ServletContextEvent event) {
    ServletContext context = event.getServletContext();
    WebApplicationContext webApplicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(context);
    }

public void contextDestroyed(ServletContextEvent event) {

}
  }

web.xml

<?xml version="1.0" encoding="UTF-8"?>

http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd" 版本="2.5">

http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd" version="2.5">

     <display-name>JEE WebApp</display-name>

     <context-param>
        <!-- Specifies the list of Spring Configuration files in comma separated format.-->
        <param-name>contextConfigLocation</param-name>
        <param-value>
        /WEB-INF/spring/services.xml</param-value>
     </context-param>

     <listener>
        <!-- Loads your Configuration Files-->
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        <listener-class>com.listener.IListener</listener-class>
     </listener>

     <servlet>
        <servlet-name>i</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
     </servlet>

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

     <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
     </welcome-file-list>    

Java版本是1.6,Spring版本是3.0.6.RELEASE.

Java version is 1.6 and Spring version 3.0.6.RELEASE.

我不确定该怎么办.

推荐答案

通常,Spring的ContextLoaderListener很不错.如果您没有任何特定要求,请使用该要求.总之,它应该看起来像这样:

Usually, the ContextLoaderListener from Spring is good to go. If you don't have any specific requirements, just use that one. All-in-all, it should look like this:

 <listener>
    <!-- Loads your Configuration Files-->
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>

如果需要使用Spring上下文的侦听器,则可以考虑扩展此类.确保contextInitialized()方法首先调用super实现(以便它可以为您初始化Spring上下文).之后,它将通过(WebApplicationContext) servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE)可用.但是,您的contextDestroyed()方法应该首先执行自己的逻辑,最后调用其超级实现.

If you need to have a listener that uses the Spring context, you could consider extending this class. Make sure that the contextInitialized() method calls the super implementation first (so that it can initialize the Spring context for you). Afterwards, it will be available through (WebApplicationContext) servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE). Your contextDestroyed() method, however, should first do its own logic and finally call its super implementation.

但是请注意,这不是关注点分离" 观点.

Note, however, that this is not a very clean solution from the "seperation of concerns" point of view.

如果可能的话,我的建议是使用Spring过滤器,侦听器或

My recommendation would be, if possible, to use Spring filters, listeners or Interceptors. They are autowired automatically by Spring and you can use the full Spring power inside them.

这篇关于将Spring Web应用程序部署到JBoss WebApplicationContext异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆