6 Replies Latest reply: Apr 13, 2012 5:50 PM by Denis Golovin RSS

target/project.war different from project.war that is Run On Server

Tanya Ruttenberg Expert

I have gone back and forth between manually building my project using a Run Configuration and simply deploying my app onto the server using Run As... -> Run On Server.  The latter is easier, you don't have to take that first step of building the war file manually and you don't have to mark the target/project.war as Deployable (for some reason the voice in my brain always says "Mark as Deplorable" , but I digress....)

 

So today I needed to customize the packaging of my app to put persistence.xml into /META-INF rather than in /WEB-INF/classes/META-INF.  Building the war file manually using a Run Configuration produces different results than what I get in the my deployed app.  I assume that what gets deployed uses the pom to build the app, is that true?  What actually happens when you do a Run On Server?  Is it supposed to be different than what you do when you do a "mvn clean package"?   How can I get the result I want in the Run As->Run On Server version?

 

Here are the two structures.  The first is take from my target subdirectory right after mvn clean package and the second is from the deployments directory, which I reached by right-clicking on the deployed app icon and selecting Explore from the context menu.  In the first (correct - manually generated) build,  persistence.xml is in the correct place. In the 2nd build, it appears twice, and this is messing up the deployment.

 

d:\Development2\j2ee6\contacts-as7\target>jar -tf contacts-as7.war
META-INF/
META-INF/MANIFEST.MF
icons/
style/
WEB-INF/
WEB-INF/classes/
WEB-INF/classes/gov/
WEB-INF/classes/gov/ssa/
WEB-INF/classes/gov/ssa/dne/
WEB-INF/classes/gov/ssa/dne/nmst/
WEB-INF/classes/gov/ssa/dne/nmst/action/
WEB-INF/lib/
contact.xhtml
favicon.ico
icons/add.png
icons/check.png
icons/delete.png
icons/edit.png
index.html
index.xhtml
META-INF/persistence.xml
style/nmst.css
test.xhtml
WEB-INF/beans.xml
WEB-INF/classes/gov/ssa/dne/nmst/action/ContactService.class
WEB-INF/classes/gov/ssa/dne/nmst/action/ContactView.class
WEB-INF/faces-config.xml
WEB-INF/lib/commons-beanutils-1.8.0.jar
WEB-INF/lib/commons-digester-2.0.jar
WEB-INF/lib/commons-lang-2.6.jar
WEB-INF/lib/commons-logging-1.1.1.jar
WEB-INF/lib/contacts-model-as7-0.0.1-SNAPSHOT.jar
WEB-INF/lib/cssparser-0.9.5.jar
WEB-INF/lib/ehcache-1.6.0.jar
WEB-INF/lib/guava-10.0.1.jar
WEB-INF/lib/hibernate-validator-4.2.0.Final.jar
WEB-INF/lib/javax.faces-2.1.5.jar
WEB-INF/lib/joda-time-1.6.jar
WEB-INF/lib/jsr305-1.3.9.jar
WEB-INF/lib/jstl-api-1.2.jar
WEB-INF/lib/picketlink-idm-api-1.5.0.Alpha02.jar
WEB-INF/lib/picketlink-idm-common-1.5.0.Alpha02.jar
WEB-INF/lib/picketlink-idm-spi-1.5.0.Alpha02.jar
WEB-INF/lib/prettyfaces-core-3.3.2.jar
WEB-INF/lib/richfaces-components-api-4.2.0.Final.jar
WEB-INF/lib/richfaces-components-ui-4.2.0.Final.jar
WEB-INF/lib/richfaces-core-api-4.2.0.Final.jar
WEB-INF/lib/richfaces-core-impl-4.2.0.Final.jar
WEB-INF/lib/sac-1.3.jar
WEB-INF/lib/seam-faces-3.1.0.Final.jar
WEB-INF/lib/seam-faces-api-3.1.0.Final.jar
WEB-INF/lib/seam-international-3.1.0.Final.jar
WEB-INF/lib/seam-international-api-3.1.0.Final.jar
WEB-INF/lib/seam-persistence-api-3.1.0.Final.jar
WEB-INF/lib/seam-security-api-3.1.0.Final.jar
WEB-INF/lib/seam-transaction-api-3.1.0.Final.jar
WEB-INF/lib/servlet-api-2.5.jar
WEB-INF/lib/slf4j-api-1.6.1.jar
WEB-INF/lib/solder-api-3.1.0.Final.jar
WEB-INF/lib/solder-impl-3.1.0.Final.jar
WEB-INF/lib/solder-logging-3.1.0.Final.jar
WEB-INF/lib/validation-api-1.0.0.GA.jar
WEB-INF/web.xml
META-INF/maven/
META-INF/maven/gov.ssa.dne.nmst/
META-INF/maven/gov.ssa.dne.nmst/contacts-as7/
META-INF/maven/gov.ssa.dne.nmst/contacts-as7/pom.xml
META-INF/maven/gov.ssa.dne.nmst/contacts-as7/pom.properties

 

 

d:\Development2\jboss-eap-6.0.0.Beta1\jboss-eap-6.0\standalone\deployments>jar -tf contacts-as7.jar
contact.xhtml
favicon.ico
icons/
icons/add.png
icons/check.png
icons/delete.png
icons/edit.png
index.html
index.xhtml
META-INF/
META-INF/MANIFEST.MF
META-INF/maven/
META-INF/maven/gov.ssa.dne.nmst/
META-INF/maven/gov.ssa.dne.nmst/
META-INF/maven/gov.ssa.dne.nmst/pom.properties
META-INF/maven/gov.ssa.dne.nmst/pom.xml
META-INF/persistence.xml
style/
style/nmst.css
test.xhtml
WEB-INF/
WEB-INF/beans.xml
WEB-INF/classes/
WEB-INF/classes/gov/
WEB-INF/classes/gov/ssa/
WEB-INF/classes/gov/ssa/dne/
WEB-INF/classes/gov/ssa/dne/nmst/
WEB-INF/classes/gov/ssa/dne/nmst/action/
WEB-INF/classes/gov/ssa/dne/nmst/action/ContactService.class
WEB-INF/classes/gov/ssa/dne/nmst/action/ContactView.class
WEB-INF/classes/import.sql
WEB-INF/classes/META-INF/
WEB-INF/classes/META-INF/persistence.xml
WEB-INF/faces-config.xml
WEB-INF/lib/
WEB-INF/lib/commons-beanutils-1.8.0.jar
WEB-INF/lib/commons-digester-2.0.jar
WEB-INF/lib/commons-lang-2.6.jar
WEB-INF/lib/commons-logging-1.1.1.jar
WEB-INF/lib/contacts-model-as7-0.0.1-SNAPSHOT.jar
WEB-INF/lib/cssparser-0.9.5.jar
WEB-INF/lib/ehcache-1.6.0.jar
WEB-INF/lib/guava-10.0.1.jar
WEB-INF/lib/hibernate-validator-4.2.0.Final.jar
WEB-INF/lib/javax.faces-2.1.5.jar
WEB-INF/lib/joda-time-1.6.jar
WEB-INF/lib/jsr305-1.3.9.jar
WEB-INF/lib/jstl-api-1.2.jar
WEB-INF/lib/picketlink-idm-api-1.5.0.Alpha02.jar
WEB-INF/lib/picketlink-idm-common-1.5.0.Alpha02.jar
WEB-INF/lib/picketlink-idm-spi-1.5.0.Alpha02.jar
WEB-INF/lib/prettyfaces-core-3.3.2.jar
WEB-INF/lib/richfaces-components-api-4.2.0.Final.jar
WEB-INF/lib/richfaces-components-ui-4.2.0.Final.jar
WEB-INF/lib/richfaces-core-api-4.2.0.Final.jar
WEB-INF/lib/richfaces-core-impl-4.2.0.Final.jar
WEB-INF/lib/sac-1.3.jar
WEB-INF/lib/seam-faces-3.1.0.Final.jar
WEB-INF/lib/seam-faces-api-3.1.0.Final.jar
WEB-INF/lib/seam-international-3.1.0.Final.jar
WEB-INF/lib/seam-international-api-3.1.0.Final.jar
WEB-INF/lib/seam-persistence-api-3.1.0.Final.jar
WEB-INF/lib/seam-security-api-3.1.0.Final.jar
WEB-INF/lib/seam-transaction-api-3.1.0.Final.jar
WEB-INF/lib/servlet-api-2.5.jar
WEB-INF/lib/slf4j-api-1.6.1.jar
WEB-INF/lib/solder-api-3.1.0.Final.jar
WEB-INF/lib/solder-impl-3.1.0.Final.jar
WEB-INF/lib/solder-logging-3.1.0.Final.jar
WEB-INF/lib/validation-api-1.0.0.GA.jar
WEB-INF/web.xml

 

 

This is the stack trace I get when the deployment bombs

 

14:22:57,349 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-3) JBAS015876: Starting deployment of "contacts-as7.war"
14:22:58,502 WARN  [org.jboss.as.server.deployment] (MSC service thread 1-1) JBAS015893: Encountered invalid class name 'com.sun.faces.vendor.Tomcat6InjectionProvider:org.apache.catalina.util.DefaultAnnotationProcessor' for service type 'com.sun.faces.spi.injectionprovider'
14:22:58,502 WARN  [org.jboss.as.server.deployment] (MSC service thread 1-1) JBAS015893: Encountered invalid class name 'com.sun.faces.vendor.Jetty6InjectionProvider:org.mortbay.jetty.plus.annotation.InjectionCollection' for service type 'com.sun.faces.spi.injectionprovider'
14:22:58,593 INFO  [org.jboss.as.jpa] (MSC service thread 1-1) JBAS011401: Read persistence.xml for contactsDb
14:22:58,593 INFO  [org.jboss.as.jpa] (MSC service thread 1-1) JBAS011401: Read persistence.xml for contactsDb
14:22:58,593 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-4) MSC000001: Failed to start service jboss.deployment.unit."contacts-as7.war".DEPENDENCIES: org.jboss.msc.service.StartException in service jboss.deployment.unit."contacts-as7.war".DEPENDENCIES: Failed to process phase DEPENDENCIES of deployment "contacts-as7.war"
at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:119) [jboss-as-server-7.1.0.Final-redhat-1.jar:7.1.0.Final-redhat-1]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA-redhat-1.jar:1.0.2.GA-redhat-1]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA-redhat-1.jar:1.0.2.GA-redhat-1]
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [rt.jar:1.6.0_25]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [rt.jar:1.6.0_25]
at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_25]
Caused by: java.lang.IllegalArgumentException: JBAS011470: Persistence unitName was not specified and there are 2 persistence unit definitions in application deployment "contacts-as7.war".  Either change the application to have only one persistence unit definition or specify the unitName for each reference to a persistence unit.
at org.jboss.as.jpa.container.PersistenceUnitSearch.resolvePersistenceUnitSupplier(PersistenceUnitSearch.java:69)
at org.jboss.as.jpa.processor.JPAAnnotationParseProcessor.getPersistenceUnit(JPAAnnotationParseProcessor.java:284)
at org.jboss.as.jpa.processor.JPAAnnotationParseProcessor.getBindingSource(JPAAnnotationParseProcessor.java:220)
at org.jboss.as.jpa.processor.JPAAnnotationParseProcessor.processField(JPAAnnotationParseProcessor.java:151)
at org.jboss.as.jpa.processor.JPAAnnotationParseProcessor.processPersistenceAnnotations(JPAAnnotationParseProcessor.java:118)
at org.jboss.as.jpa.processor.JPAAnnotationParseProcessor.deploy(JPAAnnotationParseProcessor.java:90)
at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:113) [jboss-as-server-7.1.0.Final-redhat-1.jar:7.1.0.Final-redhat-1]
... 5 more

14:22:58,633 INFO  [org.jboss.as.server] (DeploymentScanner-threads - 1) JBAS015870: Deploy of deployment "contacts-as7.war" was rolled back with failure message {"JBAS014671: Failed services" => {"jboss.deployment.unit.\"contacts-as7.war\".DEPENDENCIES" => "org.jboss.msc.service.StartException in service jboss.deployment.unit.\"contacts-as7.war\".DEPENDENCIES: Failed to process phase DEPENDENCIES of deployment \"contacts-as7.war\""}}
14:22:58,733 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-3) JBAS015877: Stopped deployment contacts-as7.war in 95ms
14:22:58,733 INFO  [org.jboss.as.controller] (DeploymentScanner-threads - 1) JBAS014774: Service status report
JBAS014777:   Services which failed to start:      service jboss.deployment.unit."contacts-as7.war".DEPENDENCIES: org.jboss.msc.service.StartException in service jboss.deployment.unit."contacts-as7.war".DEPENDENCIES: Failed to process phase DEPENDENCIES of deployment "contacts-as7.war"

  • 1. Re: target/project.war different from project.war that is Run On Server
    Tanya Ruttenberg Expert

    oh boy, this is a big "DUH" for me!

     

    the 2nd persistence.xml was from my ejb jar (a dependency) -- I left it in there accidentally.  Once I removed it, Run As - > Run On Server worked beautifully.

     

    Maven must have been using an "installed" version of the ejb jar that did not have persistence.xml in it and that's why it looked "correct" to me.

     

    Somehow no matter how long I linger before I press teh "Submit" button when I write one of these up, the answer becomes obvious only AFTER I've pressed it!  Usually within 5 minutes of pressing it, too.

     

    Have a nice day.

    TDR

  • 2. Re: target/project.war different from project.war that is Run On Server
    Rob Stryker Master

    > I assume that what gets deployed uses the pom to build the app, is that true?

     

    The toolset itself does not necessarily use pom.xml at all.  If you have m2e installed only, then it will not use pom.xml at all. It uses a file in {your.project}/.settings/org.eclipse.wst.common.component     which is an xml file driving the server deployment model.  It maps folders that should be included in the deployment among other things.

     

    m2e-wtp is another add-on which I assume you are using. This file tries to make the component.xml file match the behaviour of pom.xml as closely as possible.

  • 3. Re: target/project.war different from project.war that is Run On Server
    Tanya Ruttenberg Expert

    So, m2e and m2e-wtp are different. I've never been quite clear on that. 

     

    If you change your pom.xml you get an error that says the project is out of configuration or something like that and running Maven -> Update Project Configuration... updates that file?  If you have changed your dependencies and don't update that file, not only will the list of libraries entitled Maven Dependencies be out of date, but the project itself won't incorporate the correct libraries into the lib when you deploy it. Is that right?  And I assume any structural changes to that app you have made in the pom like <includes> and <excludes> won't make it into the deployed app unless you run Update Project Configuration...  as well.

     

    The bottom line is that running Maven -> Update Project Configuration... synchronizes the org.eclipse.wst.common.component to the pom.xml.  True?

     

    That takes some of the magic out of it ( that is a good thing)

    Thanks.

    TDR

  • 4. Re: target/project.war different from project.war that is Run On Server
    Max Rydahl Andersen Master

    m2e provides the basic Maven integration for Eclipse Java based projects.

     

    m2e-wtp are add-ons to m2e which provides Maven integration for Eclipse Webtools (WTP) based projects.

     

    And yes, you can view update project configuration as the step needed to force eclipse to read the pom.xml and update the eclipse project configuration.

     

    In some cases you can have pom.xml content that cannot be fully represented in eclipse, or simply just haven't been implemented yet - we have done our best to ensure most common scenarios we know of is covered - if you find something that is not matching let us know

  • 5. Re: target/project.war different from project.war that is Run On Server
    Tanya Ruttenberg Expert

    This original problem is showing up again  -  though the details are different and I'm pretty sure this time it's not my mistake.

     

    The file starts in src/main/resources/META-INF/persistence.xml

     

    In the maven build, the persistence.xml is showing up in the right place, under META-INF.The eclipse build doesn't include the persistence.xml at all.

     

    To coax maven into including persistence.xml into the WAR I include this in the pom.xml

     

    <plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.1.1</version>
    <configuration>
      <!-- Java EE 6 doesn't require web.xml, Maven needs to catch up! -->
      <failOnMissingWebXml>false</failOnMissingWebXml>
      <webResources>
        <resource>
          <directory>src/main/resources/META-INF</directory>
          <!-- override the destination directory for this resource -->
          <targetPath>META-INF</targetPath>
          <includes>
            <include>persistence.xml</include>
          </includes>
        </resource>
      </webResources>
    </configuration>
    </plugin>

     

    and this

     

    <resources>
      <resource>
        <directory>src/resources/META-INF</directory>
        <excludes>
          <exclude>persistence.xml</exclude>
        </excludes>
      </resource>
    </resources>

     

    mvn package puts it into contacts-as7.war/META-INF

     

    Run On Server doesn't put it anywhere and I get this error when I deploy

     

    Can't find a persistence unit named null in deployment "contacts-as7.war"

     

  • 6. Re: target/project.war different from project.war that is Run On Server
    Denis Golovin Master

    Have you tried to configure it in "Web Deployment Assembly" properties for the project?

    WebDeploymentAssembly.png