Enterprise Java EE Enterprise Archive EAR v 090401

  • Slides: 27
Download presentation
Enterprise Java EE Enterprise Archive (EAR) v 090401 Java. EE EAR 1

Enterprise Java EE Enterprise Archive (EAR) v 090401 Java. EE EAR 1

Goals Enterprise Java • Understand the purpose for an EAR • Be able to

Goals Enterprise Java • Understand the purpose for an EAR • Be able to construct an EAR for developed Java EE components v 090401 Java. EE EAR 2

Objectives Enterprise Java • EAR Purpose • EAR Format v 090401 Java. EE EAR

Objectives Enterprise Java • EAR Purpose • EAR Format v 090401 Java. EE EAR 3

Class Loaders Enterprise Java Parent Class Loader Child Class Loader • Arranged in a

Class Loaders Enterprise Java Parent Class Loader Child Class Loader • Arranged in a parent/child relationship • Requests for a class are first delegated to the parent class loader • May access classes/resources loaded by local and parent class loader • Do not have access to classes/resources loaded by sibling class loaders v 090401 Java. EE EAR 4

Separate EJB/WAR Deployment Enterprise Java Application Server Class Loader EJB App Class Loader Web

Separate EJB/WAR Deployment Enterprise Java Application Server Class Loader EJB App Class Loader Web App Class Loader • Classes loaded by EJB Application Class Loader not seen by Web Application • Shared implementations must be placed in both applications – WEB-INF/lib – causes difficulty when passing object between applications that have loaded the same class v 090401 Java. EE EAR 5

J 2 EE Enterprise Application Deployment Enterprise Java Application Server Class Loader EAR Class

J 2 EE Enterprise Application Deployment Enterprise Java Application Server Class Loader EAR Class Loader EJB interfaces and dependent classes identified by EJB manifests loaded by EAR’s classloader EJB App Class Loader Web App 2 Class Loader Web App 1 Class Loader v 090401 EAR Class Loader All EJBs are loaded by a single class loader • may also include web dependent classes identified through manifest entries to promote singleton loading of classes across web applications Servlets/JSPs and lib. jars loaded by isolated classloaders Java. EE EAR 6

Enterprise Java Enterprise Application Archive (EAR) EAR • WAR WAR EJB EJB • Utility

Enterprise Java Enterprise Application Archive (EAR) EAR • WAR WAR EJB EJB • Utility Classes Client App • • Resource Adapter • WAR(s) – directory or archive EJB(s) – directory or archive Client JAR(s) – client applications Utility Classes(s) – directory or archive – supplies external source utility classes – referenced through MANIFESTs Resource Adapters(s) – custom resource drivers META-INF/application. xml v 090401 Java. EE EAR 7

Directory and Archive Forms Enterprise Java • Exploded Directory Form – ability to modify

Directory and Archive Forms Enterprise Java • Exploded Directory Form – ability to modify static files (html/jsp) without redeploying – separate server serves up content in exploded form – simpler build environment • consistent with build environment of free versions of IDEs (Forte, JBuilder, etc. ) • Archive File Format – easy form of distribution v 090401 Java. EE EAR 8

Enterprise Java application. xml application icon small-icon display-name description? large-icon web-uri security-role* description? ejb|connector|java|web

Enterprise Java application. xml application icon small-icon display-name description? large-icon web-uri security-role* description? ejb|connector|java|web v 090401 module+ alt-dd role-name context-root Java. EE EAR 9

Element Definitions Enterprise Java • Application – Declares the overall enterprise application • Deployment

Element Definitions Enterprise Java • Application – Declares the overall enterprise application • Deployment Tool Info – icon, display-name, description • Modules – – ejb – EJBs (Ex. EJB 1. jar) web – web applications java - client applications connector – JCA resource adapters v 090401 Java. EE EAR 10

Element Definitions (Cont) Enterprise Java • Web applications – web-uri (ex. webapp 1. war)

Element Definitions (Cont) Enterprise Java • Web applications – web-uri (ex. webapp 1. war) – context-root • Name of web app’s context • May be empty if only one webapp in the application • alt-dd – Can override the deployment descriptor found in the module • security-role – Define application-level security roles v 090401 Java. EE EAR 11

application. xml Example <? xml version="1. 0" encoding="UTF-8"? > <!DOCTYPE application PUBLIC "-//Sun Microsystems,

application. xml Example <? xml version="1. 0" encoding="UTF-8"? > <!DOCTYPE application PUBLIC "-//Sun Microsystems, Inc. //DTD J 2 EE Application 1. 3//EN" "http: //java. sun. com/dtd/application_1_3. dtd"> <application> <display-name>ejbsession. Bank. EAR</display-name> <description>Example Session Bean Bank Application</description> <module> <web-uri>ejbsession. Bank. WAR. war</web-uri> <context-root>/ejbsession. Bank. WAR</context-root> </web> </module> <ejb>ejbsession. Bank. EJB-1. 0. 2007. 2 -SNAPSHOT. jar</ejb> </module> v 090401 Java. EE EAR Enterprise Java 12

Example Project with EAR Enterprise Java • ejbsession. Bank> jar tf ejbsession. Bank. EAR/target/ejbsession.

Example Project with EAR Enterprise Java • ejbsession. Bank> jar tf ejbsession. Bank. EAR/target/ejbsession. Bank. EAR-1. 0. 2007. 2 -SNAPSHOT. ear META-INF/MANIFEST. MF ejbsession. Bank. Impl-1. 0. 2007. 2 -SNAPSHOT. jar ejbsession. Bank. WAR. war ejbsession. Bank. EJB-1. 0. 2007. 2 -SNAPSHOT. jar META-INF/application. xml • EJB META-INF/MANIFEST. MF Manifest-Version: 1. 0 Archiver-Version: Plexus Archiver Created-By: Apache Maven Built-By: Stafford. J Build-Jdk: 1. 5. 0_17 Class-Path: commons-logging-1. 0. 4. jar ejbsession. Bank. Impl-1. 0. 2007. 2 -SNAPSHOT. jar v 090401 Java. EE EAR 13

Enterprise Java Example Project with EAR: source tree • • • ejbsession. Bank> tree.

Enterprise Java Example Project with EAR: source tree • • • ejbsession. Bank> tree. |-- ejbsession. Bank. Impl. . . |-- ejbsession. Bank. EAR | |-- pom. xml |-- ejbsession. Bank. EJB. . . |-- ejbsession. Bank. Test. . . |-- ejbsession. Bank. WAR. . . |-- pom. xml v 090401 Java. EE EAR 14

Enterprise Java Example Project with EAR: root pom. xml <? xml version="1. 0" encoding="UTF-8"?

Enterprise Java Example Project with EAR: root pom. xml <? xml version="1. 0" encoding="UTF-8"? > <project xmlns="http: //maven. apache. org/POM/4. 0. 0" xmlns: xsi="http: //www. w 3. org/2001/XMLSchema-instance" xsi: schema. Location="http: //maven. apache. org/POM/4. 0. 0 http: //maven. apache. org/maven-v 4_0_0. xsd"> <model. Version>4. 0. 0</model. Version> <group. Id>ejavaee. ejb</group. Id> <artifact. Id>ejbsession. Bank</artifact. Id> <packaging>pom</packaging> <name>Session Bean</name> <version>1. 0 -SNAPSHOT</version> <description> This project is the root project for the core session bean example. </description> <modules> <module>ejbsession. Bank. Impl</module> <module>ejbsession. Bank. EJB</module> <module>ejbsession. Bank. WAR</module> <module>ejbsession. Bank. EAR</module> <module>ejbsession. Bank. Test</module> </modules> </project> v 090401 Java. EE EAR 15

Enterprise Java Example Project with EAR: ear pom. xml <model. Version>4. 0. 0</model. Version>

Enterprise Java Example Project with EAR: ear pom. xml <model. Version>4. 0. 0</model. Version> <group. Id>ejavaee. ejb</group. Id> <artifact. Id>ejbsession. Bank. EAR</artifact. Id> <packaging>ear</packaging> <name>Session Bank EAR</name> <version>1. 0 -SNAPSHOT</version> <dependencies> <dependency> <group. Id>${pom. group. Id}</group. Id> <artifact. Id>ejbsession. Bank. EJB</artifact. Id> <version>${pom. version}</version> <type>ejb</type> </dependency> <group. Id>${pom. group. Id}</group. Id> <artifact. Id>ejbsession. Bank. WAR</artifact. Id> <version>${pom. version}</version> <type>war</type> </dependency> v 090401 </dependencies> Java. EE EAR 16

Example Project with EAR: excluding unwanted dependencies Enterprise Java <dependency> <group. Id>${pom. group. Id}</group.

Example Project with EAR: excluding unwanted dependencies Enterprise Java <dependency> <group. Id>${pom. group. Id}</group. Id> <artifact. Id>ejbsession. Bank. EJB</artifact. Id> <version>${pom. version}</version> <type>ejb</type> <exclusions> <exclusion> <group. Id>commons-logging</group. Id> <artifact. Id>commons-logging</artifact. Id> </exclusions> </dependency> v 090401 Java. EE EAR 17

Enterprise Java Example Project with EAR: ear plugin <build> <plugins> <plugin> <group. Id>org. apache.

Enterprise Java Example Project with EAR: ear plugin <build> <plugins> <plugin> <group. Id>org. apache. maven. plugins</group. Id> <artifact. Id>maven-ear-plugin</artifact. Id> <configuration> <description> Example Session Bean Bank Application </description> <modules> <web. Module> <group. Id>${pom. group. Id}</group. Id> <artifact. Id>ejbsession. Bank. WAR</artifact. Id> <context. Root>ejbsessionbank</context. Root> </web. Module> </modules> </configuration> </plugins> </build> v 090401 Java. EE EAR 18

Example EAR Project: build output Enterprise Java > tree. |-- pom. xml `-- target

Example EAR Project: build output Enterprise Java > tree. |-- pom. xml `-- target |-- application. xml |-- ejbsession. Bank. EAR-1. 0. 2007. 2 -SNAPSHOT | |-- META-INF | | `-- application. xml | |-- ejbsession. Bank. Impl-1. 0. 2007. 2 -SNAPSHOT. jar | |-- ejbsession. Bank. EJB-1. 0. 2007. 2 -SNAPSHOT. jar | `-- ejbsession. Bank. WAR-1. 0. 2007. 2 -SNAPSHOT. war `-- ejbsession. Bank. EAR-1. 0. 2007. 2 -SNAPSHOT. ear v 090401 Java. EE EAR 19

Example EAR Project: deploying EAR with cargo (Test/pom. xml) Enterprise Java <plugin> <group. Id>org.

Example EAR Project: deploying EAR with cargo (Test/pom. xml) Enterprise Java <plugin> <group. Id>org. codehaus. cargo</group. Id> <artifact. Id>cargo-maven 2 -plugin</artifact. Id> <configuration> <container. Id>jboss 4 x</container. Id> <type>remote</type> </container> </configuration> <executions> <execution>. . . </execution> </executions> </plugin> v 090401 Java. EE EAR 20

Example EAR Project: deploying EAR with cargo (Test/pom. xml) Enterprise Java <execution> <id>deploy-component</id> <!--

Example EAR Project: deploying EAR with cargo (Test/pom. xml) Enterprise Java <execution> <id>deploy-component</id> <!-- jump into a phase before surefire runs tests --> <phase>test-compile</phase> <goals> <goal>undeploy</goal> <goal>deploy</goal> </goals> <configuration> <type>runtime</type> <properties> <cargo. remote. username>${jboss. user}</cargo. remote. username> <cargo. remote. password>${jboss. password}</cargo. remote. password> </properties> </configuration>. . . v 090401 Java. EE EAR 21

Example EAR Project: deploying EAR with cargo (Test/pom. xml) Enterprise Java . . .

Example EAR Project: deploying EAR with cargo (Test/pom. xml) Enterprise Java . . . <deployer> <type>remote</type> <deployables> <deployable> <group. Id>${pom. group. Id}</group. Id> <artifact. Id>ejbsession. Bank. EAR</artifact. Id> <type>ear</type> </deployables> </deployer> </configuration> </execution> v 090401 Java. EE EAR 22

Example EAR Project: deploying EAR with cargo (Test project output) Enterprise Java • Test

Example EAR Project: deploying EAR with cargo (Test project output) Enterprise Java • Test output [INFO] Building Session Bank Test [INFO] task-segment: [install] [INFO] --------------------------------------. . . [INFO] [cargo: undeploy {execution: deploy-component}] [INFO] [cargo: deploy {execution: deploy-component}] • Server Console 23: 38: 50, 173 INFO [EARDeployer] Undeploying J 2 EE application, destroy step: file: /home/jcstaff/proj/ejavaee/working/ejbsession. Bank. EAR/target/ejbsession. Bank. EAR 1. 0. 2007. 2 -SNAPSHOT. ear 23: 38: 50, 174 INFO [EARDeployer] Undeployed J 2 EE application: file: /home/jcstaff/proj/ejavaee/working/ejbsession. Bank. EAR/target/ejbsession. Bank. EAR 1. 0. 2007. 2 -SNAPSHOT. ear 23: 38: 50, 272 INFO [EARDeployer] Init J 2 EE application: file: /home/jcstaff/proj/ejavaee/working/ejbsession. Bank. EAR/target/ejbsession. Bank. EARv 090401 Java. EE EAR 1. 0. 2007. 2 -SNAPSHOT. ear 23

Example EAR Project: undeploying EAR with cargo (EAR/pom. xml) Enterprise Java <plugin> <group. Id>org.

Example EAR Project: undeploying EAR with cargo (EAR/pom. xml) Enterprise Java <plugin> <group. Id>org. codehaus. cargo</group. Id> <artifact. Id>cargo-maven 2 -plugin</artifact. Id> <configuration> <container. Id>jboss 4 x</container. Id> <type>remote</type> </container> </configuration> <executions> <execution> <id>undeploy-ear</id> <phase>pre-clean</phase> <goals> <goal>undeploy</goal> </goals> <configuration> <type>runtime</type>. . . v 090401 Java. EE EAR 24

Example EAR Project: undeploying EAR with cargo (EAR/pom. xml) Enterprise Java . . .

Example EAR Project: undeploying EAR with cargo (EAR/pom. xml) Enterprise Java . . . <properties> <cargo. remote. username>${jboss. user}</cargo. remote. username> <cargo. remote. password>${jboss. password}</cargo. remote. password> </properties> </configuration> <deployer> <type>remote</type> <deployables> <deployable> <group. Id>${pom. group. Id}</group. Id> <artifact. Id>${pom. artifact. Id}</artifact. Id> <type>ear</type> </deployables> </deployer> </configuration> </executions> </plugin> v 090401 Java. EE EAR 25

Example EAR Project: undeploying EAR with cargo (EAR project output) Enterprise Java • Build

Example EAR Project: undeploying EAR with cargo (EAR project output) Enterprise Java • Build output > mvn clean -Pundeploy. . . [INFO] Building Session Bank EAR [INFO] task-segment: [clean] [INFO] --------------------------------------[INFO] [cargo: undeploy {execution: undeploy-ear}] [INFO] [clean: clean]. . . • Server console 23: 48: 58, 499 INFO [EARDeployer] Undeploying J 2 EE application, destroy step: file: /home/jcstaff/proj/ejavaee/working/ejbsession. Bank. EAR/target/ejbsession. Bank. EAR 1. 0. 2007. 2 -SNAPSHOT. ear 23: 48: 58, 500 INFO [EARDeployer] Undeployed J 2 EE application: file: /home/jcstaff/proj/ejavaee/working/ejbsession. Bank. EAR/target/ejbsession. Bank. EAR 1. 0. 2007. 2 -SNAPSHOT. ear v 090401 Java. EE EAR 26

Summary Enterprise Java • EARs provide a standard deployment package to the application server

Summary Enterprise Java • EARs provide a standard deployment package to the application server • Application server class loader(s) are designed to provide efficient sharing of resources defined within the EAR • EAR is a deployment package, cannot be unit tested – requires deployment – requires functional testing that incorporates application server v 090401 Java. EE EAR 27