19
EJB Entity Beans “Modeling your data”

EJB Entity Beans “Modeling your data”. EJB Container Web Container View Model 2 with J2EE EJB’s ControlModel Session Bean Web Server Servlet JSP page

Embed Size (px)

Citation preview

Page 1: EJB Entity Beans “Modeling your data”. EJB Container Web Container View Model 2 with J2EE EJB’s ControlModel Session Bean Web Server Servlet JSP page

EJB Entity Beans

“Modeling your data”

Page 2: EJB Entity Beans “Modeling your data”. EJB Container Web Container View Model 2 with J2EE EJB’s ControlModel Session Bean Web Server Servlet JSP page

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>>

Page 3: EJB Entity Beans “Modeling your data”. EJB Container Web Container View Model 2 with J2EE EJB’s ControlModel Session Bean Web Server Servlet JSP page

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

Page 4: EJB Entity Beans “Modeling your data”. EJB Container Web Container View Model 2 with J2EE EJB’s ControlModel Session Bean Web Server Servlet JSP page

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.

Page 5: EJB Entity Beans “Modeling your data”. EJB Container Web Container View Model 2 with J2EE EJB’s ControlModel Session Bean Web Server Servlet JSP page

Relationships View

Item

1

1

*

*

Page 6: EJB Entity Beans “Modeling your data”. EJB Container Web Container View Model 2 with J2EE EJB’s ControlModel Session Bean Web Server Servlet JSP page

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;) }

Page 7: EJB Entity Beans “Modeling your data”. EJB Container Web Container View Model 2 with J2EE EJB’s ControlModel Session Bean Web Server Servlet JSP page

Object Oriented View

Customer

Order

Item

Page 8: EJB Entity Beans “Modeling your data”. EJB Container Web Container View Model 2 with J2EE EJB’s ControlModel Session Bean Web Server Servlet JSP page

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;

}

Page 9: EJB Entity Beans “Modeling your data”. EJB Container Web Container View Model 2 with J2EE EJB’s ControlModel Session Bean Web Server Servlet JSP page

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;

}

Page 10: EJB Entity Beans “Modeling your data”. EJB Container Web Container View Model 2 with J2EE EJB’s ControlModel Session Bean Web Server Servlet JSP page

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();

Page 11: EJB Entity Beans “Modeling your data”. EJB Container Web Container View Model 2 with J2EE EJB’s ControlModel Session Bean Web Server Servlet JSP page

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); }

Page 12: EJB Entity Beans “Modeling your data”. EJB Container Web Container View Model 2 with J2EE EJB’s ControlModel Session Bean Web Server Servlet JSP page

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);}

Page 13: EJB Entity Beans “Modeling your data”. EJB Container Web Container View Model 2 with J2EE EJB’s ControlModel Session Bean Web Server Servlet JSP page

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);}

Page 14: EJB Entity Beans “Modeling your data”. EJB Container Web Container View Model 2 with J2EE EJB’s ControlModel Session Bean Web Server Servlet JSP page

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;}

Page 15: EJB Entity Beans “Modeling your data”. EJB Container Web Container View Model 2 with J2EE EJB’s ControlModel Session Bean Web Server Servlet JSP page

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:

Page 16: EJB Entity Beans “Modeling your data”. EJB Container Web Container View Model 2 with J2EE EJB’s ControlModel Session Bean Web Server Servlet JSP page

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]

Page 17: EJB Entity Beans “Modeling your data”. EJB Container Web Container View Model 2 with J2EE EJB’s ControlModel Session Bean Web Server Servlet JSP page

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:

Page 18: EJB Entity Beans “Modeling your data”. EJB Container Web Container View Model 2 with J2EE EJB’s ControlModel Session Bean Web Server Servlet JSP page

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:

Page 19: EJB Entity Beans “Modeling your data”. EJB Container Web Container View Model 2 with J2EE EJB’s ControlModel Session Bean Web Server Servlet JSP page

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: