Java Enterprise Edition (JEE, which was earlier called J2EE) has been around for many years now. It is a very robust platform for developing enterprise applications. J2EE was first released in 1999, but underwent major changes with the release of version 5 in 2006. Since version 5, it has been renamed Java Enterprise Edition (JEE). Recent versions of JEE have made developing a multi-tier distributed application a lot easier. J2EE had focused on core services and had left the tasks that made application development easier to external frameworks, for example, MVC and persistent frameworks. But JEE has brought many of these frameworks into the core services. Along with the support for annotations, these services simplify application development to a large extent.
Any runtime technology is not good without good development tools. The Integrated Development Environment (IDE) plays a major part in developing applications faster, and Eclipse provides just that for JEE. Not only do you get good code editing support in Eclipse, but you also get support for build, unit testing, version control, and many other tasks important in different phases of software application development.
In this chapter, we are going to cover the following topics:
- Introduction to different technologies in JEE
- Introduction to the Eclipse development environment
- Installation and configuration of some of the frequently used software in this book, for example, JEE servers, Eclipse IDE, and MySQL Database Server
The goal of this book is to show how you can efficiently develop JEE applications using Eclipse by using many of its features during different phases of the application development. But first, here is a brief introduction to JEE andEclipse.
In 2017, Oracle agreed to hand over control of Java EE to Eclipse Foundation. In April 2018, Eclipse Foundation renamed Java EE as Jakarta EE. You can find more information about Jakarta EE at https://jakarta.ee/. At the time of writing, the latest Java EE version is 8. But all future versions of Java EE will be called Jakarta EE.
JEE is a collection of many of the Java Community Process (https://www.jcp.org) programs. Currently, JEE is in Version 8. However, different specifications of JEE are at their own different versions.
JEE specifications can be broadly classified into the following groups:
- Presentation layer
- Business layer
- Enterprise integration layer
Note that JEE specification does not necessarily classify APIs in the preceding broad groups, but such classification could help in better understanding the purpose of the different specifications and APIs in JEE.
Before we see APIs in each of these categories, let's understand a typical JEE web application flow, as shown in the following diagram, and where each of the preceding layers fits in:
Figure 1.1: A typical JEE web application flow
Requests start from the clients. A client can be any application requesting services from a remote application—for example, it could be the browser or a desktop application. The request is first received by the web server at the destination. Examples of web servers include Apache web server, IIS, and nginx. If it is a request for static content, then it is served by the web server(s). However, a dynamic request typically requires an application server to process. JEE servers are such application servers that handle dynamic requests. Most JEE specification APIs execute in the application server. Examples of JEE application servers are WebSphere, GlassFish, and WildFly.
Most non-trivial JEE applications access external systems, such as a database or Enterprise Integration Server (EIS), for accessing data and process it. A response is returned from the application server to the web server and then to the clients.
The following sections provide a brief description of each of the JEE specifications in different layers. We will see how to use these specifications and their APIs in more detail in subsequent chapters. However, note that the following is not the exhaustive list of all the specifications in JEE. We will see the most commonly used specifications here. For the exhaustive list, please visit http://www.oracle.com/technetwork/java/javaee/tech/index.html.
Now let's take a look at some of the specifications in this layer.
Java Servlets are server-side modules, typically used to process requests and send back responses in web applications. Servlets are useful for handling requests that do not generate large HTML markup responses. They are typically used as controllers in Model View Controller (MVC) frameworks, for forwarding/redirecting requests, or for generating non-HTML responses, such as PDFs. To generate HTML response from the servlet, you need to embed HTML code (as a Java String) in Java code. Therefore, it is not the most convenient option for generating large HTML responses. JEE 8 contains servlet API 4.0.
JavaServer Faces (JSFs) make creating a user interface on the server side modular by incorporating the MVC design pattern in its implementation. It also provides easy-to-use tags for common user interface controls that can save states across multiple request-response exchanges between client and server. For example, if you have a page that posts form data from a browser, you can have a JSF save that data in a Java bean so that it can be used subsequently in the response to the same or different request. JSFs also make it easier to handle UI events on the server side and specify page navigation in an application.
You write the JSF code in JSP, using custom JSP tags created for JSF. JavaServer Faces API 2.3 is part of JEE 8.
The business layer is where you typically write code to handle the business logic of your application. Requests to this layer could come from the presentation layer, directly from the client application, or from the middle layer consisting of, but not limited to, web services. Classes in this layer are executed in the application container part of JEE server. GlassFish and WebSphere are examples of web container plus application container.
Let us take a tour of some of the specifications in this group.
Enterprise JavaBeans (EJBs) are the Java classes where you can write your business logic. Though it is not a strict requirement to use EJBs to write business logic, they do provide many of the services that are essential in enterprise applications. These services are security, transaction management, component lookup, object pooling, and so on.
You can have EJBs distributed across multiple servers and let the application container (also called the EJB container) take care of component lookup (searching component) and component pooling (useful for scalability). This can improve the scalability of the application.
EJBs are of two types:
JMS and message-driven beans can be used for handling asynchronous requests. In a typical asynchronous request processing scenario, the client puts a request in a messaging queue or a topic and does not wait for immediate response. An application on the server side gets the request message, either directly using JMS APIs or by using MDBs. It processes the request and may put the response in a different queue or topic, to which the client would listen and get the response.
Java EE 8 contains EJB specification 3.2 and JMS specification 2.0.
APIs in this layer are used for interacting with external (to the JEE application) systems in the enterprise. Most applications would need to access a database, and APIs to access that fall in this group.
Java Database Connectivity (JDBC) is a specification to access a relational database in a common and consistent way. Using JDBC, you can execute SQL statements and get results on different databases using common APIs. A database-specific driver sits between the JDBC call and the database, and it translates JDBC calls to database-vendor-specific API calls. JDBC can be used in both the presentation and business layers directly, but it is recommended to separate the database calls from both the UI and the business code. Typically, this is done by creating Data Access Objects (DAOs) that encapsulate the logic to access the database. JDBC is actually a part of Java Standard Edition. Java SE 8 contains JDBC 4.2.
One of the problems of using JDBC APIs directly is that you have to constantly map the data between Java objects and the data in columns or rows in the relational database. Frameworks such as Hibernate and Spring have made this process simpler by using a concept known as Object Relational Mapping (ORM). ORM is incorporated in JEE in the form of the Java Persistence API (JPA).
JPA gives you the flexibility to map objects to tables in the relational database and execute queries with or without using Structured Query Language (SQL). When used in the content of JPA, the query language is called Java Persistence Query Language. JPA specification 2.2 is a part of JEE8.
Java Connector Architecture (JCA) APIs can be used in JEE applications for communicating with enterprise integration systems (EISes), such as SAP, and Salesforce. Just like you have database drivers to broker communication between JDBC APIs and relational databases, you have JCA adapters between JCA calls and EISes. Most EIS applications now provide REST APIs, which are lightweight and easy to use, so REST could replace JCA in some cases. However, if you use JCA, you get transaction and pooling support from the JEE application server.
- Simple Object Access Protocol (SOAP)
- Representational State Transfer (REST)
JEE provides many specifications to simplify development and consumption of both types of web services, for example, JAX-WS (Java API for XML—web services) and JAX-RS (Java API for RESTful web services).
The preceding are just some of the specifications that are part of JEE. There are many other independent specifications and many enabling specifications, such as dependency injection and concurrency utilities, which we will see in subsequent chapters.
A good IDE is essential for better productivity while coding. Eclipse is one such IDE, which has great editor features and many integration points with JEE technologies. The primary purpose of this book is to show you how to develop JEE applications using Eclipse. So the following is a quick introduction to Eclipse, if you are not already familiar with it.
Eclipse is an open source IDE for developing applications in many different programming languages. It is quite popular for developing many different types of Java applications. Its architecture is pluggable—there is a core IDE component and many different plugins can be added to it. In fact, support for many languages is added as Eclipse plugins, including support for Java.
Along with editor support, Eclipse has plugins to interact with many of the external systems used during development. Examples include source control systems such as SVN and Git, build tools such as Apache Ant and Maven, file explorers for remote systems using FTP, managing servers such as Tomcat and GlassFish, database explorers, memory and CPU profilers. We will see many of these features in the subsequent chapters. The following screenshot shows the default view of Eclipse for JEE application development:
Figure 1.2: Default Eclipse view
When working with Eclipse, it is good to understand the following terms.
The Eclipse workspace is a collection of projects, settings, and preferences. It is a folder where Eclipse stores this information. You must create a workspace to start using Eclipse. You can create multiple workspaces, but only one can be opened at a time by one running instance of Eclipse. However, you can launch multiple instances of Eclipse with different workspaces.
Eclipse has pluggable architecture. Many of the features of Eclipse are implemented as plugins, for example, editor plugins for Java and many other languages, plugins for SVN and Git, and many more. The default installation of Eclipse comes with many built-in plugins and you can add more plugins for the features you want later.
Most windows in Eclipse can be classified either as an editor or a view. An editor is something where you can change the information displayed in it. A view just displays the information and does not allow you to change it. An example of an editor is the Java editor where you write code. An example of a view is the outline view that displays the hierarchical structure of the code you are editing (in the case of a Java editor, it shows classes and methods in the file being edited).
To see all views in a given Eclipse installation, open the
Show View |
Figure 1.3: Show all Eclipse views
Perspective is a collection of editors and views, and how they are laid out or arranged in the main Eclipse window. At different stages of development, you need different views to be displayed. For example, when you are editing the code, you need to see
Project Explorer and
Task views, but when you are debugging an application, you don't need those views, but instead want to see variable and breakpoint views. So, the editing perspective displays, among other views and editors,
Project Explorer and
Task views, and the
Debug perspective displays views and editors relevant to the debugging activities. You can change the default perspectives to suit your purposes.
In the subsequent chapters, we will learn how to develop JEE applications in Eclipse. But the applications are going to need a JEE application server and a database. We are going to use the Tomcat web container in the initial few chapters and then use the GlassFish JEE application server. We are going to use a MySQL database.
We are going to need these products for many of the applications that we are going to develop. So the following sections describe how to install and configure Eclipse, Tomcat, GlassFish, and MySQL.
Download the latest version of Eclipse from https://eclipse.org/downloads/. You will see many different packages for Eclipse. Make sure you install the
Eclipse IDE for Java EE Developers package. Select an appropriate package based on your OS and JVM architecture (32 or 64 bit). You may want to run the command
java -version to know whether the JVM is 32-bit or 64-bit.
If you plan to use Eclipse for AWS development, then it is recommended to download Eclipse from the Oomph installer. Refer to https://wiki.eclipse.org/Eclipse_Installer and https://docs.aws.amazon.com/toolkit-for-eclipse/v1/user-guide/setup-install.html.
Unzip the downloaded ZIP file and then run the Eclipse application (you must install JDK before you run Eclipse). The first time you run Eclipse, you will be asked to specify a workspace. Create a new folder in your filesystem and select that as the initial workspace folder. If you intend to use the same folder for the workspace on every launch of Eclipse, then check the
Use this as the default and do not ask again checkbox:
Figure 1.5: Select Eclipse workspace
Tomcat is a web container. It supports APIs in the presentation layer described earlier. In addition, it supports JDBC and JPA. It is easy to configure and could be a good option if you do not want to use EJBs.
Download the latest version of Tomcat from http://tomcat.apache.org/. Unzip the downloaded file in a folder. Set the
JAVA_HOME environment variable to point to the folder where JDK is installed (the folder path should be the JDK folder, which has
bin as one of the subfolders). To start the server, run
startup.bat in Command Prompt on Windows and
startup.sh in a Terminal window on Mac and Linux. If there are no errors, then you should see the message
Server startup in --ms or
The default Tomcat installation is configured to use port
8080. If you want to change the port, open
server.xml under the
conf folder and look for a connector declaration such as the following:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
Change the port value to any port number you want, though in this book we will be using the default port
8080. Before we open the default page of Tomcat, we will add a user for administration of the Tomcat server. Open
tomcat-users.xml under the
conf folder using any text editor. At the end of the file, you will see commented example of how to add users. Add the following configuration before the closure of
<role rolename="manager-gui"/> <user username="admin" password="admin" roles="manager-gui"/>
Here, we are adding a user
admin, with password also as
admin, to a role called
manager-gui. This role has access to web pages for managing an application in Tomcat. This and other security roles are defined in
web.xml of the
manager application. You can find it at
For more information for managing Tomcat server, refer to http://tomcat.apache.org/tomcat-8.0-doc/manager-howto.html.
After making the preceding changes, open a web browser and browse to
http://localhost:8080 (modify the port number if you have changed the default port). You will see the following default Tomcat page:
Figure 1.6: The default Tomcat web application
Click on the
Manager App button on the right. You will be asked for the username and password. Enter the username and password you configured in
manager-gui, as described earlier. After you are successfully logged in, you will see the
Tomcat Web Application Manager page, as shown in Figure 1.7. You can see all the applications deployed in Tomcat in this page. You can also deploy your applications from this page:
Figure 1.7: Tomcat Web Application Manager
Download GlassFish from https://glassfish.java.net/download.html. GlassFish comes in two flavors: Web Profile and Full Platform. Web Profile is like Tomcat, which does not include EJB support. So download the Full Platform.
Unzip the downloaded file in a folder. The default port of the GlassFish server is
8080. If you want to change that, open
glassfish/domains/domain1/config/domain.xml in a text editor (you could open it in Eclipse too, using the
File menu option) and look for
8080. You should see it in one of the
<network-listener>. Change the port if you want to (which may be the case if some other application is already using that port).
To start the server, run the
startserv script (
.sh depending on the OS you use). Once the server has started, open a web browser and browse to
http://localhost:8080. You should see a page like the following:
Figure 1.8: The default Glassfish web application
This page is located at
glassfish/domains/domain1/docroot/index.html. Click on the
go to the Administration Console link in the page to open the GlassFish administrator (see the following screenshot):
Figure 1.9: The Glassfish administrator
For details on administrating the GlassFish server, refer to https://javaee.github.io/glassfish/doc/5.0/administration-guide.pdf.
We would like to install MySQL Workbench too, which is a client application to manage MySQL Server. Download MySQL Workbench from https://dev.mysql.com/downloads/workbench/.
Download MySQL Community Server from http://dev.mysql.com/downloads/mysql/. You can either download the web installer or the all-in-one installer. The web installer would download only those components that you have selected. The following instructions show the download options using the web installer.
- Select the
Customoption and click on
Figure 1.10: MySQL Installer for Windows
Figure 1.11: Select MySQL products and features to Install
Figure 1.12: Add MySQL user
- Run MySQL Workbench after installation. You will find that the default connection to the local MySQL instance is already created for you:
Figure 1.13: MySQL Workbench connections
Figure 1.14: My SQL Workbench
OS X versions before 10.7 had MySQL Server installed by default. If you are using OS X 10.7 or later, then you will need to download and install MySQL Community Server from http://dev.mysql.com/downloads/mysql/.
There are many different ways to install MySQL on OS X. See http://dev.mysql.com/doc/refman/5.7/en/osx-installation.html for installation instructions for OS X. Note that users on OS X should have administrator privileges to install MySQL Server.
Once you install the server, you can start it either from Command Prompt or from the system preferences:
- To start it from Command Prompt, execute the following command in the Terminal:
sudo /usr/local/mysql/support-files/mysql.server start
- To start it from
System Preferences, open the preferences and click the
Figure 1.15: MySQL System Preferences - OS X
There are many different ways to install MySQL on Linux. Refer to https://dev.mysql.com/doc/refman/5.7/en/linux-installation.html for details.
- To execute SQL and other commands from Command Prompt, open the Terminal and type the following command:
mysql -u root -p<root_password>
- Once logged in successfully, you will see the
- To create a user, first select the
mysql>use mysql;Database changedmysql>create user 'user1'@'%' identified by 'user1_pass'; mysql>grant all privileges on *.* to 'user1'@'%' with grant option
The preceding command will create a user named
'user1' with password
'user1_pass' having all privileges, for example to insert, update, and select from the database. And because we have specified the host as
'%', this user can access the server from any host.
See https://dev.mysql.com/doc/refman/5.7/en/adding-users.html for more details on adding users to MySQL database
If you prefer a graphical user interface (GUI) to manage the users, then run MySQL Workbench, connect to the local MySQL server (see Figure 1.13 MySQL Workbench connections), and then click on
Users and Privileges under the
Figure 1.16: Creating a user in MySQL Workbench
Having installed all the preceding products, you should be in a position to start developing JEE applications. We may need some additional software, but we will see how to install and configure it at the appropriate time.
In this chapter, we had a brief introduction to different JEE specifications for the presentation layer, business layer, and enterprise integration layer. We learned some of the important terminologies in Eclipse IDE. We then learned how to install Eclipse, Tomcat, Glassfish, MySQL, and MySQL Workbench. We are going to use these products in this book to develop JEE applications.
In the next chapter, we will configure the JEE server and create a simple application using servlets, JSPs, and JSFs. We will also learn how to use Maven to build and package the JEE applications.