1 / 37

Juggling Java EE with Enterprise Apache Maven

adelie
Download Presentation

Juggling Java EE with Enterprise Apache Maven

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


    1. Juggling Java EE with Enterprise Apache Maven Jesse McConnell - jmcconnell@apache.org

    2. Who Am I? On Maven PMC Active in Continuum Some maven plugins Some mojo plugins @ codehaus axistools-maven-plugin - don’t hold that against me…pls Redback @ codehaus

    3. Is this you?

    4. Java EE Application Development by Convention No laughing matter People cry everyday because of java ee Maven can help keep crying to a minimum hopefully Planning is key

    5. Components of Java EE Enterprise Java Beans’s maven-ejb-plugin V. 2 and 3 specs Web Services axistools-maven-plugin cxf-maven-plugin others Web Archives (Wars) maven-war-plugin Enterprise Archives (Ears) maven-ear-plugin

    6. You should end up with…

    7. Maven Lifecycle Supported since the beginning with maven 2 Java EE artifact linkage is managed through dependencies Artifact construction dictated by <type/> What goes here? What goes here?

    8. Understanding Structure in Maven Follow Conventions Archiva and Continuum are good example Web Applications Redback is security overlay packaged as a Web Application and overlaid

    9. Library Code Understanding the final goal and scoping dependencies appropriately. That means…understand Java EE classloaders Understand your Container Like to think they are all interchangeable Can be harder in practice

    10. EJB Structure and Management <packaging>ejb</packaging> Directory Layout

    11. EJB Structure and Management Plugin Example <plugin> <artifactId>maven-ejb-plugin</artifactId> <configuration> <generateClient>true</generateClient> </configuration> </plugin>

    12. Linking into Build Validates ejb-jar.xml file existence Unless you specify ejbVersion 3.0

    13. Testing EJB Code Best bet is testing modularly like with normal junit testing. Otherwise test when in ear and under typical ejb conditions

    14. Web Service Structures and Management No strict lifecycle phase No strict directory layout Depends on web service architecture in use xfire -> CXF, Axis, etc Code generation components wsdl2java java2wsdl

    15. Linking into Build Consider services, clients, resource libraries Common project layout Annotations of services All kind of implementation specific Real deal is testing them

    16. Testing Web Services Can be hard to test directly Client testing against established servers begs irreproducibility Test by deploying services to embedded jetty and running client code

    17. War Structure and Management <packaging>war</packaging> Directory Layout |-- pom.xml `-- src `-- main |-- java | `-- com | `-- example | `-- projects | `-- SampleAction.java |-- resources | |-- images | | `-- sampleimage.jpg | `-- sampleresource `-- webapp |-- WEB-INF | `-- web.xml |-- index.jsp `-- jsp `-- websource.jsp

    18. War Structure and Management Plugin Example <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.0</version> <configuration> <webappDirectory>/container/deploy/dir</webappDirectory> </configuration> </plugin>

    19. War Overlay Often handy to build component oriented wars. Overlay multiple war files to create actual war file. Continuum and Archiva do this is redback for shared security and user management bits Add slide showing overlay Add slide showing overlay

    20. Linking into Build Dependency management scoping is key Dig into your war file and see what is in there Don’t be afraid, its doesn’t bite <scope>provided</scope> can be your friend Other Options: <warSourceExcludes>WEB-INF/lib/*.jar</warSourceExcludes>

    21. Three different usages War:war - standard war creation War:exploded - builds out war in exploded format in target dir War:inplace - builds out webapp in src/main/webapp Dependency Management scoping key for war usability

    22. War Overlay I - Clean <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-clean-plugin</artifactId> <version>2.1.1</version> <!-- This configuration is added to cleanup from war:inplace --> <configuration> <filesets> <fileset> <directory>${basedir}/src/main/webapp</directory> <includes> <include>images/redback</include> <!-- Images from other wars --> <include>template/</include> <!-- validation.js --> <include>template/redback</include> <!-- Templates from other wars --> <include>WEB-INF/classes</include> <!-- Classes and Resources from other wars --> <include>WEB-INF/lib</include> </includes> </fileset> </filesets> </configuration> </plugin>

    23. War Overlay II - War <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.0.1</version> <configuration> <archiveClasses>false</archiveClasses> <dependentWarExcludes>META-INF/**,WEB-INF/web.xml,WEB-INF/classes/xwork.xml,WEB-INF/lib/** </dependentWarExcludes> </configuration> <executions> <execution> <phase>compile</phase> <goals> <!-- Needed to get the plexus-security war overlay to do its thing before jetty:run --> <goal>inplace</goal> </goals> </execution> </executions> </plugin>

    24. Jetty Configuration <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <version>6.1.0</version> <configuration> <scanIntervalSeconds>10</scanIntervalSeconds> <contextPath>/</contextPath> <jettyEnvXml>${basedir}/src/jetty-env.xml</jettyEnvXml> <connectors> <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector"> <port>9090</port> <maxIdleTime>60000</maxIdleTime> </connector> </connectors> </configuration> <dependencies> <dependency> <groupId>org.apache.derby</groupId> <artifactId>derby</artifactId> <version>10.1.3.1</version> </dependency> </dependencies> </plugin>

    25. Testing Wars I jetty-maven-plugin for ‘click testing’ mvn jetty:run Integration testing a bit more involved… Example of jetty maven configuration from continuum for thisExample of jetty maven configuration from continuum for this

    26. TestingWars II generate-resources dependency-maven-plugin Unzip the webapp Prepare provided dependencies package maven-antrun-plugin Copy container configuration Copy provided dependencies pre-integration-test selenium-maven-plugin Start server cargo-maven2-plugin Start container integration-test maven-antrun-plugin Check continuum started maven-surefire-plugin Run tests Post-integration-test Cargo-maven2-plugin Stop container

    27. Scoping War Dependencies Two Approaches, different scoping Deploying Wars Integrating into Ears Mentioning this too many timesMentioning this too many times

    28. Ear Structure and Management Directory Layout No specific directories required Dependencies are key to ear files Automatic application.xml creation MANIFEST.MF Creation

    29. Ear Structure and Management Plugin Example <plugin> <artifactId>maven-ear-plugin</artifactId> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> </manifest> </archive> </configuration> </plugin>

    30. Linking into Build Just do it… Then triage. Primary recommendation, keep your project modular Test your modules Use ear module as simply the aggregation of the project packaging

    31. Supported Ear Modules ejb3Module - ejb3 (Enterprise Java Bean version 3) ejbClientModule - ejb-client (Enterprise Java Bean Client) ejbModule - ejb (Enterprise Java Bean) jarModule - jar (Java Archive) harModule - har (Hibernate Archive) parModule - par (Plexus Archive) rarModule - rar (Resource Adapter Archive) sarModule - sar (JBoss Service Archive) webModule - war (Web Application Archive) wsrModule - wsr (JBoss Web Service Archive)

    32. Testing Ears Functionally the same kind of process as the war integration testing use cargo Bind start app server to pre-integration-test phase Start Selenium server Run any surefire tests Bind stop app server to post-integration-test

    33. Scoping Ear Dependencies Learn Dependency Management in parent poms Love it Plan for ear deployment, scope things that are used by multiple war and ejb’s as provided or test in those poms Scope for inclusion in ear, leave versioning to the dependencyManagement, its why it is there

    34. Application Deployment Options Cargo - cargo.codehaus.org Supported containers Geronimo 1.x - geronimo1x JBoss 3.x, 4.x - jboss3x, jboss4x Jetty 4.x, 5.x, 6.x - jetty4x, jetty5x, jetty6x jo! 1.x - jo1x OC4J 9.x - oc4j9x Orion 1.x, 2.x - orion1x, orion2x Resin 2.x, 3.x - resin2x, resin3x Tomcat 3.x, 4.x, 5.x - tomcat3x, tomcat4x, tomcat5x WebLogic 8.x - weblogic8x Maven2 plugin support Deployment area largely untargeted by maven conventions Hard to standardize in real world

    35. Tips and Tricks Got a 300meg ear file? Check the scoping Pull apart the artifacts and look for jar duplication Understand Java EE classloaders Add some of eric’s tips Add some of eric’s tips

    36. Tips and Tricks II <build> <plugins> <plugin> <artifactId>maven-ejb-plugin</artifactId> <configuration> <ejbVersion>3.0</ejbVersion> <classifier>${server.type}</classifier> </configuration> </plugin> </plugins> </build>

    37. Using Archetypes maven-archetype-j2ee-simple Sample aggregate project Geronimo sample archetypes Many jetty sample archetypes http://www.webtide.com/resources.jsp

    38. Questions? Jesse McConnell - jmcconnell@apache.org Resources Better Builds with Maven Maven: The Definitive Guide

More Related