hello-world-service/Instructions.md

7.3 KiB

Instructions

Execution

start the docker container

cd dockerize && ./buildImageAndStart.sh -e

debug the docker container (read [### DEBUG] for details)

cd dockerize && ./buildImageAndStart.sh -d

to compile and push to harbor registry with a custom container.ini file:

cd dockerize && ./buildImageAndStart.sh -r -m  -l -c "./docker/container-XXX.ini"

Test URLs

obtain OAuth Access Token at https://next.dev.d4science.org/group/gcube/home

replace {{TOKEN}} with your token

TOKEN={{TOKEN}}
curl -l 'http://localhost:8080/helloworld/guest'

curl -l 'http://localhost:8080/helloworld/hello' -h 'Authorization: $TOKEN'
curl -l 'http://localhost:8080/helloworld/details' -h 'Authorization: $TOKEN'

curl -l 'http://localhost:8080/helloworld/auth/org_member' -h 'Authorization: $TOKEN'
curl -l 'http://localhost:8080/helloworld/auth/member' -h 'Authorization: $TOKEN'
curl -l 'http://localhost:8080/helloworld/gcube/resource/metrics'
curl -l 'http://localhost:8080/helloworld/gcube/resource/health' 

Debug

start the docker container in debug Mode cd dockerize && ./buildImageAndStartWithDebug.sh -d

connect the JAVA debugger to port 5005

  • VSCODE: press the green play button and start "Debug (Attach)

Project Structure

# gitignore configuration
│ .gitignore
│
# readme, license, instruction files
├── CHANGELOG.md
├── FUNDING.md
├── Instructions.md
├── LICENSE.md
├── README.md
│ 
# maven configuration for the project
├── pom.xml
│
# the files in the gcube folder are processed by mvn parent during the packing fase  
# the variables ${VAR} are resolved using the values found in pom.xml 
# and the generated file are copied (respecting the gcube folder structure) inside the folder generated in ./target and so in the corrisponding war file
├── gcube
│   └── extra-resources
│       └── WEB-INF
#           #  defines the smartgear application configuration
│           └── application.yaml
| 
# project sources
├── src
│   ├── main
│   │   ├── java
│   │   │   └── org
│   │   │       └── gcube
│   │   │           └── service
│   │   │               └── helloworld
│   │   │                   ├── HelloWorldManager.java
│   │   │                   ├── annotation
│   │   │                   │   └── PURGE.java
│   │   │                   ├── beans
│   │   │                   │   └── ResponseBean.java
│   │   │                   ├── health
│   │   │                   │   ├── CreateTempFileCheck.java
│   │   │                   │   └── EmptyCheck.java
│   │   │                   ├── rest
│   │   │                   │   ├── AuthenticatedService.java
│   │   │                   │   ├── ExcludeAuthorizationService.java
│   │   │                   │   ├── HelloService.java
│   │   │                   │   └── ServiceExceptionMapper.java
│   │   │                   ├── serializers
│   │   │                   └── utils
│   │   │                       └── RestUtils.java
│   │   ├── resources
│   │   │   └── META-INF
│   │   │       └── enunciate
│   │   │           └── d4science_docs.fmt
│   │   ├── webapp
#   #   #   # WEB-INF resources are accessible to the resource loader of your Web-Application 
#   #   #   # and not served directly to a client by the container
│   │   │   ├── WEB-INF
#   #   #   #   # deployment descriptor
│   │   │   │   └── web.xml
│   │   │   └── api-docs
│   │   │       └── css
│   │   │           └── d4science_enunciate_custom.css
│   │   └── webapp copy
│   │       └── api-docs
│   │           └── css
│   │               └── d4science_enunciate_custom.css
│   └── test
│       ├── java
│       └── resources
│
# optional, for local develop in docker containers
├── dockerize
│   ├── buildImageAndStart.sh
│   ├── build_conf
│   ├── configuration
│   │   ├── .gitignore
│   │   ├── container.default.ini
│   │   ├── container.ini -> container.xxx.ini
│   │   ├── devsec.gcubekey
│   │   └── logback.xml
│   ├── docker.conf
│   ├── loginHarborHub.sh
│   ├── pull_docker.sh
│   ├── push_docker.sh
│   ├── start_docker.sh
│   └── stop_docker.sh
│
# documentation config
├── documentation
#   # postman collections to test the API
│   ├── postman
│   │   ├── Hello World Env for devVRE.postman_environment.json
│   │   └── Hello World Service.postman_collection.json
│   │
#   # enunciate configuration
│   ├── enunciate.xml
│   │
#   # sphinx configuration
│   └── sphinx
│       ├── Makefile
│       ├── conf.py
│       ├── index.rst
│       ├── make.bat
│       └── tests.rst
│
# Docker file
├── Dockerfile
│
# optional, sphinx configuration
├── sphinx
│   ├── Makefile
│   ├── conf.py
│   ├── index.rst
│   ├── make.bat
│   └── tests.rst
│
# optional, vscode debug configuration 
├── .vscode
│   ├── launch.json
│   └── container.dev.ini
│
# optional, enunciate configuration
├── enunciate.xml
│
# project documentation
├── documentation
│   ├── dockerizing.md
│   │
#   # postman collections to test the API
│   └── postman
│       ├── gcube-devsec-devVRE.postman_environment.json
│       └── Smartgears4 helloword.postman_collection.json
│
# the output of maven package
└── target

file details

  • gitignore: gitignore file for java projects

  • pom.xml

    • : maven-parent configuration. currently 1.2.0 version
    • : path for web.xml
    • ???
    • gcube dependency manager
  • dockerize/configuration folder: folder with the configurations for the exevution of the application. are copied in the docker container during building

  • dockerize/configuration/container.ini: configurations for the docker container.

    • create your own configuration copying an existing template
    • the default execution uses dockerize/configuration/container.ini, it can be a simlink to a custom config
    • gitignore ignores all container*.ini files in the folder excepting container.default.ini
    • mode: [online/offline]: register the service on IS. use offline for local docker instances
  • gcube folder: the files in the gcube folder are processed by maven-parent, the variables ${VAR} ara resolved using the values found in pom.xml and the generated file are put in the target folder and in the war file. ◊