My application has four small projects:
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)
<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>
<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
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:
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.