ejb entity beans “modeling your data”. ejb container web container view model 2 with j2ee...

Post on 28-Dec-2015

212 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

EJB Entity Beans

“Modeling your data”

EJB ContainerWeb Container

View

Model 2 with J2EE EJB’s

Control Model

Session BeanWeb

Server

Servlet

JSP page

Session EJB

Model Two Architecture

JavaBean

JavaBean

Entity EJB

<<forward>>

HTTP Request

HTTP Response

Entity EJB

JavaBean

<<creates>>

Advantages

Automatic persistence management Share data in memory Automatic synchronization to the

database Simpler to use than JDBC or ADO Greater scalability, portability,

maintainability, reliability, code re-use Automatic transaction processing

Guidelines for use

Access Entity EJB ONLY!!! from a Session EJB

Entity EJBs should represent developers logical view of data NOT the physical model in the database.

Relationships View

Item

1

1

*

*

Use JDBC To Access Data

Class.forName("org.gjt.mm.mysql.Driver"); // load jdbc driver classes

String url = "jdbc:mysql://localhost/northwind"; connection = DriverManager.getConnection(url, "USERNAME", ”PASSWORD");

statement = connection.createStatement(); String sql = "SELECT C.*, O.*, I.* " + "FROM Customer C INNER JOIN Orders O INNER JOIN Items I " +

"ON C.customerId = O.FK_CustomerId " + "ON O.FK_ItemId = I.ItemId";

ResultSet resultSet = statement.executeQuery("SELECT * from customers"); while( resultSet.next() ) { String companyName = resultSet.getString( "CompanyName" ); System.out.printlin("\nCompanyName = " + companyName;) }

Object Oriented View

Customer

Order

Item

Object Oriented Viewpublic class Customer implements Serializable {

private String name;

private ArrayList<Order> orders;

public Customer() {

}

public getName() {

return this.name;

}

public setName(String name) {

this.name = name;

}

public getOrders() {

return this.orders;

}

public setOrders(ArrayList<Order> orders) {

this.orders = orders;

}

}

}

private ArrayList<Order> orders;

public getOrders() {return this.orders;

}

public setOrders(ArrayList<Order> orders) {this.orders = orders;

}

Object Oriented Viewpublic class Order implements Serializable {

private long quantity;

private Item item;

public Order() {

}

public getQuantity() {

return this.quantity;

}

public setQuantity (long quantity) {

this. quantity= quantity;

}

public getItem() {

return this.item;

}

public setItem(Item orders) {

this.item = item;

}

}

}

private Item item;

public getItem() {return this.item;

}

public setItem(Item orders) {this.item = item;

}

public getItem() {return this.item;

}

public setItem(Item orders) {this.item = item;

}

Use Getter/Setters to Data

public class GetChildData {

public double totalOrders (Customer customer) {

double total = 0;

ArrayList<Order> orders = customer.getOrders();

for (Iterator<Order> iterator = orders.iterator(); iterator.hasNext();) {

Order order = (Order) iterator .next();

double price = order.getItem().getPrice();

double extendedPrice = order.getQuantity() * price;

total += extendedPrice;

}

return total;

}

}

ArrayList<Order> orders = customer.getOrders();ArrayList<Order> orders = customer.getOrders();

double price = order.getItem().getPrice();double price = order.getItem().getPrice();

Insert object into Datastore

public void addBranch() { // create a branch java bean Branch branch = new Branch(); branch.setName(“Bank of Nauvoo”); branch.setPhone(“203-356-1426”);

// inserts a branch into the database entityManager.persist(branch); }

Update Object in Datastore

public void renameBranch(String branchid, String newName) { // get branch by its Primary Key from datastore Branch branch = (Branch) entityManager.find(Branch.class, branchid); // update the branch branch.setBranchname(newName); entityManager.merge(branch);}

Delete Object from Datastore

public void deleteBranch(String branchid) { // get branch by its Primary Key from datastore Branch branch = (Branch) entityManager.find(Branch.class, branchid); // Delete the branch entityManager.remove(branch);}

Query Object/s from Datastore

public Collection<Branch> getBranches(String name){

// Define query prepared statement String ejbql = "SELECT b FROM Branch b WHERE b.branchname LIKE :branchname”; // Create query object Query query = entityManager.createQuery(ejbql);

// Substitute value to search for in prepared statement query.setParameter("branchname", searchValue); // Execute query to get list of branches List<Branch>branches = query.getResultList();

return branches;}

Entity Bean query language (ejb-ql)

select_clause from_clause [where_clause]

select_clause ::= SELECT [DISTINCT] {identification_variable | single_valued_path_expression }

single_valued_path_expression ::= {single_valued_navigation | identification_variable }

.cmp_field | single_valued_navigation }

SELECT DISTINCT j. *

FROM JOB as j

SELECT DISTINCT jFROM Job AS j

Examples:

Entity Bean query language (ejb-ql)

from_clause ::= {abstract_schema_name | collection_member_declaration}

[AS] identifictation_variable

collection_member_declaration ::= INNER JOIN (collection_valued_path_expression)

collection_valued_path_expression ::= idetification_variable.

[single_valued_cmr_field.]

collection_valued_cmr_field

select_clause from_clause [where_clause]

Entity Bean query language (ejb-ql)

from_clause ::= {abstract_schema_name | collection_member_declaration}

[AS] identifictation_variable

select_clause from_clause [where_clause]

SELECT jFROM Job AS j

From Examples:

SELECT j.*FROM Job AS j

SQL equivalent:

Entity Bean query language (ejb-ql)

from_clause ::= {abstract_schema_name | collection_member_declaration}

[AS] identifictation_variable

collection_member_declaration ::= INNER JOIN (collection_valued_path_expression)

collection_valued_path_expression ::= idetification_variable.

[single_valued_cmr_field.]

collection_valued_cmr_field

select_clause from_clause [where_clause]

SELECT sFROM Job AS j, INNER JOIN j.Skills AS s

From Examples:

SELECT s.*FROM Job AS j INNER JOIN JobSkill AS sON j.FK_skillID = s.skillID

SQL equivalent:

Entity Bean query language (ejb-ql)

select_clause from_clause [where_clause]

SELECT OBJECT(o)FROM Customer AS c, INNER JOIN c.orders AS o, INNER JOIN o.items AS I

Where Examples:

SELECT C.*, O.*, I.*  FROM Customer C INNER JOIN Orders O INNER JOIN Items ION C.customerId = O.FK_CustomerIdON O.FK_ItemId = I.ItemId

SQL equivalent:

top related