Enterprise Java Bean
Enterprise Java Bean
1
Enterprise JAVA Bean
5
Types
Type Description
Session Bean Session bean stores data of a particular user
for a single session. It can be stateful or
stateless. It is less resource intensive as
compared to entity beans. Session bean gets
destroyed as soon as user session terminates.
Entity Bean Entity beans represents persistent data
storage. User data can be saved to database
via entity beans and later on can be retrieved
from the database in the entity bean.
Message Message driven beans are used in context of
6
Stateless
The session bean contains no conversational state
between methods, and any instance can be used for
any client. It is used to handle tasks that can be
concluded with a single method call.
Stateful
The session bean contains conversational state, which
must be retained across methods for a single user. It is
useful for tasks that have to be done in several steps.
Singleton 7
8
Services Given by the Container
State management:
For stateful session beans, the container manages their state
transparently. You can maintain state for a particular client, as if
you were developing a desktop application.
Pooling:
For stateless beans and MDBs, the container creates a pool of
instances that can be shared by multiple clients. Once invoked, an
EJB returns to the pool to be reused instead of being destroyed.
Component life cycle:
The container is responsible for managing the life cycle of each
component.
9
Services Given by the Container
Messaging:
The container allows MDBs to listen to destinations and
consume messages without too much JMS plumbing.
Transaction management:
With declarative transaction management, an EJB can use
annotations to inform the container about the transaction
policy it should use. The container takes care of the commit
or the rollback.
Security:
Class or method-level access control can be specified on
EJBs to enforce user and role authorization.
11
Services Given by the Container
Concurrency support:
Except for singletons, where some concurrency
declaration is needed, all the other types of EJB are
thread-safe by nature. You can develop high-
performance applications without worrying about
thread issues.
Asynchronous method invocation:
Since EJB 3.1, it’s now possible to have asynchronous
calls without involving messaging.
12
EJBs a set of service cannot create or
manage
threads,
access files using java.io,
create a ServerSocket,
load a native library, or
use the AWT (Abstract Window Toolkit)or
Swing APIs to interact with the user.
13
EJB Lite
A bean class:
The bean class contains the business method
implementation and can implement zero or
several business interfaces. The session bean
must be annotated with @Stateless, @Stateful,
or @Singleton depending on its type.
Business interfaces:
These interfaces contain the declaration of
business methods that are visible to the client 16
17
Remote, Local, and No-Interface Views
18
EJB - Environment Setup
19
Create Project
20
21
22
EJB - Stateless Bean
24
Remote Interface
import javax.ejb.Remote;
@Remote
public interface
LibrarySessionBeanRemote {
//add business method declarations
}
25
Stateless EJB
@Stateless
public class LibrarySessionBean implements
LibrarySessionBeanRemote {
//implement business method
}
26
Enterprise JavaBean Architecture
28
EJB Server
Represents Data
Implements javax.ejb.EntityBean interface
Maps a data source to a Java class
table, view, join or stored procedure in a
relational database
a set of related records in a database
legacy data
Each instance of an entity bean is one row of data
34
• Always transactional
EJB Persistence
38
1. Servlet-->
<!-- addNumbers.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Add Two Numbers</title>
</head>
<body>
<form action="AddServlet" method="POST">
<label for="num1">Number 1:</label>
<input type="number" id="num1" name="num1" required>
<br><br>
<label for="num2">Number 2:</label>
<input type="number" id="num2" name="num2" required>
<br><br>
<button type="submit">Add</button>
</form>
39
</body>
</html>
Step 2: Create the servlet AddServlet to process the form data.
// AddServlet.java
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
response.setContentType("text/html");
response.getWriter().println("Sum of " + num1 + " and " + num2 + " is " + sum); //writes the result as HTML back to the client
40
}
}
Option 2: Using JavaBeans : step 1 Html
file
<!-- addNumbersBean.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
</head>
<body>
<br><br>
<br><br>
<button type="submit">Add</button>
</form>
</body>
</html>
41
Summary of method 1
The servlet approach directly handles form submission, parses data, performs
addition, and sends the result back in the response. However, it does not
separate logic into reusable components.
42
Using JavaBeans Step 2: Create CalculatorBean JavaBean for business logic.
// CalculatorBean.java
import java.io.Serializable;
public class CalculatorBean implements Serializable {
private int num1;
private int num2;
// Getters and setters
public int getNum1() {
return num1; }
public void setNum1(int num1) {
this.num1 = num1; }
public int getNum2() {
return num2; }
public void setNum2(int num2) {
this.num2 = num2; }
public int getSum() {
return num1 + num2; 43
}}
Step 3: Create a servlet that uses CalculatorBean to add two numbers.
This servlet handles the HTTP POST request, interacts with the CalculatorBean to get the sum, and sends the response back to the user.
// AddBeanServlet.java
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/AddBeanServlet")
public class AddBeanServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int num1 = Integer.parseInt(request.getParameter("num1"));
int num2 = Integer.parseInt(request.getParameter("num2"));
45
Option 3: Using EJB
To implement the third option using Enterprise JavaBeans (EJB), we will create an EJB
component that performs the addition of two numbers. In this example, we’ll use a
stateless session bean with a remote interface, making the EJB accessible remotely
if needed. The implementation will include the following steps:
1.Remote Interface: Defines the method for addition that will be accessible to clients.
2.EJB Implementation: Implements the addition logic in a stateless session bean.
3.Servlet: Acts as a client to call the EJB and display the result.
4.HTML Form: A simple HTML file to get the user input for the two numbers.
46
Option 3: Using EJB :step 1
@Remote
public interface CalculatorBeanRemote {
int add(int num1, int num2);
}
•This is the remote interface that the EJB will implement. The @Remote annotation allows remote clients to access
this EJB across the network.
•add method specifies the addition logic that the EJB will provide.
•The @Remote interface in EJB specifies that the bean's methods can be called by clients located in a different
Java Virtual Machine (JVM). This means that the interface is used to access the EJB remotely, which is common in
distributed applications. The CalculatorBeanRemote interface serves as a contract that defines which methods are
accessible to clients, ensuring that clients interact with the EJB through a standard set of methods.
47
Step 2: Implement the Stateless Session Bean
The CalculatorBean class implements the CalculatorBeanRemote interface and provides the business
logic for the addition operation. We use the @Stateless annotation to indicate that this is a stateless
session bean.
// CalculatorBean.java
import javax.ejb.Stateless;
@Stateless
public class CalculatorBean implements CalculatorBeanRemote {
@Override
public int add(int num1, int num2) {
return num1 + num2;
}
}
48
Step 3: Create the Servlet to Access the EJBThe servlet (AddServlet) acts as a
client of the EJB. It receives user input, interacts with the EJB to calculate
the sum, and displays the result.
49
// AddServlet.java
import java.io.IOException;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/AddServlet")
@EJB //This annotation injects an instance of CalculatorBeanRemote into the servlet, allowing it to access the EJB.
@Override
//doPost: Handles the form submission via HTTP POST. It retrieves input values, calls the EJB’s add method to get the sum, and sends the result back to the client.
response.setContentType("text/html"); 50
response.getWriter().println("Sum of " + num1 + " and " + num2 + " is " + sum); }}
Step 4: Create the HTML Form for User InputThe HTML form (addNumbersEJB.html) gathers the two numbers from the
user and sends them to the servlet.
<!-- addNumbersEJB.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Add Two Numbers Using EJB</title>
</head>
<body>
<form action="AddServlet" method="POST">
<label for="num1">Number 1:</label>
<input type="number" id="num1" name="num1" required>
<br><br>
<label for="num2">Number 2:</label>
<input type="number" id="num2" name="num2" required>
<br><br>
<button type="submit">Add</button>
</form>
</body> 51
</html>
Summary of Workflow
HTML Form (addNumbersEJB.html): Collects user input (two numbers) and submits to AddServlet.
Servlet (AddServlet): Processes form data, invokes the EJB, and displays the result.
EJB Remote Interface (CalculatorBeanRemote): Defines the add method for the EJB.
EJB Implementation (CalculatorBean): Implements the addition logic.
How to Run the ApplicationDeploy:
Deploy the EJB (CalculatorBean) and the servlet (AddServlet) in an application server that supports
EJB (like GlassFish or WildFly).
Access the Form: Open addNumbersEJB.html in a web browser.
Submit Form: Enter two numbers and submit to see the result, which is displayed after calculation
by the EJB.
This setup demonstrates using EJB with a remote interface and shows how the servlet acts as a
client to the EJB, handling the presentation layer while the EJB encapsulates the business logic for
addition.
52
Remote, Local, and No-Interface
EJB supports three types of access interfaces:
Beans
Explained
Remote, Local, and No-Interface beans.
Each has a specific use case, depending on the client’s location and the application's architecture.
A. Remote Interface (@Remote)
•Usage: When the EJB needs to be accessed from clients located in different JVMs or from different
application servers.
•Client Location: Remote clients, such as those running on a separate server, can interact with the bean.
•Communication Overhead: Higher due to remote communication, usually relying on protocols like RMI
(Remote Method Invocation).
53
C. No-Interface Bean
•Usage: When no explicit interface is needed, allowing clients within the same application to
access the bean directly.
•Annotation: The bean is simply annotated with @Stateless (or @Stateful), without
implementing a separate interface.
•Client Location: This is also local-only, as no-interface beans can’t be accessed remotely.
•Example:
@Stateless
public class CalculatorBean {
public int add(int num1, int num2) {
return num1 + num2;
}
}
Here, the CalculatorBean itself serves as the interface. Local components, such as servlets or
other EJBs, would inject or look up CalculatorBean directly without an interface.
54