What is J2EE? - Oracle Software Downloads
Download
Report
Transcript What is J2EE? - Oracle Software Downloads
Session id: 40019
A DBA Perspective on J2EE
Debu Panda
Principal Product Manager
Oracle Corporation
Impedance Mismatch
Java
Developer
I love my
objects
and beans
I love my
tables
DBA
Overview
J2EE Overview
EJB Overview
Entity Bean Lifecycle for the DBAs
Persistence Options and related concerns
Optimizing CMP Entity beans for Oracle database
Other DBA Considerations
Additional Resources and Next Steps
Complete Your Survey (Session Id#40019)
Mind boggling J2EE
JSP
Servlet
JDBC
JTA
EJB
JMS
JNDI
JCA
J2EE
What is J2EE?
Java 2 Enterprise Edition (J2EE)
–
–
Platform to build scalable and portable applications in Java
Relies on a number of Java specifications
Servlets, JSPs, EJB, JMS, JDBC, JTA, JNDI, etc.
DBAs care most about JDBC,JTA and EJB
JDBC – Java APIs for Database access
JTA – Java APIs to manage transactions
EJB – Enterprise JavaBeans
Oracle Application Server Containers for J2EE
(OC4J) is J2EE 1.3 compliant
Develop J2EE Applications with Oracle
Application Server
http
JSP
OHS
Servlets
EJBs
(Session, Entity, MDBs)
Browser
JAAS
JDBC
JCA
Java Mail
JNDI
RMI-over-IIOP
JMS
CORBA
Client
RMI
JTA
EJB
Client
J2EE Container
Java VM
Oracle Application Server
Database
What is EJB
Reusable components that run inside a
container
Can be accessed either
–
–
Either local and remote Java programs
CORBA compliant client
EJB Container provides support for
–
–
–
Persistence
Access control
Transactions
Enterprise JavaBean Review
OC4J
EJB container
EJB
EJB
home
home
interface
object
EJB client
EJB
remote
interface
EJB
bean
EJB
remote
object
JMS client
Database
JMS
Listener
MDB
bean
Enterprise Services
Naming, Transactions, Security
Types of EJBs
Session Beans – encapsulate business logic
–
–
–
Transient in nature, cannot survive crash !
Stateless – Perform a task e.g. charge a credit
Stateful – Maintains state between calls e.g. shopping cart
Entity Beans – persistent in nature
–
–
Representation of data
Two types Bean Managed Persistence (BMP), Container
Managed Persistence (JMS)
Message Driven beans
–
–
–
A Java Message Service (JMS) listener (listens on a Topic
or Queue)
Reliably consume message
Can work with Oracle Advanced Queueing
Entity Beans Uncovered
Represent persistent objects
Have a Primary key for unique identification
BMP requires developers to code all
persistence
–
Use JDBC to perform persistence
CMP requires container to do the persistence
based on declarations
–
Container does database access based on
declarations by developer
Container Managed
Relationships
Only between CMP EJBs
Supports 1-1, 1-M, and M-M
Relationships can be
unidirectional or bi-directional
Relationships are persistent
just like EJBs
Can have DELETE-CASCADE
property
Customer
id: int
name: String
creditRating: int
*
Address
id: int
city: String
zip: String
Entity Bean Life Cycle
Bean constructor
ejbCreate(…)
primary key constructor
ejbSetEntityContext()
ejbPostCreate()
ejbUnsetEntityContext()
ejbRemove()
ejbStore()
EJB
object stub
Entity bean
ejbLoad()
create()
Client
remove()
EJB Container
EJB Server
Entity Bean Lifecycle and
database
Method
Operation
DB Operation
ejbCreate()
Create an entity bean
instance
INSERT to persist the
bean instance
ejbPostCreate() Set relationship
UPDATE foreign key or
INSERT if deferred write
ejbLoad()
Load a bean instance
using the supplied primary
key
SELECT statement to
retrieve a database row
ejbStore()
Update the corresponding
bean in the database
UPDATE to a database
row
ejbRemove()
Remove a bean instance
DELETE the record
findByXXX()
Find the beans based on a
certain condition
SELECT statement to
fetch one or multiple rows
EJB Creation
Happens in 2 steps
–
ejbCreate
Basic insert statement
–
ejbPostCreate
Relationships made here
Deferred constraints important because of this
2 step process
–
Only way to deal with mandatory foreign keys
EJB Removal
Simple delete from database
Can support cascade-delete
–
–
Only on 1 side of 1-1 or 1-M
relationships
Declared by tag when EJB is
deployed
X
Finding EJBs
EJB-QL is the EJBs language for queries
Similar to SQL-92 / SQL-99
Container creates findByPrimaryKey
Can create other finders
–
–
–
findAll selects whole table
Other finders limited only by EJB-QL
OC4J allows SQL more flexible than EJB-QL
select distinct object(e) from Emp e where
e.deptno = ?1
Loading EJB State
EJB is loaded when it is needed for
operation
–
Happens after it is found with findBy method
Container handles loading EJB persistent
state
Container loads all persistent attributes
Can do pessimistic or optimistic locking
Saving EJB State
Saving state occurs at end of
transaction
By default, container optimizes when
possible
–
–
Saves only changed attributes
Will not write out if no state changed
Developer can intervene with ejbStore
method
The Classic N+1 Problem
The N + 1 problem
–
–
–
Mostly with BMPs, with some CMP engines
Beans located via finder methods
Bean finders return PK values
1 read: select empno from emp where deptno = 100;
Container creates bean instances to return
–
Calls ejbLoad for each PK returned
N reads: select * from emp where empno = empPK;
J2EE Persistence Options
J2EE standards based options are
–
–
–
Direct JDBC from web-tier or EJB session beans
Entity beans with Bean Managed Persistence
Entity beans with Container Managed
Persistence
Additional technologies (Related Sessions !!)
–
–
Java-to-relational frameworks such as Oracle
Application Server TopLink
Oracle ADF (Application Development
Framework)
Direct Access with JDBC
Developer codes all interactions with database
–
Queries, inserts, updates, deletes using JDBC API
Common design pattern used – Data Access
Objects
–
–
Separates persistence from business logic
Avoids putting JDBC code directly in Servlet/JSPs
Nil to low overhead from container
–
–
Developer is responsible for opening/closing
resources
Transactions managed programmatically
Concurrency considerations
DBA Concerns: Review SQL
Bean Managed Persistence
Using BMP
–
–
–
All database interactions are manually coded
Container calls your code when it performs an
operation
Container still ultimately in control
Provides some implementation flexibility
–
–
Map to 1 or more tables, different storage systems
Make use of existing stored procedures
Performance perceptions and reality
–
–
Developer coded *may* be better than container
generated
Inherent problem with (n + 1) SQL calls
DBA Concerns: Database schema is coded into
bean, Review SQL
Container Managed Persistence
Using CMP
–
–
–
Developer specifies persistent attributes of object
Developer specifies how entity object maps to database
All JDBC code generated by container
Container is responsible for managing persistence
Container maintains relationships between objects
Requires less code than JDBC and BMP
Choice for persistence in J2EE Applications
DBA Concerns : Many !! If you are not using Oracle
Application Server
CMP development and
deployment Concerns
Container Managed Tables
–
–
Containers creates the tables and names those
Ask your developers to map to your schema
Container creates Primary key
–
–
If no primary key is assigned in Entity bean
OC4J names this column autoid by default
Container Managed Relationship
–
–
May create an extra table for maintaining relationship
You can use foreign key for mapping 1-M
Performance Concerns
Container generates the SQL
–
–
SQL statement that can cause
performance degradation by making full
table scans or unnecessary joins
Unnecessary Extra SQL statements
Developers specify finder methods
that can make full table scans
How to tune database for use with
CMPs
Optimizing CMP Entity beans
for Oracle database
Reduce database operations
Use right concurrency mode and
locking strategy
Tune your SQL/database
Reduce Database Operations
Enforce primary key constraint at database level
–
Avoid extra SQL for constraint checking by container
Exploit DELETE CASCADE at database level
–
Container generate multiple SQL statements
Defer EJB creation to end of transaction
–
This avoids an extra UPDATE statement
Batch update operations to end of transaction
Exploit eager loading of relationship
Reduce round trips with pre-fetch size
Avoid N+1 problem by switching off lazy-loading
Use Right Locking/Isolation
Mode
Choose the right isolation level for entity
beans
–
–
Avoid if possible at the bean level
COMMITTED performs better than Serializable
Choose right locking mode
–
–
Use Optimistic and Read-Only if possible
Pessimistic uses ‘SELECT FOR UPDATE’
Avoid database calls with Read-Only patterns
Database Tuning Tips for
CMPs
Make sure that your finder /select method uses
indexes.
Exploit statement caching by the container
Avoid findAll() on large tables as this makes full table
scans
Most EJB systems are OLTP in nature so tuning redo
is important
The basics of tuning any database are valid for EJBs
Use Statspack to find bottlenecks and tune your DB
OC4J Tools and
Instrumentation
Dynamic Monitoring System (DMS)
–
–
Instrumentation of application and server
Oracle Application Server Performance Guide
Platform dependant document
P6Spy
–
–
–
Plug in JDBC driver to capture SQL
Good development tool
http://www.p6spy.com
Statspack
OracleAS Toplink – A
Compelling Option
Improves developer productivity by providing a
flexible O-R Framework
–
–
Avoiding manual coding of interactions with database
Have years of experience in Java to RDB mapping
Can be used in any J2EE application
–
Servlets/JSPs / EJBs (BMP/CMP)
Reduces the load on database
–
–
–
Resolving the N+1 problem
By using caching data in the middle-tier and reading ‘Just
In Time’
Minimizing database calls
Utilize the features provided by databases
Respect and work with database locks
Other DBA Concerns
Database user passwords
–
–
–
Used in data-sources for connection
pooling
Stored in clear text, can be encrypted !
Changes require restart of container
OC4J uses an Oracle database for
commit coordinator for 2-Phase commit
–
–
Requires a 9i database as commit
coordinator
Requires database links
?
JMS and Oracle AQ
OC4J uses two JMS providers
–
–
OC4J JMS – Internal/in-memory JMS
OracleJMS – based in Oracle AQ
JMS uses
–
–
Queues – single consumer
Topics – multiple consumers
OracleJMS persists messages in AQ tables
–
As DBAs you have to manage these objects
Summary
J2EE is a popular platform
Persistence is the greatest challenge for
developers and may impact DBA’s life
DBAs and Developers work together to
improve the quality of J2EE applications
Reminder –
please complete the
OracleWorld session survey
Session Id : 40019
Thank you.
Next Steps ..
Related Sessions
–
–
#40292 - Improving performance of Your J2EE
Applications : Tips and Tricks, @ Moscone
Room 202, Tuesday 8:30am
#40038 – Understanding the Impacts of J2EE
Applications on Relational Databases,
@ Moscone 135, Wednesday 1:00pm
Visit Oracle Application Server Booths in
Demo Grounds
Attend OC4J Hands On Lab
otn.oracle.com
Join Over 3,000,000 Developers!
Free Technical Advice
Free Software Downloads
http://otn.oracle.com
Develop your career with Oracle’s experts
–
Web services, Forms Upgrade to the Web,
TopLink, Business Intelligence, Integration,
J2EE, Linux
Connect with your peers
Sign up at
http://otn.oracle.com/events/otnworkshop
QUESTIONS
ANSWERS