Once you have installed the OfficeFloor plug-in you have the tools ready for the below tutorials.
The tutorials refer to WoOF, which stands for Web on OfficeFloor. It is a set of prefabricated plug-ins for OfficeFloor that enables OfficeFloor to act as a high performance Web Application Server. Due to inversion of coupling control (IOCC), you will see that the prefabricated plug-ins are much more re-usable than simple Dependency Injection framework objects.
All tutorials are part of the OfficeFloor continuous builds and their source can be found here.
The following tutorials demonstrate the IOCC concepts behind OfficeFloor.
Tutorial | Description | Covered |
---|---|---|
My first application | Walks through the simple steps to create and run an OfficeFloor web application. | |
Continuation Injection | Controlling execution flow (avoiding heavy coupled refactoring costs). | @Next , @FlowInterface (Continuation Injection) |
Exception handling | Handling exceptions. | @Parameter |
Dependency Injection | Dependency injecting a plain old java object (POJO). | Dependency Injection |
Thread Injection | Thread injection to performance tune the application. | Thread Injection |
Many frameworks focus on features and how wonderful they are in production. While this is important, much of the application costs can be in maintaining and testing changes to the application outside production. Many frameworks forget this and this creates increased difficulty for developers and subsequently extra costs.
As production is typically the least complicated environment (just needs to handle scale), OfficeFloor ensures the road to production is also easy for development teams. Therefore, in the importance of test driven development and continuous integration / DevOps cycles, the next tutorials focus on testing and deploying.
Tutorial | Description | Covered |
---|---|---|
Test | Testing the application | Unit / System / Integration testing |
Environment | Configuring the application | @Property, Profile |
Deploy | Deploying the application | Deploy , Docker |
Servlet / PaaS / Cloud | Deploying to Servlet container (PaaS / cloud) | Servlet, PaaS / Cloud |
Now that there is an understanding of the OfficeFloor basics, the following tutorials look at supporting mobile / single page applications.
Tutorials focus on web based single page applications (for ease of running). However, the REST functionality works just as effectively for mobile applications.
Tutorial | Description | Covered |
---|---|---|
REST | REST | REST , @PathParameter , HttpException |
Static content | Serving the single page files | /PUBLIC |
Logging | Loggers identifying location within application | Logger |
JWT | JWT Security | JWT Security |
JWT Authority | JWT Authority | JWT Authority |
Small JWT Application | Single server with JWT Security and JWT Authority | Combined JWT Security / Authority |
OpenAPI / Swagger | Document via OpenAPI / Swagger | OpenAPI / Swagger |
CORS | Cross-origin resource sharing | Web intercepting |
The following tutorials focus on building out functionality of your application.
Tutorial | Description | Covered |
---|---|---|
Activity | Modularising configuration | Activity (Section) |
Transaction | Managing transactions with Governance. | Governance |
Variables | Passing state downstream for flows. | Out<T> , @Val |
Managed Object Source | Dependency injecting a customised managed object. | ManagedObjectSource |
Start Up Ordering | Ordering the start up of ManagedObjectSource instances. | start-before, start-after |
Thread Affinity | Thread Affinity | Executive |
Kotlin | Using Kotlin. | Polyglot Kotlin |
Scala | Using Scala. | Polyglot Scala |
JavaScript | Using JavaScript. | Polyglot JavaScript |
OfficeFloor can integrate dependency injection frameworks, like Spring, as a library of dependencies. Hence, most integrations with third parties can be via other dependency injection frameworks.
The following are some integration examples.
Tutorial | Description | Covered |
---|---|---|
Spring | Wiring in Spring beans (ease of re-using code from dependency injection only frameworks) | Supplier |
Flyway | Migrating databases on start up | Flyway |
Reactive | Using Reactor for reactive programming. | Reactor |
R2DBC | Using R2DBC for reactive database interaction. | R2DBC |
Vertx SQL Client | Using Vertx SQL Client for performant database interaction. | Vertx SQL Client |
Cats Effect | Using Cats Effects | Cats Effect |
ZIO | Using ZIO | ZIO |
Cache | Simple caching | Cache |
Google Sign-in | Sign-in via Google | Google Sign-in |
Firestore | Google Firestore | Firestore |
Objectify | Objectify for Google App Engine datastore | Objectify |
Google App Engine | Google App Engine | Google App Engine |
DynamoDB | DynamoDB for Amazon data store | DynamoDB |
AWS SAM | AWS Serverless | AWS Serverless |
Cosmos DB | Cosmos DB for Azure data store | Cosmos DB |
Async Cosmos DB | Asynchronous Cosmos DB for Azure data store | Async Cosmos DB |
Azure Web Apps | Deploying to Azure Web Apps | Azure Web Apps |
PayPal | Payment via PayPal | PayPal |
The following tutorials detail sequential steps to migrate existing applications to take advantage of OfficeFloor's IOCC.
Step | Tutorial | Description | Covered |
---|---|---|---|
1 | Embedding Spring Web MVC | Running Spring Web MVC @Controller within OfficeFloor | Spring Web MVC @Controller |
2 | Spring Web MVC @Controller Procedures | Integrating Spring Web MVC @Controller as a Procedure to start taking advantage of OfficeFloor features | Spring Web MVC @Controller Procedure |
3 | Migrate Spring Web MVC | Removing dependency on Spring and taking advantage of all OfficeFloor features | Migrate Spring Web MVC @Controller |
Step | Tutorial | Description | Covered |
---|---|---|---|
1 | Embedding Spring Flux | Running Spring Web Flux @Controller within OfficeFloor | Spring Web Flux @Controller |
2 | Spring Web Flux @Controller Procedures | Integrating Spring Web Flux @Controller as a Procedure to start taking advantage of OfficeFloor features | Spring Web Flux @Controller Procedure |
3 | Migrate Spring Web Flux | Removing dependency on Spring and taking advantage of all OfficeFloor features | Migrate Spring Web Flux @Controller |
Step | Tutorial | Description | Covered |
---|---|---|---|
1 | Embedding WAR | Running WAR within OfficeFloor | WAR |
2 | Servlet / Filter Procedures | Integrating Servlets / Filters as Procedures to start taking advantage of OfficeFloor features | Servlet / Filter Procedure |
3 | Migrate Servlet / Filter | Removing dependency on JEE and taking advantage of all OfficeFloor features | Migrate Servlet / Filter |
Step | Tutorial | Description | Covered |
---|---|---|---|
1 | Embedding JAX-RS | Running JAX-RS within OfficeFloor | JAX-RS |
2 | JAX-RS Procedures | Integrating JAX-RS as Procedures to start taking advantage of OfficeFloor features | JAX-RS Procedure |
3 | Migrate JAX-RS | Removing dependency on JAX-RS and taking advantage of all OfficeFloor features | Migrate JAX-RS |
While richer applications are expected, sometimes you just need something up and running. The following tutorials demonstrate the ease of getting dynamic web pages running with OfficeFloor.
Tutorial | Description | Covered |
---|---|---|
Wireframe prototyping | Build working web prototypes and then later extend into a working web application. | #{link} |
Dynamic web page | Rendering dynamic content. | ${bean ... $} , ${property} |
Interactive web page | Handling of requests to provide interactive pages. | #{link} , @HttpParameters |
Session state | Storing state between requests within the HTTP session. | @HttpSessionStateful |
Generating HTML | Render generated HTML. | @UnescapedHtml |
AJAX | Servicing AJAX requests from JavaScript. | @HttpObject , ObjectResponse , @NotRenderTemplateAfter |
Sectioning content | Sectional rendering content. | <!-- {section} --> |
Template Inheritance | Inheriting sectioned content. | <!-- {:override} --> , <!-- {!} --> |
Secure Page | Shows the ease of securing a page | Template Secure |
Secure Link | Demonstrates the ease of securing a link | Link Secure |
Authentication | Easy means to provide authentication | Authentication |