Question

I have a basic question about running a Java EE application on Weblogic using maven in eclipse.

I use OEPE (Oracle Enterprise pack for Eclipse) which comes with some plugins such as m2e and wtp. As far as I know this plugins read the pom file and based on them build the jar, war and ear files.

What I do right now is like this:

I check the build automatically option and let these plugins create my EAR file, then right click on the instance of weblogic server in Eclipse and add it to server using add/remove option and finally start the application server. This way when I change code in my classes they will be picked by application server and hot swap works.

Another way to build the EAR file is using the m2e plugin: right click on the parent pom file and choose maven install then start the application server and use the wls:deploy in order to deploy the EAR file. (This time I don't add the ear file to the application server from within the Eclipse and eclipse also is not aware of that EAR file when I right click on the instance of my weblogic inside the IDE).

As far as I've seen I can only add those artifacts to server which are built using the wtp plugin and not the artifacts that are built using maven command of m2e plugin. The problem with wtp and all these plugins (except for m2e which actually just runs mvn -install) is that they don't work flawlessly. Sometimes they don't build the artifacts correctly sometimes the jar files are obsolete and they don't get updated. Moreover when you use the jar file of one project in another maven project they get stuck with the jar file prior to your changes, while using the m2e they are built flawlessly.

Now here is the real question:

Which way is the correct one to have hot deploy?

Am I missing something? Is building the ear file using m2e plugin and deploying using wls:deploy enough? If so how will hot swap happen by itself or should i use wls:redeploy each time? If m2e is enough then I assume that I should abandon wtp plugin (it does not know all the plugins of pom file and I should sometimes mark them as ignored in lifecycle management xml file of eclipse).

I'm sorry that the question is that long but I hope that I made the case clear and get some help!

Was it helpful?

Solution

Let me provide you with my checklist to make my web application hot-deployed on Weblogic. This checklist assumes a weblogic version which implements Servlet 2.5 and assumes your project is a maven one which is configured to run maven-compiler-plugin for JDK 1.6. In other words your weblogic version is 10.x.x and your POM includes the following snippet:

<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
    <source>1.6</source>
    <target>1.6</target>
</configuration>

To build a war

Use OEPE plugin to create a new Weblogic Web module Weblogic.xml file:

  • Don’t enable spring extension
  • In FastSwap: Don’t enable class redefinition
  • Take note of the value

    <wls:context-root>myappcontextroot</wls:context-root> 
    

    it will be used later in the hot-deployment

Execute Maven update project from Eclipse context menu of your project

Execute Maven clean install

For hot-deployment setup:

  • Add local weblogic as a runtime server in Windows->preferences->Server->Runtime. Remember to change its Java home to the Sun JDK instead of JRocket for development mode.
  • Add local server in Server->add server
  • Project context menu->properties->Project Facet-> add faceted nature
  • Make Sure Jave Facet is version 1.6
  • Check Dynamic web application version 2.5 and make the target runtime be the runtime server declared in the first step + In further configuration give “context root” the value "myappcontextroot" which was noted above and give “Content directory" the value "src\main\webapp”. Don't generate web.xml otherwise your web.xml is overwritten
  • Push OK to apply all the above facet changes to your project
  • Again open Project context menu->properties->Deployment Assembly->Add java build path->Maven dependencies
  • Finally, in the server window Add configured application to the running server

Please follow these steps literally, it is really worth it!

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top