at-m42:lecture15
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
at-m42:lecture15 [2009/04/25 10:35] – eechris | at-m42:lecture15 [2011/01/14 12:45] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
~~SLIDESHOW~~ | ~~SLIDESHOW~~ | ||
- | ====== | + | ====== |
In principle, the business logic of an enterprise application could be performed by //domain objects// which implement a model of the business concept as Plain-Old Java Objects (POJOs). | In principle, the business logic of an enterprise application could be performed by //domain objects// which implement a model of the business concept as Plain-Old Java Objects (POJOs). | ||
Line 15: | Line 15: | ||
* [[#The key business tier services]] | * [[#The key business tier services]] | ||
* [[#The Java solution: Enterprise Java Beans]] | * [[#The Java solution: Enterprise Java Beans]] | ||
- | * [[# | + | * [[# |
* [[#Is the Java solution a good solution?]] | * [[#Is the Java solution a good solution?]] | ||
Line 107: | Line 107: | ||
* **[[#The key business tier services]]** | * **[[#The key business tier services]]** | ||
* [[#The Java solution: Enterprise Java Beans]] | * [[#The Java solution: Enterprise Java Beans]] | ||
- | * [[# | + | * [[# |
* [[#Is the Java solution a good solution?]] | * [[#Is the Java solution a good solution?]] | ||
Line 136: | Line 136: | ||
* Or simply to be stored in non-volatile memory. | * Or simply to be stored in non-volatile memory. | ||
* Your business objects want this to //just happen//! | * Your business objects want this to //just happen//! | ||
- | * **Transparent persistence**, | + | * **Transparent persistence**, |
* but persistence should also be a key part of transaction management and is a cornerstone of data integrity. | * but persistence should also be a key part of transaction management and is a cornerstone of data integrity. | ||
Line 172: | Line 172: | ||
* [[#The key business tier services]] | * [[#The key business tier services]] | ||
* **[[#The Java solution: Enterprise Java Beans]]** | * **[[#The Java solution: Enterprise Java Beans]]** | ||
- | * [[# | + | * [[# |
* [[#Is the Java solution a good solution?]] | * [[#Is the Java solution a good solution?]] | ||
Line 273: | Line 273: | ||
* [[#The key business tier services]] | * [[#The key business tier services]] | ||
* [[#The Java solution: Enterprise Java Beans]] | * [[#The Java solution: Enterprise Java Beans]] | ||
- | * **[[# | + | * **[[# |
* [[#Is the Java solution a good solution?]] | * [[#Is the Java solution a good solution?]] | ||
Line 289: | Line 289: | ||
import javax.ejb.*; | import javax.ejb.*; | ||
- | public interface | + | package uk.ac.swan.atm42.ejb; |
- | public String | + | |
+ | public interface | ||
+ | public String | ||
} | } | ||
</ | </ | ||
Line 298: | Line 300: | ||
In EJB 3, the details can be left to the container: interface is a plain-old-Java interface // | In EJB 3, the details can be left to the container: interface is a plain-old-Java interface // | ||
| | ||
- | <code java 1|Example 2: Remote interface for the DateHereBean (at-m42/ | + | <code java 1|Example 2: Remote interface for the DateHereBean (at-m42/ |
- | extern> http:// | + | extern> http:// |
</ | </ | ||
Line 320: | Line 322: | ||
===== Home interface for the TimeHere (EJB 2) ===== | ===== Home interface for the TimeHere (EJB 2) ===== | ||
- | <code java 1|Example 3: Remote interface for the DateHereBean (at-m42/ | + | <code java 1|Example 3: Remote interface for the DateHereBean (at-m42/ |
- | extern> http:// | + | extern> http:// |
</ | </ | ||
Line 332: | Line 334: | ||
- The return value and arguments of all methods must be valid RMI-IIOP data types. | - The return value and arguments of all methods must be valid RMI-IIOP data types. | ||
- | ===== PerfectTimeBean | + | ===== TimeHereBean |
<code java 1| Example 4: SessionBean implemented using EJB 2 conventions> | <code java 1| Example 4: SessionBean implemented using EJB 2 conventions> | ||
Line 366: | Line 368: | ||
* EJB is now a "Plain Old Java Object" | * EJB is now a "Plain Old Java Object" | ||
- | ===== PerfectTimeBean | + | ===== TimeHereBean |
- | <code java 1| Example 5: SessionBean implemented using EJB 3 conventions (at-m42/ | + | <code java 1| Example 5: SessionBean implemented using EJB 3 conventions (at-m42/ |
- | extern> http:// | + | extern> http:// |
</ | </ | ||
===== Deployment Descriptor (EJB 2) ===== | ===== Deployment Descriptor (EJB 2) ===== | ||
- | An XML file that describes the EJB component. Should be stored in a file called '' | + | An XML file that describes the EJB component. Should be stored in a file called '' |
- | <code xml 1|Example 6: Deployment Descriptor for the TimeHereBean (not required in EJB 3 containers) (at-m42/ | + | <code xml 1|Example 6: Deployment Descriptor for the TimeHereBean (not required in EJB 3 containers) (at-m42/ |
- | extern> http:// | + | extern> http:// |
</ | </ | ||
===== Deploying the EJB ===== | ===== Deploying the EJB ===== | ||
Line 383: | Line 385: | ||
* The deployment process is quite "GUI intensive2 and specific to the individual EJB Container. | * The deployment process is quite "GUI intensive2 and specific to the individual EJB Container. | ||
* The deployment process creates some client stubs for calling the EJB component. These classes should be placed on the CLASSPATH of the client application. | * The deployment process creates some client stubs for calling the EJB component. These classes should be placed on the CLASSPATH of the client application. | ||
- | * When a client program wishes to invoke an EJB it must look up the EJB component inside JNDI and obtain a reference to the home interface of the EJB component. The Home interface is used to create an instance of the EJB. | + | * When a client program wishes to invoke an EJB it must look up the EJB component inside JNDI and obtain a reference to the home interface of the EJB component. The Home interface is used to create an instance of the EJB. |
===== The Client ===== | ===== The Client ===== | ||
- | * Here a simple Java program but could just as easily be a servlet, a JSP or even a CORBA or RMI distributed object. | + | * Here a simple Java program but could just as easily be a servlet, a JSP or even a CORBA or RMI distributed object. |
- | <code java 1| Example 7: Client program for PerfectTimeBean | + | |
+ | <code java 1|Example 7: Client program for TimeHereBean | ||
+ | extern> http:// | ||
+ | </ | ||
+ | <code java 1| Example 7: Client program for TimeHereBean (at-m42/ | ||
+ | extern> http:// | ||
</ | </ | ||
Line 396: | Line 403: | ||
* [[#The key business tier services]] | * [[#The key business tier services]] | ||
* [[#The Java solution: Enterprise Java Beans]] | * [[#The Java solution: Enterprise Java Beans]] | ||
- | * [[# | + | * [[# |
* **[[#Is the Java solution a good solution? | * **[[#Is the Java solution a good solution? | ||
+ | ===== Is the Java Solution a Good Solution? ===== | ||
+ | * During 2004, the developer community decided that the answer is probably no. | ||
+ | * EJB 3 was a response to this, and uses annotations to simplify it. | ||
+ | * We will discuss this issue, and some of the alternatives in the final lecture. | ||
+ | * The TimeHere session EJB example gives a flavour of the complexity! To run the example, you’ll need an implementation of a Java EE container (e.g. Glassfish) to which you can deploy the bean. | ||
- | ===== Is the Java Solution a Good Solution? ===== | + | ===== Lecture |
- | During 2004, the developer community decided that the answer is probably no. | + | |
- | We will discuss this issue, and some of the alternatives in the final lecture. | + | |
- | Eckel’s PerfectTime session EJB example gives a flavour of the complexity! To run the example, you’ll need an implementation of a J2EE container to which you can deploy the bean. | + | |
- | It’s a good example of a bad design if nothing else! | + | |
- | + | ||
- | ===== Lecture | + | |
* [[#An example]] | * [[#An example]] | ||
* [[#The key business tier services]] | * [[#The key business tier services]] | ||
* [[#The Java solution: Enterprise Java Beans]] | * [[#The Java solution: Enterprise Java Beans]] | ||
- | * [[# | + | * [[# |
* [[#Is the Java solution a good solution?]] | * [[#Is the Java solution a good solution?]] | ||
Line 419: | Line 425: | ||
---- | ---- | ||
- | [[Home]] | [[lecture14|Previous Lecture]] | [[Lectures]] | [[lecture16|Next Lecture]] | + | [[Home]] | [[lecture15|Previous Lecture]] | [[Lectures]] | [[lecture16|Next Lecture]] |
- | ===== Lecture Content ===== | ||
- | |||
- | * [[#An example]] | ||
- | * [[#The key business tier services]] | ||
- | * [[#The Java solution: Enterprise Java Beans]] | ||
- | * [[# | ||
- | * **[[#Is the Java solution a good solution? | ||
- | |||
- | |||
- | |||
- | ===== Is the Java Solution a Good Solution? ===== | ||
- | During 2004, the developer community decided that the answer is probably no. | ||
- | We will discuss this issue, and some of the alternatives in the final lecture. | ||
- | Eckel’s PerfectTime session EJB example gives a flavour of the complexity! To run the example, you’ll need an implementation of a J2EE container to which you can deploy the bean. | ||
- | It’s a good example of a bad design if nothing else! | ||
- | |||
- | ===== Lecture Content ===== | ||
- | |||
- | * [[#An example]] | ||
- | * [[#The key business tier services]] | ||
- | * [[#The Java solution: Enterprise Java Beans]] | ||
- | * [[# | ||
- | * [[#Is the Java solution a good solution?]] | ||
- | |||
- | |||
- | |||
- | ---- | ||
- | [[Home]] | [[lecture14|Previous Lecture]] | [[Lectures]] | [[lecture16|Next Lecture]] |
at-m42/lecture15.1240655727.txt.gz · Last modified: 2011/01/14 12:24 (external edit)