ifdef::env-github[] ++++
ifdef::env-github[] ++++
A low-code development toolbox optimized for creating and operating enterprise applications.
++++ endif::[] ifndef::env-github[] [.text-center] A low-code development toolbox optimized for creating and operating enterprise applications. endif::[]ifdef::env-github[] ++++
++++ endif::[] ifndef::env-github[] [.text-center] image:https://img.shields.io/badge/license-EPL%20v2.0-blue.svg[link="https://github.com/BlackBeltTechnology/judo-community"] image:https://img.shields.io/discord/918892501434241054[link="https://discord.gg/RcyHnBndNU"] image:https://img.shields.io/badge/docs-passing-brightgreen[link="https://documentation.judo.technology"] endif::[]== What is low-code?
Simply put, low-code development is a paradigm that uses models as the primary artifact of the development process, and the implementation is (semi-)automatically generated from the models.
== Target audience
JUDO is designed for Java developers who want to speed up their work and focus on business needs instead of typing architectural glue code and copying design patterns.
== System Requirements
=== JDK 11
The JUDO platform is developed and tested against OpenJDK 11. Our recommended vendor is https://www.azul.com/downloads/?version=java-11-lts&package=jdk[Zulu JDK]
Checking your JDK version:
[source,bash]
java -version
Which should display something similar to:
[source,bash]
openjdk version "11.0.16" 2022-07-19 LTS OpenJDK Runtime Environment Zulu11.58+15-CA (build 11.0.16+8-LTS) ...
The key here the version number, which in our case is:
11.0.16. The version number should start with11, however the gerenerated code and applications could run on more current JDK versions.
=== Maven 3.8.x
Our project orchestrator and build tool is https://maven.apache.org/download.cgi[Apache Maven v3.8.x].
Checking your Maven version:
[source,bash]
mvn -version
Which should display something similar to:
[source,bash]
Apache Maven 3.8.6 Maven home: /usr/share/maven ...
The key here is again, the version number, which in our case is:
3.8.6. The version number MUST start with3.8!
== Getting started
=== Bootstrap a project from an archetype
Open your terminal, and go to a folder where you would like the archetype to generate your project under (e.g.: ~/projects/).
Running the following command generates a https://github.com/spring-projects/spring-boot[Spring Boot] project with a test model and a simple integration test:
[source,bash]
mvn org.apache.maven.plugins:maven-archetype-plugin:3.1.1:generate -B \ -DarchetypeGroupId=hu.blackbelt.judo.jsl \ -DarchetypeArtifactId=judo-jsl-springboot-archetype \ -DarchetypeVersion=1.0.3 \ -DgroupId=com.example \ -DmodelName=Test
For detailed documentation on the Archetype, please visit the https://github.com/BlackBeltTechnology/judo-jsl-springboot-archetype[judo-jsl-springboot-archetype] repository
Once the archetype has finished generating sources, your project should be available under ~/projects/com.example.Test
Running mvn clean install under your project will run the build and tests as well. If you haven't modified anything, the process should finish without any errors.
=== Bootstrapped sources
==== application.properties
Located under: src/main/resources
This is a standard Spring Boot resource which by default is generated to utilize HSQL Database (we support PostgreSQL as well).
spring.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver
spring.datasource.url=jdbc:hsqldb:mem:testdb;DB_CLOSE_DELAY=-1
spring.datasource.username=sa
spring.datasource.password=
spring.liquibase.change-log=classpath:model/Test-liquibase_hsqldb.changelog.xml
judo.modelName=Test
==== Test.jsl
Located under: src/main/resources/model
The model defines a custom type named String, an entity Person which - for the sake of having fun - also
has a derived attribute called fullName.
model Test;
type string String(min-size = 0, max-size = 128);
entity Person {
field String firstName;
field String lastName;
derived String fullName => self.firstName + " " + self.lastName;
}
==== TestSpringApplication.java
Located under: src/main/java/com/example/test
This is the entry point of a bare-bones Spring Boot Application similar to what you'd get if you'd have used the https://start.spring.io[start.spring.io] generator
==== TestSpringApplicationTests.java
Located under: src/test/java/com/example/test
[source,java]
package com.example.test;
import com.example.test.test.sdk.test.test.Person; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest;
import java.util.Optional;
import static org.junit.jupiter.api.Assertions.assertEquals;
@SpringBootTest class TestSpringApplicationTests { @Autowired Person.PersonDao personDao;
@Test
void testDaoFunctions() {
Person createdPerson = personDao.create(Person.builder()
.withFirstName("FirstName")
.withLastName("LastName")
.build());
assertEquals(Optional.of("FirstName"), createdPerson.getFirstName());
assertEquals(Optional.of("LastName"), createdPerson.getLastName());
// Test derived
assertEquals(Optional.of("FirstName LastName"), createdPerson.getFullName());
}
}
== Documentation
Our official documentation page can be found at link:https://documentation.judo.technology[https://documentation.judo.technology].
== Questions
For questions and support please use the official https://discord.com/channels/918892501434241054[Discord channel]. The issue list of this repo is exclusively for bug reports and feature requests.
== Issues
For issue submission, please follow the guidelines displayed under each issue category.
Please keep in mind that this repository is only an aggregator, therefore if you have a specific problem / idea / suggestion for a certain sub-repo, then it is encouraged to open the ticket there.
== Contributing to JUDO
Everyone is welcome to contribute to JUDO! As a starter, please read the corresponding link:CONTRIBUTING.adoc[CONTRIBUTING] guide for details!
== License
JUDO Community modules are licensed under the https://www.eclipse.org/legal/epl-2.0/[Eclipse Public License - v 2.0].