Error while deploying and running spring app in RAD 8 when selecting Run server with resources within workspace

13,967

This is a bug in the deployment mechanism of the RAD with maven projects using Spring in versions >= 3.2.0 and is documented in this bugreport: https://jira.springsource.org/browse/SPR-10494

There are two possible ways of resolving your issue:

  1. Use a Spring version < 3.2, e.g. 3.1.4
  2. If you depend on Spring 3.2, you can simply copy the spring-web dependency into the temp folder whre your workspace copies your project before actually deploying it to websphere. It can be found under "YOURWORKSPACE.metadata.plugins\org.eclipse.wst.server.core\tmpX*\lib" (each server in your servers view gets its own temp folder, so if you just have one server, the folder will be tmp0

The second option is more of a workaround, which is only required for deployments directly from within the IDE. If you export your web project as a .war file and deploy it manually to Websphere it will just work.

There exists another workaround, that I only read when investigating the problem myself, but didn't try out myself and can't find the link either, so handle with care. According to that you can package your actual source into a new project and including that jar in your web project with the required dependencies

edit: We tried out Spring 4.0.0 and the bug was gone, so this might be the best solution if you are not stuck with a lower Spring version.

Share:
13,967
user2442578
Author by

user2442578

Updated on June 04, 2022

Comments

  • user2442578
    user2442578 almost 2 years

    My application has four small projects:

    • build-project - Has only the root POM
    • ear-module - This is the application ear project which contains a web project
    • web-project - This is web app
    • utility-project - Web project uses this as dependency and this jar is included as jar No EJBs.

    I am using RAD 8, Deployment works correctly when I select to run the application with the Publishing settings for Websphere "Run server with resources on Server" in RAD8.

    However when I try do the same with "`Run server with resources within the workspace" and open the application in my Browser it fails with this error message:

    [6/1/13 1:44:04:678 EDT] 0000001c annotations   W com.ibm.ws.amm.scan.context.ScannerContextImpl getInputDataForClass Failed to open resource [ org/springframework/web/context/ContextLoaderListener.class ] from module [ abc-web.war ]
    [6/1/13 1:44:04:678 EDT] 0000001c annotations   W com.ibm.ws.amm.scan.context.ScannerContextImpl getInputDataForClass   Class loader [ org.eclipse.jst.j2ee.commonarchivecore.internal.util.WarFileDynamicClassLoader@64662b13 ]
    [6/1/13 1:44:04:678 EDT] 0000001c annotations   W com.ibm.ws.amm.scan.context.ScannerContextImpl getInputDataForClass   Class loader [ com.ibm.ws.bootstrap.ExtClassLoader@d64e7229 ]
    [6/1/13 1:44:04:678 EDT] 0000001c annotations   W com.ibm.ws.amm.scan.context.ScannerContextImpl getInputDataForClass   Class loader [ org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader@e9f56141 ]
    [6/1/13 1:44:04:678 EDT] 0000001c annotations   W com.ibm.ws.amm.scan.context.ScannerContextImpl getInputDataForClass   Class loader [ sun.misc.Launcher$AppClassLoader@964626a4 ]
    [6/1/13 1:44:04:678 EDT] 0000001c annotations   W com.ibm.ws.amm.scan.context.ScannerContextImpl getInputDataForClass   Class loader [ sun.misc.Launcher$ExtClassLoader@ad8046ad ]
    
    
    [6/1/13 1:44:14:724 EDT] 0000001f ApplicationMg A   WSVR0220I: Application stopped: myapp-ear
    [6/1/13 1:44:14:896 EDT] 0000001f CompositionUn A   WSVR0193I: Composition unit WebSphere:cuname=myapp-ear in BLA WebSphere:blaname=myapp-ear stopped.
    
    [6/1/13 1:44:36:470 EDT] 0000001f annotation    W com.ibm.ws.webcontainer.annotation.WASAnnotationHelper collectClasses SRVE8000W: Skipped class that failed to initialize for annotation scanning.
                                     java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
        at java.lang.Class.forNameImpl(Native Method)
        at java.lang.Class.forName(Class.java:213)
        at com.ibm.ws.webcontainer.annotation.WASAnnotationHelper.loadClass(WASAnnotationHelper.java:753)
        at com.ibm.ws.webcontainer.annotation.WASAnnotationHelper.collectClasses(WASAnnotationHelper.java:188)
        at com.ibm.ws.webcontainer.annotation.WASAnnotationHelper.<init>(WASAnnotationHelper.java:143)
        at com.ibm.ws.webcontainer.annotation.WASAnnotationHelperManager.getAnnotationHelper(WASAnnotationHelperManager.java:63)
        at com.ibm.ws.webcontainer.metadata.WebMetaDataFactory.handOffReferenceData(WebMetaDataFactory.java:450)
        at com.ibm.ws.webcontainer.metadata.WebMetaDataFactory.createMetaData(WebMetaDataFactory.java:423)
        at com.ibm.ws.runtime.component.MetaDataMgrImpl.createMetaDataFromFactories(MetaDataMgrImpl.java:228)
        at com.ibm.ws.runtime.component.MetaDataMgrImpl.createMetaData(MetaDataMgrImpl.java:411)
        at com.ibm.ws.runtime.component.DeployedModuleImpl.start(DeployedModuleImpl.java:630)
        at com.ibm.ws.runtime.component.DeployedApplicationImpl.start(DeployedApplicationImpl.java:967)
        at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.java:766)
        at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplicationDynamically(ApplicationMgrImpl.java:1354)
        at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:2150)
        at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start(CompositionUnitMgrImpl.java:445)
    

    Here is the maven pom for the build project( root project just to do build)

    <groupId>com.mytest</groupId>
    <artifactId>myapp</artifactId>
    <version>2.0.0</version>
    <packaging>pom</packaging>
    <name>myapp</name>
    <properties>
        <project.build.source>1.6</project.build.source>
        <project.build.target>1.6</project.build.target>
        <project.encoding>UTF-8</project.encoding>
        <springVersion>3.2.1.RELEASE</springVersion>
    </properties>
    <modules>
        <module>../myapp-domain</module>
        <module>../myapp-web</module>
        <module>../myapp-ear</module>
    </modules>
    <dependencyManagement>
        <dependencies>
            <!-- external dependencies -->
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>${springVersion}</version>
                <scope>compile</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${springVersion}</version>
                <scope>compile</scope>
            </dependency>           
            <dependency>
                <groupId>opensymphony</groupId>
                <artifactId>oscache</artifactId>
                <version>2.4</version>
                <exclusions>
                    <exclusion>
                        <groupId>javax.servlet</groupId>
                        <artifactId>servlet-api</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            .......   other dependencies  .......
            <!-- test dependencies -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.10</version>
                <scope>test</scope>
            </dependency>
    
        </dependencies>
    </dependencyManagement>
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>2.3.2</version>
                    <configuration>
                        <source>${project.build.source}</source>
                        <target>${project.build.target}</target>
                        <encoding>${project.encoding}</encoding>
                        <showDeprecation>true</showDeprecation>
                        <showWarnings>true</showWarnings>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>2.4</version>
                    <configuration>
                        <encoding>${project.encoding}</encoding>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.10</version>
                    <configuration>
                        <disableXmlReport>true</disableXmlReport>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-site-plugin</artifactId>
                    <version>2.0-beta-6</version>
                </plugin>
    

    Here is the maven pom for the ear project

    <parent>
        <groupId>com.mytest</groupId>
        <artifactId>myapp</artifactId>
        <version>2.0.0</version>
    </parent>
    <artifactId>myapp-ear</artifactId>
    <packaging>ear</packaging>
    <name>MyappEAR</name>
    
      <dependencies>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>myapp-web</artifactId>
            <type>war</type>
            <version>2.0.0</version>
        </dependency>
    </dependencies>    
    
    <build>
        <finalName>myapp</finalName>
        <resources>
            <resource>
                <directory>META-INF</directory>
                <targetPath>../myapp/META-INF</targetPath>
                <includes>
                    <include>**/*.*</include>
                </includes>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <artifactId>maven-ear-plugin</artifactId>
                <version>2.7</version>
                <configuration>
                <applicationXml>${basedir}/META-INF/application.xml</applicationXml> 
                   <generateApplicationXml>false</generateApplicationXml>
                    <modules>
                        <webModule>
                            <groupId>${project.groupId}</groupId>
                            <artifactId>myapp-web</artifactId>
                            <bundleFileName>myapp-web.war</bundleFileName>
                        </webModule>
                    </modules>
                    <encoding>${project.encoding}</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>
       <properties>
    <maven.ear.final.name>myapp.ear</maven.ear.final.name>
    </properties>
    

    ================================================================================================== Here is the Web project POM

    <artifactId>myapp-web</artifactId>
    <packaging>war</packaging>
    <name>myappWeb</name>
    <dependencies>
    
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${springVersion}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${springVersion}</version>
        </dependency>
    
    
    <build>
        <finalName>myapp-web</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.0.2</version>
                <configuration>
                    <warSourceDirectory>src/main/webapp</warSourceDirectory>
                    <webXml>src/main/webapp/WEB-INF/web.xml</webXml>
    
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
    

    Strange thing is that when I try to Add the ear in Add and remove option of the Websphere 8 by rightclicking onthe server I see that the ear generated has structure like this. So it has two wars in the same war. But I looked at the myapp.ear file built and it has only one war in it.

    myapp-ear

    |-myapp-web

    |   |-Spring-web-3.2.1RELEASE.jar

    |   |-myapp-domain jar

    |-myapp-web.war

  • user2442578
    user2442578 almost 11 years
    Hi Chris, It did not resolve the problem also I was not using any scope at all. I did not have Spring-web dependencies in the root build project Pom earlier, it was in the web project pom. However even after adding in the root build pom with the scope the error persists. Also I have the domain project as dependency in the web project pom, not in the root build project pom. Thanks a lot for your help but I need little more to resolve this issue which I must :( I edited the description now to put the root build project Pom file clipping.
  • Lysogen
    Lysogen about 10 years
    #2 above worked for me.. It was a really PITA to keep building wars then deploying. Ant could help but #2 above was the easiest workaround.
  • Tobi Nonymous
    Tobi Nonymous about 10 years
    My edited advice actually turned out to be the most helpful for us, as we are not restricted in the Spring version we use. Since Spring 4 is GA for a while now, I think the best solution to the problem is to upgrade the Spring version (if you are not restricted to version 3.2)
  • svlada
    svlada about 9 years
    I am experiencing same problems with Spring 4.1.4 release, Web Sphere 7.0.0.9 with osgi feature pack.