IT-Tage 365 2021 June is a German online conference. The main event is from December 6 through December 9, 2021. But there are additional sessions throughout the year, such as mine.
I gave a session at IT Tage 365: “Pick Technologies & Tools Faster with JHipster” (“Technologien & Tools schneller auswählen durch Coding mit JHipster” in German). I discussed why we Java developers need to pick more tools more often, the challenges that come with that, and how generating code with JHipster can help picking technologies & tools faster.
I put my second JHipster applications into production in May 2021. I gave earlier versions of this talk to the London Java Community and the CinJUG (no video).
Unsere Java-Projekte werden heute von Technologien wie Microservices, Container, Cloud, DevOps und Apps bestimmt, die sich rasant weiterentwickeln. Deshalb wählen wir Java-Entwickler heute mehr Technologien als je zuvor aus – und auch noch häufiger. Wie können wir also zuerst einmal die richtigen Technologien auswählen? Und wie können wir dann technologisch auf dem Laufenden bleiben?
Ich werde typische Herausforderungen bei der Auswahl von Technologien und Tools diskutieren. Dann stelle ich JHipster vor, einen Open-Source-Anwendungsgenerator mit 170.000 monatlichen Downloads. JHipster hat keine proprietären Schichten und erzeugt produktionsreifen Code. Mit JHipster können wir einfach die gleiche Anwendung mit unterschiedlichen Technologien generieren: Monolith und Microservices, Backend mit NoSQL und SQL, Spring Boot und Micronaut und Node.js und .NET, Frontend mit React und Angular und Vue.js. Wir können diese Anwendungen dann mit unseren Daten in unserer Umgebung verändern, testen, debuggen, in Betrieb nehmen und zur Laufzeit überwachen. Wir lernen also Technologien und Tools, indem wir Code ausführen! Das ist viel besser, als aus veralteten Artikeln mit „Spielzeugbeispielen“ zu lernen, die unsere Umgebungen und Daten gar nicht kennen können!
Während des Vortrages werde ich live demonstrieren, wie man mit JHipster eine Anwendung generiert.
Technologies like cloud, microservices, containers, DevOps, and apps drive Java projects today. And they also evolve at a rapid pace. That’s why we Java developers pick more technologies more often than ever before. So how can we pick the right ones? And how can we stay up-to-date?
I’ll discuss typical challenges when picking technologies & tools. Then I’ll introduce JHipster , an open-source application generator with 170k monthly downloads. With JHipster, we can generate the same application with different technologies. Examples are monolith vs microservice, NoSQL vs SQL back-end, Spring Boot vs Micronaut vs NodeJS vs dot.NET, or React vs Angular vs Vue front-end. We can build, test, debug, deploy and run these applications in our environment with our data. So we learn technologies & tools by running code! That’s much better than learning from outdated articles with toy examples that don’t apply to our environment and our data!
I will also show live how to generate an application with JHipster.
If you’ve seen my talk, then please rate it!
This is the feedback I got on my talk. Please note that you can view the second page with the arrow button in the bottom left.Here are the slides as PDF. They are 3.7 MB:
You can also get the slides in their original Keynote format. “Keynote” is Apple’s presentation application. Why would you do that? My slides have less text than the PDF version, so you can see what I cut. I also animated the slides, so they are more pleasant to watch. Or maybe you want to peek under the hood to see how I achieved specific effects. These slides are 5.4 MB in size.
The link to the video will probably be available here after the talk. It may be behind a paywall.
And now for some shameless self-promotion: I’m looking to join a project in October 2022, in Milton Keynes, London, or remote. I’ll work as a contractor or fixed-term employee but don’t take permanent positions. Interested? Then check out my resume & work samples!
generator-jhipster NPM package. npmtrends.com has the trend for the number of downloads:
application section describes how my application is configured. No suprises here! It’s a Spring Boot monolith with H2 as the development database and PostgreSQL as the production database. It supports multiple languages - English, German, Russian.deployment documents how I deploy with a Docke Compose file here.entity) and their relationships.service) and Data Transfer Objects (dto).application {
config {
baseName my_simple_shop
applicationType monolith
authenticationType jwt
buildTool maven
cacheProvider ehcache
clientFramework react
clientPackageManager npm
clientTheme litera
clientThemeVariant primary
databaseType sql
devDatabaseType h2Disk
dtoSuffix DTO
enableHibernateCache true
enableTranslation true
jhiPrefix bpf
languages [en, de, ru]
messageBroker false
nativeLanguage en
packageName com.betterprojectsfaster.tutorial.jhipsterdocker
prodDatabaseType postgresql
reactive false
searchEngine false
serverPort 8080
skipClient false
skipServer false
skipUserManagement false
websocket spring-websocket
testFrameworks [cypress]
}
entities *
}
deployment {
deploymentType docker-compose
dockerRepositoryName "joedata"
}
entity Product {
name String required unique minlength(2) maxlength(90)
price Float required min(0)
description TextBlob required
picture ImageBlob required
specification Blob
category ProductCategory
inventory Integer required min(0)
}
enum ProductCategory {
Laptop, Desktop, Phone, Tablet, Accessory
}
entity Address {
addressLine1 String required minlength(2) maxlength(80)
addressLine2 String minlength(2) maxlength(80)
city String minlength(2) maxlength(80)
postalCode String minlength(5) maxlength(5)
}
entity ShoppingOrder {
name String required unique minlength(2) maxlength(90)
totalAmount Float min(0)
ordered LocalDate
}
entity ProductOrder {
amount Integer required min(0) max(5)
}
entity Shipment {
shippedAt LocalDate required
}
relationship OneToOne {
Shipment{order(name) required} to ShoppingOrder{shipment(shippedAt)}
}
relationship OneToMany {
Product to ProductOrder{product(name) required}
ShoppingOrder{orders} to ProductOrder{overallOrder(name) required}
}
relationship ManyToOne {
Address{user(login) required} to User
ProductOrder{buyer(login) required} to User
ShoppingOrder{buyer(login) required} to User
Shipment{shippedBy(login) required} to User
}
service * with serviceImpl
dto * with mapstruct
Vorauswahl: JHipster slides (“Preselection: JHipster”)
For the latest information, please always go to the JHipster site.
If you want to get started with JHipster, then my three-part tutorial on JHipster is just what you need:
Plugins change the code that JHipster generates. They are optional. JHipster calls them “blueprints”.
Here are the officially supported blueprints:
In principle, we can use multiple blueprints at the same time. But it seems that at least the Kotlin blueprint doesn’t go together with other blueprints.
The JHipster site has a list of all blueprints. That’s where we can find the Quarkus blueprint, for instance.