1 / 49

Build, test and deploy ADF applications without effort with the use of Maven2

Build, test and deploy ADF applications without effort with the use of Maven2. Aino Andriessen AMIS. Continuous Integration. Continuous integration is the practice where the work of all the developers are integrated, analyzed and verified on a regular basis, preferably multiple times a day.

kim
Download Presentation

Build, test and deploy ADF applications without effort with the use of Maven2

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. Build, test and deploy ADF applications without effort with the use of Maven2 Aino Andriessen AMIS

  2. Continuous Integration Continuous integration is the practice where the work of all the developers are integrated, analyzed and verified on a regular basis, preferably multiple times a day. It takes the latest situation from the source control system, performs unit tests, makes a build, deploys the application, performs integration tests and creates reports about these steps and communicates them with the team, all automatically without human interaction.

  3. Conditions • Infrastructure • Scripting • No IDE

  4. Scripting • Maven • ant • make • shell scripts • sql scripts • ...

  5. Demo

  6. Maven execution info [INFO] Scanning for projects... [INFO] Reactor build order: [INFO] HR1 [INFO] HR1 model [INFO] HR1 viewController [INFO] HR1 ear [INFO] HR1 integration [INFO] ------------------------- Downloading: http://repo1.maven.org/maven2/junit/junit/3.8.1/junit-3.8.1.jar 118K downloaded [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary: [INFO] ------------------------------------------------------------------------ [INFO] HR1 ................................................... SUCCESS [3.003s] [INFO] HR1 model ............................................. SUCCESS [7.866s] [INFO] HR1 viewController .................................... SUCCESS [54.451s] [INFO] HR1 ear ............................................... SUCCESS [14.591s] [INFO] HR1 integration ....................................... SUCCESS [0.312s] [INFO] ------------------------------------------------------------------------ [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1 minute 20 seconds [INFO] Finished at: Fri Jun 01 17:32:01 CEST 2007 [INFO] Final Memory: 10M/18M [INFO] ------------------------------------------------------------------------

  7. mvn test [INFO] [surefire:test] [INFO] Surefire report directory: D:\projects\myprojects\odtugDemo\hr1\model\tar get\surefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running nl.amis.demo.odtug.model.queries.OdtugTstViewTest Jun 1, 2007 7:04:22 PM oracle.adf.share.config.ADFConfigFactory findOrCreateADFC onfig INFO: oracle.adf.share.config.ADFConfigFactory No META-INF/adf-config.xml found Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.606 sec Running nl.amis.demo.odtug.model.queries.RegionsViewTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.031 sec Running nl.amis.adf.fwk.test.Java5Test Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.016 sec Running nl.amis.demo.odtug.model.queries.JobsViewTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.046 sec Running nl.amis.demo.odtug.model.queries.EmployeesViewTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.032 sec Running nl.amis.demo.odtug.model.queries.DepartmentsViewTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.015 sec Running nl.amis.demo.odtug.model.queries.LocationsViewTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.016 sec Running nl.amis.demo.odtug.model.queries.CountriesViewTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.015 sec Results : Tests run: 8, Failures: 0, Errors: 0, Skipped: 0

  8. mvn package [INFO] Building HR1 [INFO] task-segment: [package] [INFO] --------------------------- [INFO] [jar:jar] [INFO] Building jar: D:\projects\myprojects\odtugDemo\hr1\model\target\hr1-model-1.0-SNAPSHOT.jar [INFO] ------------------------------------------------------------------------- [INFO] [war:war] [INFO] Building war: D:\projects\myprojects\odtugDemo\hr1\viewController\target\hr1-viewController-1.0-SNAPSHOT.war [INFO] [ear:ear] [INFO] Copying artifact[war:nl.amis.demo.odtug.hr1:hr1-viewController:1.0-SNAPSHOT] to[hr1-viewController-1.0-SNAPSHOT.war] [INFO] Copying artifact[jar:log4j:log4j:1.2.12] to[log4j-1.2.12.jar] [INFO] Copying artifact[jar:commons-logging:commons-logging:1.0.4] to[commons-logging-1.0.4.jar] [INFO] Could not find manifest file: D:\projects\myprojects\odtugDemo\hr1\ear\src\main\application\META-INF\MANIFEST.MF - Generating one [INFO] Building jar: D:\projects\myprojects\odtugDemo\hr1\ear\target\hr1-ear-1.0-SNAPSHOT.ear [INFO] -------------------------------------------------------------------------

  9. mvn exec:exec -PlocalOC4J [INFO] [exec:exec] [[INFO] 07/06/01 17:21:22 Notification ==>Uploading file hr1.ear ... [INFO] [INFO] 07/06/01 17:21:22 Notification ==>Application Deployer for hr1 STARTS. [INFO] [INFO] 07/06/01 17:21:22 Notification ==>Copy the archive to :\server\oc4j_101310\j2ee\home\applications\hr1.ear [INFO] [INFO] 07/06/01 17:21:22 Notification ==>Initialize C:\server\oc4j_101310\j2ee\home\applications\hr1.ear begins... [INFO] [INFO] 07/06/01 17:21:24 Notification ==>Initialize hr1-viewController-1.0-SNAPSHOT begins... [INFO] [INFO] 07/06/01 17:21:24 Notification ==>Initialize hr1-viewController-1.0-SNAPSHOT ends... [INFO] [INFO] 07/06/01 17:21:24 Notification ==>Started application : hr1 [INFO] [INFO] 07/06/01 17:21:24 Notification ==>Binding web application(s) to site default-web-site begins... [INFO] [INFO] 07/06/01 17:21:24 Notification ==>Binding hr1-viewController-1.0-SNAPSHOT web-module for application hr1 to site default-web-site under context root /hr1 [INFO] [INFO] 07/06/01 17:21:31 Notification ==>Initializing Servlet: javax.faces.webapp.FacesServlet for web application hr1-viewController-1.0-SNAPSHOT [INFO] [INFO] 07/06/01 17:21:31 Notification ==>Binding web application(s) to site default-web-site ends... [INFO] [INFO] 07/06/01 17:21:31 Notification ==>Application Deployer for hr1 COMPLETES. Operation time: 8273 msecs

  10. mvn verify -PlocalOC4J

  11. mvn deploy [INFO] [deploy:deploy] [INFO] Retrieving previous build number from ATAMaven2SnapshotsRepo Uploading: file:\\amis-test-aa\maven2snapshots/nl/amis/demo/odtug/hr1/hr1-model/1.0-SNAPSHOT/hr1-model-1.0-20070601.171522-4.jar 50K uploaded [INFO] Retrieving previous metadata from ATAMaven2SnapshotsRepo [INFO] Uploading repository metadata for: 'snapshot nl.amis.demo.odtug.hr1:hr1-model:1.0-SNAPSHOT' [INFO] -------------------------------------------------------------------------

  12. mvn site

  13. Build automation server

  14. Demo Summary • ADF Faces (10.1.3.1) application • Without JDeveloper : • Unittesting • Make a build • Deploy ear file to OC4J • Perform integrationtests • Share artifacts • Share information

  15. Infrastructure

  16. Software Studio

  17. Software development • The development environment • Source control • Delivery environments • Issue management • Library management • Build automation / continuous integration • Reporting and documentation • Communication

  18. Maven • Convention over configuration • Project Object Model • objects / things • xml file • Build Lifecycle • actions / goals • Dependency (library, artifact) Management

  19. POM example <project> <modelVersion>4.0.0</modelVersion> <groupId>nl.amis.demo.odtug.hr1</groupId> <artifactId>hr1</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging> <modules> <module>model</module> <module>viewController</module> <module>ear</module> </modules> <name>HR1</name> <description>This application manages employees and general company information.</description> <url>http://amis-test-aa:8800/hr1/faces/index.jspx</url> <organization> <name>AMIS Services</name> <url>http://www.amis.nl</url> </organization> <issueManagement> <system>Jira</system> <url>http://amis-test-aa:8081/browse/HRONE</url> </issueManagement>

  20. POM example <scm> <connection>scm:svn:http://amis-test-aa/svn/myrepo/hr1/trunk/ </connection> <developerConnection> scm:svn:http://amis-test-aa/svn/myrepo/hr1/trunk/ </developerConnection> <url>http://amis-test-aa/svn/myrepo/hr1/trunk/</url> </scm> <developers> <developer> <id>aino.andriessen</id> <name>Aino Andriessen</name> <email>aino.andriessen@amis.nl</email> <organization>AMIS</organization> <roles><role>developer</role></roles> <timezone>+1</timezone> </developer> </developers> <distributionManagement> <repository> <id>AMISMaven2Repo</id> <url>file:\\amis-test-aa\maven2</url> </repository> </distributionManagement>

  21. Pom Example <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> </plugins> </build> <reporting> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-checkstyle-plugin</artifactId> <configuration> <configLocation> src/main/resources/amis_checkstyle.xml </configLocation> </configuration> </plugin> </plugins> </reporting> </project>

  22. Build Lifecycle • Organized sequence of phases like compile, test, package, build etc. The actual work is done by goals which are bound to a certain phase. • Configuration (if necessary) in pom • Other lifecycles • clean • site

  23. Execution • mvn compile • mvn compile:compile • mvn compile:test-compile • mvn jar • mvn jar:jar • mvn jar:sign • mvn test-jar:jar

  24. Dependency Management • Defined in the POM • Downloaded from repository when needed • Stored in local repository <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>com.oracle.adf</groupId> <artifactId>adfbinding</artifactId> <version>10.1.3.39.84</version> <scope>provided</scope> </dependency> <dependency> <groupId>nl.amis.demo.odtug.hr1</groupId> <artifactId>hr1-model</artifactId> <version>${project.version}</version> </dependency> </dependencies>

  25. Maven repositories

  26. Maven repositories 2 • Local • Internal • Central • http://repo1.maven.org/maven2/ • External • Codehaus • java.net • ...

  27. Internal repository • commercial libraries • non-public libraries • company products call mvn deploy:deploy-file -DgroupId=com.oracle.jdbc -DartifactId=ojdbc14 -Dversion=10.2.0.1 -Dfile=ojdbc14.jar -Dpackaging=jar -DrepositoryId=AMISMaven2Repository -Durl=%MAVEN_REPO_URL%

  28. Maven 'bits and pieces' • Plugins • Projectsite • Reports • Profiles • Snapshots • Release • Archetype • ...

  29. ADF & JDeveloper & Maven

  30. Mavenize an ADF application • Dependency management • POM files • Tools

  31. Tools • admin_client.jar utility • ojspc.jar utility • [JDeveloper] • [oc4j]

  32. JDeveloper library management • JDeveloper has a great library management system... • as long as you stay in JDeveloper • as long as you use the provided libraries

  33. JDeveloper library (mis)management - 2 • Version management • JDeveloper version • What is the impact of service updates? • OC4J version • ADF version • External libraries management • What if part of the application is developed in another IDE?

  34. Library management

  35. Dependencies • Put (deploy) libraries in the internal repository • Keep pom file(s) in sync <dependencies> <dependency> <groupId>com.oracle.adf</groupId> <artifactId>adfshare</artifactId> <version>10.1.3.39.84</version> <scope>provided</scope> </dependency> </dependencies>

  36. Required libraries • ADF • adfshare, adfui, adf-controller, adfbinding, adfm, bc4jdomorcl, bc4jmt, bc4jct, bc4jdatum, bc4jhtml, datatags, graphtags, bc4jimdomains, ordim • JDeveloper • oc4j-internal, oc4j, adf-faces-impl, adf-faces-api, jdev-cm, ojmisc, xmlparserv2, ojsp, ojsputil call mvn deploy:deploy-file -DgroupId=com.oracle.adf -DartifactId=adfshare -Dversion=%ADF_VERSION% -Dfile=%JDEV_HOME%/BC4J/lib/adfshare.jar -Dpackaging=jar -DrepositoryId=%REPO_ID% -Durl=%REPO_URL%

  37. UnitTest ADF applications • BC4J JUnit extension • JDBC based AM configuration • 'Basetest' per application module • Utility methods to create connection, handle jaas and provide easy access to view objects • Define (at least) a testcase per viewobject protected HrServiceImpl getHrService () { return (HrServiceImpl) getApplicationModule(); }

  38. Integration tests • Start application server • Prepare the database • Deploy application • Run tests • front-end • database • application • Undeploy application • Stop application server

  39. Integration tests • Front-end • Selenium • Back-end / Database • QCTO • utPLSQL • Tools • dbunit • Maven sql plugin • Maven exec plugin • (JDeveloper) ant tasks

  40. Deploy to OC4J • Command-line • oc4j admin_client.jar utility • in ear project or associated with a certain phase • mvn exec:exec -PlocalOC4J • Unfortunately no Cargo plugin • cargo:start, cargo:stop, cargo:deploy • Define local dependencies (location of admin_client.jar) in local settings.xml

  41. Example <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <executions> <execution> <id>deployApp</id> <phase>pre-integration-test</phase> <goals> <goal>exec</goal> </goals> <configuration> <executable>${java.home}/bin/java</executable> <arguments> <argument>-jar</argument> <argument>${oc4j.adminclient.home}\j2ee\home\admin_client.jar</argument> <argument>${ias.deploy.url}</argument> <argument>${ias.username}</argument> <argument>${ias.password}</argument> <argument>-deploy</argument> <argument>-file</argument> <argument>../ear/target/hr1-ear-${version}.ear</argument> <argument>-deploymentName</argument> <argument>hr1</argument> <argument>-bindAllWebApps</argument> </arguments> </configuration> </execution> </executions> </plugin> java -jar C:\server\oc4j_101310\j2ee\home\admin_client.jar deployer:oc4j:localhost oc4jadmin oc4jadmin -deploy -file hr1-ear-1.0-SNAPSHOT.ear -deploymentName hr1 -bindAllWebApps

  42. Project organisation • Directory layout • default Maven layout • Multi module projects

  43. ADF Archetype • AMIS maven-archetype-adf : mvn archetype:create -DarchetypeGroupId=nl.amis.maven.archetypes -DarchetypeArtifactId=maven-archetype-adf -DarchetypeVersion=10.1.3.1-1 -DremoteRepositories=http://amis-test-aa/maven2 -DgroupId=nl.amis.demo.odtug -DartifactId=hr1

  44. projectfile generation • Create jws and jpr files • myFaces - Trinidad JDev plugin • Add to internal (or local) repository • Execute (AMIS / AXI version) : • http://technology.amis.nl/blog/?p=1279 mvn nl.amis.maven.plugins:maven-axi-jdev-plugin:10.1.3.0.4:jdev

  45. Issues • Regeneration is possible • Add pom manually to project properties • Project and repo on same disk • No JHeadstart generation • but could be easily added • Version • No official Maven plugin yet

  46. Running Maven from JDeveloper • Waiting for a JDeveloper extension ;-) • Ant tasks

  47. Conclusion • Continuous integration is essential for the development process! • Using Maven, ADF Faces applications can be continuously integrated!

  48. aino.andriessen@amis.nl http://technology.amis.nl/blog

More Related