Service in charge of providing LTI 1.3 integration. This service allows both teachers and students to communicate with the platform through Learning Management Systems (LMS) as, for example, Blackboard Learn. Specifically, the service allows teachers to select an exam from within a context in a LMS when building course contents, and student to sit for exams also within the context of a course in the LMS.
- Select exams from within a course context in a LMS
- Sit for exams from within a course context in a LMS
The following instructions will set the development environment in your local machine, as well as let you run locally an instance of the system.
Note: This guide covers only Mac OS X setups.
Clone the repository or download source code:
$ git clone https://github.com/coding-eval-platform/lti-service.git
or
$ wget https://github.com/coding-eval-platform/lti-service/archive/master.zip
This project requires Java 11. The following is a guide to install Java 11, and optional jenv
to manage your Java environments.
-
Install Java 11:
$ brew cask install java
Note: If you already had a previous version of Java installed in your system, this will upgrade it. If you want to have several versions of Java installed in your machine, you can use the cask versions tap:
-
Tap the cask versions repository:
$ brew tap homebrew/cask-versions
-
Install a previous version of Java:
$ brew cask install java8
-
-
Install and configure jEnv (Optional):
Perform this step if you want to run multiple versions of Java in your machine. For more information, check jEnv webpage. Also, check this guide.
-
Download software:
$ brew install jenv
-
Update your
bash
orzsh
profile to use jEnv:$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile $ echo 'eval "$(jenv init -)"' >> ~/.bash_profile
If you want to use jEnv now, don't forget to source again your profile:
$ source ~/.bash_profile
$ echo ‘export PATH=”$HOME/.jenv/bin:$PATH”’ >> ~/.zshrc $ echo ‘eval “$(jenv init -)”’ >> ~/.zshrc
If you want to use jEnv now, don't forget to source again your profile:
$ source ~/.zshrc
-
Locate the JDK installations in your machine. They will likely be in the
/Library/Java/JavaVirtualMachines/
directory. -
Add a Java version to jEnv:
$ jenv add /Library/Java/JavaVirtualMachines/{{jdk-version}}/Contents/Home
Replace the
{{jdk-version}}
placeholder with an actual version of Java. For example:$ jenv add /Library/Java/JavaVirtualMachines/openjdk-11.0.2.jdk/Contents/Home
-
Configure jEnv:
To set a global version of Java, use the following command:
$ jenv global {{jdk-version}}
Replace the
{{jdk-version}}
placeholder with an actual version of Java. For example:$ jenv global openjdk-11.0.2.jdk
You can check the Java versions being managed by jEnv using the following command:
$ jenv versions
Similarly, you can set the Java Version with a local or shell scope:
If you want to set the Java version for the current working directory:
$ jenv local {{jdk-version}}
If you want to set the Java version for the current session:
$ jenv shell {{jdk-version}}
-
The building tool used for the project is Maven.
$ brew install maven
If you have installed jEnv, you can enable the maven plugin, in order to execute maven using the jEnv managed Java:
$ jenv enable-plugin maven
Restart your shell session in order to have the plugin running.
Check this resource for more information about jEnv plugins.
The project requires a PostgreSQL database.
- Install PostgreSQL
$ brew install postgresql
- Create a user and a database for the application. You can check the create user and create database documentations to learn how to perform this step.
Set the following properties with the appropiate values:
spring.datasource.url
spring.datasource.username
spring.datasource.password
You can do this by changing the <project-root>/lti-service-application/src/main/resources/application.yml
file, in the development section, or by defining the properties through the command line (with -Dkey=value
properties, or with --key=value
properties) when running the application.
Note: These properties can be filled with the values of a local database, or with the values of a remote database.
The project requires a Kafka cluster to start and to process requests. Kafka requires Zookeeper.
- Instal Zookeeper
$ brew install zookeeper
- Install Kafka.
$ brew install kafka
That's it.
Set the following property:
spring.kafka.bootstrap-servers
You can do this by changing the <project-root>/lti-service-application/src/main/resources/application.yml
file, in the development section, or by defining the properties through the command line (with -Dkey=value
properties, or with --key=value
properties) when running the application.
The property must be set with the Kafka brokers address and port. You can set several of them. THe format is the following: host:port
. Check the following example:
spring.kafka.bootstrap-servers:localhost:9092
Note: These properties can be filled with the values of a local cluster, or with the values of a remote cluster.
-
Install artifacts:
$ cd <project-root> $ mvn clean install
Doing this will let you access all modules defined in the project scope.
-
Build the project:
$ mvn clean pacakge
Note: In case you change the
<project-root>/lti-service-application/src/main/resources/application.yml
, you must build again the project. Otherwise, if you want to change a property on the fly, use command line properties.
You can run the application using the following command:
$ export LTI_SERVICE_VERSION=<project-version>
$ java [-Dkey=value properties] -jar <project-root>/lti-service-application/target/lti-service-application-$LTI_SERVICE_VERSION.jar [--key=value properties]
The following is a full example of how to run the application:
export LTI_SERVICE_VERSION=<project-version>
java \
-Dspring.datasource.url=jdbc:postgresql://localhost:5432/coding-eval-platform__lti-service \
-Dspring.datasource.username=coding-eval-platform__lti-service \
-Dspring.datasource.password=coding-eval-platform__lti-service \
-Dspring.kafka.bootstrap-servers=localhost:9092 \
-jar <project-root>/lti-service-application/target/lti-service-application-$LTI_SERVICE_VERSION.jar \
--spring.profiles.active=dev
Note: In case of using a new database, this will create all tables.
-
(Optional) Install Flyway CLI. Check the documentation in order to learn how to do it.
Flyway is a tool for performing database migrations easier (i.e changing schema, adding system data, etc.). Check their website for more information.
-
(Optional) Create a Flyway configuration file. This file must contain the following properties:
# Flyway CLI configuration flyway.url=<database-url> flyway.user=<database-username> flyway.password=<database-user-password>
This configution file will let you use Flyway easier. It won't ask for credentials each time you want to use it.
Note: The
.gitignore
file declares theflyway.conf
file, so this information should not leak into GitHub.
This project includes a Dockerfile
in the lti-service-application
module, together with the Spotify's dockerfile maven plugin.
To create an image to run this project in Docker just package the application with maven, and set the docker-build
profile.
You just have to run the following command:
$ mvn clean package -P docker-build -Ddocker.image.tag=latest
The built Docker image will be itbacep/lti-service:latest
. You can specify the tag you want.
Once you have built the Docker image, just run the following command:
$ docker run -p 8000:8000 itbacep/lti-service:latest
Note that you have to use the same tag you used to create the image.
Note that you will have to link the container with another container (or the host machine) in which both a PostgreSQL server, and a Kafka cluster, are running.
This project is integrated with CircleCI.
When a pull request is created, a build will be triggered in CircleCI, which must succeed in order to merge the pull request. This build will just compile the source code and run tests. Note that if still committing to a branch with an open pull request, each push to the said branch will trigger a build.
Pushing or merging into master
will also trigger the compile and test build in CircleCI. If the build succeeds, this will be followed by a Docker phase: it will build a Docker image and push it into DockerHub. This images will be tagged with the commit's hash.
A release is performed by tagging in git. Pushing a tag will also trigger the compile and test build in CircleCI. If the build succeeds, this will be followed by a Docker phase: it will build a Docker image and push it into DockerHub. This images will be tagged with the git's tag.
Copyright 2019 Bellini & Lobo
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.