Sample CRUD Application with a Jakarta EE 10 REST Backend and an Angular 19 Frontend.
Originally developed for JavaOne 2014 (JEE 7 + AngularJS 1.2), modernized in 2026.
This talk was awarded the JavaOne Rock Star Award.
Backend: Jakarta EE 10, JAX-RS 3.1, CDI 4.0, JPA 3.1, EclipseLink, Payara Micro 6, H2 Database
Frontend: Angular 19, TypeScript, Bootstrap 5, Standalone Components, Signals
Build: Maven 3.9+ (Backend), Angular CLI / npm (Frontend)
- Java 21 (LTS)
- Maven 3.9+
- Node.js 20+ and npm
make start # Start backend + frontend
make stop # Stop both
make restart # Restart both
make status # Show running status
make help # Show all targetsThe REST API is available at: http://localhost:8080/customerserver/api/
The Frontend is available at: http://localhost:4200/
GET /api/customers- List all customersGET /api/customers/{id}- Get customer by IDPOST /api/customers- Create customerPUT /api/customers/{id}- Update customerDELETE /api/customers/{id}- Delete customerGET /api/discount-codes- List discount codesGET /api/micro-markets- List micro markets
backend/ Jakarta EE 10 REST Backend
src/main/java/.../
entity/ JPA Entities (Customer, DiscountCode, MicroMarket)
repository/ CDI Repositories (generic CRUD)
rest/ JAX-RS Resources + CORS Filter
src/main/resources/
META-INF/persistence.xml
META-INF/import.sql Seed data
frontend/ Angular 19 SPA
src/app/
core/models/ TypeScript interfaces
core/services/ HttpClient services
features/ Lazy-loaded route components
docs/ Original JavaOne 2014 presentation materials
| Component | 2014 | 2026 |
|---|---|---|
| Java | 8 | 21 |
| API | Java EE 7 | Jakarta EE 10 |
| App Server | GlassFish 4 | Payara Micro 6 |
| ORM | EclipseLink 2.5 | EclipseLink (in Payara) |
| Frontend | AngularJS 1.2 | Angular 19 |
| UI | Bootstrap 3.2 | Bootstrap 5.3 |
| Package Mgr | Bower | npm |
| Build Tool | Grunt | Angular CLI |
| EJB | @Stateless | @ApplicationScoped + @Transactional (CDI) |
| JSON | JAXB | JSON-B |