$25
Three-tier Programming with Object-Relational Mapping
Objectives
• Gain familiarity with the development of three-tier enterprise applications using the Java Enterprise Edition (Java/Jakarta EE) model.
• This includes the development of applications based on Enterprise JavaBeans (EJB),
• The Java Persistence API (JPA) and the Java Persistence Query Language (JPQL).
• Learn to use logging.
Software
Jakarta EE Platform
To deploy the implementation of this project, the professor strongly students to use the WildFly Application Server.
Software Configuration
Students have two options: either installing everything on their operating system or use Docker and Docker compose. The latter might be heavier for the computer but makes configuration easy – at least if everything goes according to plan. Additionally, students may gain some skills that are quite useful for the industry. The professor will make a version of Docker compose available that includes:
• Java 16
• WildFly 24
• PostgreSQL 13
• Maven 3
Integrated Development Environment
Eclipse IDE for Jakarta EE Developers and IntelliJ are the recommended IDEs. If students are using Eclipse, they might want to consider the installation of server adapters for WildFly[1], but this step is optional. Students should use Maven instead of Eclipse (or IntelliJ) managed projects.
If students feel in some venturous mood, they may want to give a try to Visual Studio Code, which integrates quite beautifully with the containerized environment, although this option is probably poorer in terms of Java support.
Data Persistence
Object/Relational Mapping (ORM) is a technique to convert data between objectoriented languages and relational databases. In the case of Java several ORM options exist. In this project, students will have to use Java Persistence API (JPA) as it is a
Jakarta EE standard. The JPA engine to use should be Hibernate. The recommended
databases are MySQL and PostgreSQL, but students are free to choose another one (also, students should see the previous points regarding software configuration).
References
The professor will provide a support book that students should follow to create their first running examples of Jakarta EE. The title of the book is “Jakarta EE in Practice”. Students are also invited to look for content on the Blog “Enterprise Application Integration” (https://eai-course.blogspot.com).
There are many online resources about Jakarta EE. One of the most important resources is the JavaTM Platform, Enterprise Edition (Java EE) Specification, v8,
available at: https://javaee.github.io/javaee-
spec/download/JavaEE8_Platform_Spec_FinalRelease.pdf. This document is huge and extremely detailed, but students should skim it, as it covers the whole Java EE 8 (the version that preceded Jakarta EE 8).
Introduction to Enterprise Applications
Jakarta EE (formerly known as Java EE) is a set of extensions to Java that aim at supporting the creation of distributed applications. Jakarta EE assumes that enterprise-level applications are structured in three layers: presentation, business logic and data, as shown in the image. While the presentation layer is increasingly developed with JavaScript frameworks, like Angular or React, in this course we are mostly concerned with the other two layers: business and data. These should run in a Jakarta EE application server, such as WildFly. The advantage of using an application server, when compared with developing a stand-alone application, is that the programmer does not have to implement many boilerplates enterprise-level functionalities. The container already provides these. A Jakarta EE server provides for:
• Transactional contexts for guaranteeing data integrity and recovery in case of crashes.
• Connection polling for large number of invocations and optimized access.
• Integrated security management.
• In many cases, distributed computing, load balancing and clustering capabilities.
It should be noted that when one starts using an application server, it gets the feeling that it’s slow, cumbersome, and that it has a difficult programming model. It is almost tempting to use a much simpler framework. The advantages only become clear in large-scale contexts, where distributed transactions, transparent load balancing across several servers and millions of invocations must be made with guaranteed operation. In fact, for small-scale applications, Jakarta EE should not be the way to go. J
JPA
1. Create an entity to store teams. Besides the team’s name, teams can also have address, president’s name, and other properties you find relevant. Teams will also have players (see next questions).
2. Create an Entity that stores information about football players. Each player has a name, a date of birth, and height. This is a one-to-many relation, as teams have many players.
3. Write a program to populate the database.
4. Write a program that lists all players taller than a given height.
5. Write a program that lists all the players from your favorite team in the database.
EJBs
1. Write a stateless EJB that computes the square root of a number. Students should also write a client that uses this bean.
2. Write a stateful EJB that stores and retrieves a list of items given by the client. This EJB could be used to keep a shop basket. Students should also write the client.
3. Write a singleton EJB to raise one alarm. The container should start the EJB automatically. Which solutions could one use to run multiple alarms?
4. Now, write an EJB that allows to use all the functionalities developed in the JPA part.
Project (for evaluation)
Overview
In this project, students will develop a web application to manage a bus company. The set of operations of this application is essentially limited to the purchase of tickets. Next, we go through the requirements of this application. Feel free to add some more functionality that you may need:
Requirements
1. As an unregistered user, I want to create an account, and insert my personal information, including email.
2. To create manager accounts the system should use a script, e.g., written in JPA.
3. As an unauthenticated user, I must only have access to the login/register screen.
4. As a user, I want to authenticate and start a session with my e-mail and password.
5. As a user, I want to logout from any location or screen.
6. As a user, I want to edit my personal information.
7. As a user, I want to delete my account, thus erasing all traces of my existence from the system, including my available items.
8. As a user, I want to list the available trips, providing date intervals.
9. As a user, I want to charge my wallet to be able to purchase tickets. (You may ignore the step that involves the payment itself)
10. As a user, I want to purchase a ticket. I should be able to select the place.
11. As a user, I may be able to return a ticket for future trips and get a reimbursement in my wallet.
12. As a user, I can list my trips.
13. As a company manager, I want to create future bus trips, including the departure date and hour, departure point, destination, capacity, and price. You may assume that departure and destination points are limited.
14. As a company manager, I want to delete future bus trips. The money of all tickets should be returned to the correct wallets, and the system should warn the affected users by email.
15. As a company manager I want to list the passengers that have made more trips (e.g., the top 5).
16. As a company manager I want to search for all bus trips sorted by date between two date limits.
17. As a company manager I want to search for all bus trips occurring on a given date.
18. As a company manager I want to list all passengers on a given trip listed during one of the previous searches.
19. The system sends a daily summary of the revenues of that day’s trips to the managers.
Additional Remarks
This application should have three distinct layers:
• A data layer, working atop a database, to keep all the information. This layer should expose a CRUD (Create, Read, Update, Delete) functionality using EJBs. Internally, it should use Java Persistence API. In this assignment, the result of the queries must be decided in this layer, i.e., the sorting order, what items to show etc. You should not resort to JavaScript for this purpose.
• A business layer that interacts with the data layer, built with EJBs. Since the assignment is small, it is acceptable if the business layer uses entities and the separation of the two layers is not complete.
• A presentation layer developed in some Java-based technology, like JSFs or JSPs. Data between the presentation layer and the business layer should be transferred using Data Transfer Objects or other techniques (like sending a simple identifier). Students should not let the entities travel all the way to the presentation layer. For simplicity students might transfer entities between the data and the business layer.
• Introduction
• Presentation Tier
- Refer to the structure of the webpage, if possible, with a layout (namely templates, if students have used them).
- Refer to the details that were most complex to implement in the interface.
- Use a reduced number of images (possibly only one) to show the interface aspect.
- Focus the aspect of password storage.
• Business Tier
- Describe and, if necessary, justify the choices they made regarding the type of EJBs (stateless, stateful, interface types, transaction management, etc.).
- Organize this section by EJBs and their services.
- Detail the most important aspects. For example, what data is being transferred from the business layer to the presentation (and how).
- What data do students collect from the data layer to the business layer (pay attention to quantity)?
• Data tier
- Include ER.
- Include a (partial) listing of entities.
• Project Management and Packaging
- Include the description of the package of the program (pom.xml) and structure of the project(s).
Good Work!
[1] Check this site, for example: http://www.mastertheboss.com/jbossserver/wildfly-8/configuring-eclipse-to-use-wildfly-8.