|
|
= Flight Crew Scheduling (Java, Quarkus, Maven) |
|
|
|
|
|
Assign crew to flights to produce a better schedule for flight assignments. |
|
|
|
|
|
image::./flight-crew-scheduling-screenshot.png[] |
|
|
|
|
|
* <<run,Run the application>> |
|
|
* <<enterprise,Run the application with Timefold Solver Enterprise Edition>> |
|
|
* <<package,Run the packaged application>> |
|
|
* <<container,Run the application in a container>> |
|
|
* <<native,Run it native>> |
|
|
|
|
|
== Prerequisites |
|
|
|
|
|
. Install Java and Maven, for example with https://sdkman.io[Sdkman]: |
|
|
+ |
|
|
---- |
|
|
$ sdk install java |
|
|
$ sdk install maven |
|
|
---- |
|
|
|
|
|
[[run]] |
|
|
== Run the application |
|
|
|
|
|
. Git clone the timefold-quickstarts repo and navigate to this directory: |
|
|
+ |
|
|
[source, shell] |
|
|
---- |
|
|
$ git clone https://github.com/TimefoldAI/timefold-quickstarts.git |
|
|
... |
|
|
$ cd timefold-quickstarts/java/flight-crew-scheduling |
|
|
---- |
|
|
|
|
|
. Start the application with Maven: |
|
|
+ |
|
|
[source, shell] |
|
|
---- |
|
|
$ mvn quarkus:dev |
|
|
---- |
|
|
|
|
|
|
|
|
. Visit http://localhost:8080 in your browser. |
|
|
|
|
|
. Click on the *Solve* button. |
|
|
|
|
|
Then try _live coding_: |
|
|
|
|
|
. Make some changes in the source code. |
|
|
. Refresh your browser (F5). |
|
|
|
|
|
Notice that those changes are immediately in effect. |
|
|
|
|
|
[[enterprise]] |
|
|
== Run the application with Timefold Solver Enterprise Edition |
|
|
|
|
|
For high-scalability use cases, switch to https://docs.timefold.ai/timefold-solver/latest/enterprise-edition/enterprise-edition[Timefold Solver Enterprise Edition], |
|
|
our commercial offering. |
|
|
https://timefold.ai/contact[Contact Timefold] to obtain the credentials required to access our private Enterprise Maven repository. |
|
|
|
|
|
. Create `.m2/settings.xml` in your home directory with the following content: |
|
|
+ |
|
|
-- |
|
|
[source,xml,options="nowrap"] |
|
|
---- |
|
|
<settings> |
|
|
... |
|
|
<servers> |
|
|
<server> |
|
|
<!-- Replace "my_username" and "my_password" with credentials obtained from a Timefold representative. --> |
|
|
<id>timefold-solver-enterprise</id> |
|
|
<username>my_username</username> |
|
|
<password>my_password</password> |
|
|
</server> |
|
|
</servers> |
|
|
... |
|
|
</settings> |
|
|
---- |
|
|
|
|
|
See https://maven.apache.org/settings.html[Settings Reference] for more information on Maven settings. |
|
|
-- |
|
|
|
|
|
. Start the application with Maven: |
|
|
+ |
|
|
[source,shell] |
|
|
---- |
|
|
$ mvn clean quarkus:dev -Denterprise |
|
|
---- |
|
|
|
|
|
. Visit http://localhost:8080 in your browser. |
|
|
|
|
|
. Click on the *Solve* button. |
|
|
|
|
|
Then try _live coding_: |
|
|
|
|
|
. Make some changes in the source code. |
|
|
. Refresh your browser (F5). |
|
|
|
|
|
Notice that those changes are immediately in effect. |
|
|
|
|
|
[[package]] |
|
|
== Run the packaged application |
|
|
|
|
|
When you're done iterating in `quarkus:dev` mode, |
|
|
package the application to run as a conventional jar file. |
|
|
|
|
|
. Build it with Maven: |
|
|
+ |
|
|
[source, shell] |
|
|
---- |
|
|
$ mvn package |
|
|
---- |
|
|
. Run the Maven output: |
|
|
+ |
|
|
[source, shell] |
|
|
---- |
|
|
$ java -jar ./target/quarkus-app/quarkus-run.jar |
|
|
---- |
|
|
+ |
|
|
[NOTE] |
|
|
==== |
|
|
To run it on port 8081 instead, add `-Dquarkus.http.port=8081`. |
|
|
==== |
|
|
|
|
|
. Visit http://localhost:8080 in your browser. |
|
|
|
|
|
. Click on the *Solve* button. |
|
|
|
|
|
[[container]] |
|
|
== Run the application in a container |
|
|
|
|
|
. Build a container image: |
|
|
+ |
|
|
[source, shell] |
|
|
---- |
|
|
$ mvn package -Dcontainer |
|
|
---- |
|
|
The container image name |
|
|
. Run a container: |
|
|
+ |
|
|
[source, shell] |
|
|
---- |
|
|
$ docker run -p 8080:8080 --rm $USER/flight-crew-scheduling:1.0-SNAPSHOT |
|
|
---- |
|
|
|
|
|
[[native]] |
|
|
== Run it native |
|
|
|
|
|
To increase startup performance for serverless deployments, |
|
|
build the application as a native executable: |
|
|
|
|
|
. https://quarkus.io/guides/building-native-image#configuring-graalvm[Install GraalVM and gu install the native-image tool] |
|
|
|
|
|
. Compile it natively. This takes a few minutes: |
|
|
+ |
|
|
[source, shell] |
|
|
---- |
|
|
$ mvn package -Dnative |
|
|
---- |
|
|
|
|
|
. Run the native executable: |
|
|
+ |
|
|
[source, shell] |
|
|
---- |
|
|
$ ./target/*-runner |
|
|
---- |
|
|
|
|
|
. Visit http://localhost:8080 in your browser. |
|
|
|
|
|
. Click on the *Solve* button. |
|
|
|
|
|
== More information |
|
|
|
|
|
Visit https://timefold.ai[timefold.ai]. |
|
|
|