Skip to content
Switch branches/tags
This branch is even with PGSSoft:master.

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

Java Spring PWR 2017 Course Page


This is the homepage of Java/Spring course organized on Wrocław Uniwersity of Technology by PGS Software in Spring 2017.

Our goal is to go through key aspects of professional development of web application based on the most popular Java web framework - Spring.

After the course, we would like to invite some of you to participate in summer internship program at PGS Software. Do not worry, its paid internship, and you will be able to put your newly acquired knowledge in practice in real-world challenges in renowned software house. Perhaps later you would like to stay with us longer…



Chapter 6

FILL the questionare for chapter 6 in agenda

  • Provide 60% of coverage for source code from previous chapter
  • Write Hamcrest matchers isPresent and isEmpty. First matches when Optional.isPresent() is true, the other when Optional.empty() is true
  • Write Matcher named exchangesFrom that takes a currency as an arugment and matches when CurrencyPair contains 'from currency'`corresponding to matcher's argument
  • Write a method in business-logic-implementation that returns all currency pairs from database. Mock repository so it returns 5 different currency pairs and use exchangeFrom matcher along with hasItem matcher so hasItem(exchangeFrom(PLN)) matches if returned collection contains at least one pair with PLN as base currency


Chapter 5

Fill the questionaire for chapter 5 in agenda

  • Modify existing endpoints, that result in a query to, to save exchange rates in database. The entry should contain rates of few common currencies to EUR and date.
  • Add a new GET endpoint that will return last entry from database.
  • Add a new PUT endpoint that will save new entry provided in request body in database and return current number of entries.
  • Add a new DELETE endpoint that will remove one entry based on provided id.
  • Add a new POST endpoint expecting body containing currency code and two dates and returning statistics from this period including: (but not limited to) average, minimum and maximum rates to EUR and number of entries.
  • Redesign the database - use two tables instead of one. First should contain id, currency code and name. Second should have id, date, use two foreign keys from first table and store exchange rates between two arbitrary currencies in one entry. Add new endpoints to handle new design. Experiment :)


Chapter 4

Fill the questionaire for chapter 4 in agenda

Add to an existing application endpoints that will:

  • Accept GET request with source currency and target currency and return exchange rates based on real data from
  • Accept GET request with source currency and multiple target currencies and return rates for each one
  • Do the same, but accept POST request with a JSON body containing those parameters
  • Accept a number between 0 and 1000, source currency and target currency and performs conversion
  • Add date as parameter to present historical results
  • Return some status codes besides "200 OK" and "500 Internal Server Error"


Chapter 3

Please also fill in the questionaire attached to description of chapter 3. Fron now on the questionaire will be attached to each chapter

Split existing application into several maven modules with following naming and content:

  • rest client - contains the DemoApplication along with controllers
  • business logic interface - contains technology agnostic interfaces
  • business logic implementation - contains classes implementing interfaces
  • rest client - leave empty for now
  • database - leave empty for now

You may have use of following resources

Chapter 2


  • The course will start March 7 (Tuesday)
  • The course will consist of eight meetings, carried over six weeks:
  • 07.03.2017
  • 09.03.2017
  • 14.03.2017
  • 16.03.2017
  • 21.03.2017
  • 28.03.2017
  • 04.04.2017
  • 11.04.2017
  • Classes will start at 5pm and last two hours.
  • Classes will take place at Wrocław University of Technology, plac Grunwaldzki 11, 50-377 Wrocław, building D-21, room 201
  • You can contact us via
  • At the last class, there will be written exam, mandatory to pass the course.


  • Basic Java SE skills is the only hard requirement. We would like to focus on how to implement features in given framework, environment, tools, clean code, good practices etc. not the basics of language itself.
  • The lecture / workshop will be in Polish
  • Written materials will be mostly in English


Note, that this may be subject to change depending on how fast we will be able to go.

Chapter 1: Introduction

  • Intro, rules and organizational stuff.
  • An overview of the application we will build during the course.

Chapter 2: Tools and environments

Chapter 3: Spring basics

  • Basics of HTTP, request, response, servlets
  • Basics of Java web applications.
  • Application configuration.
  • Spring Boot.
  • Beans, scopes, annotations, factories, contexts.

Chapter 4: Web Services

  • HTTP methods, Servlets, JSON
  • Web services, REST
  • Processing incoming requests
  • Outgoing requests - RestTemplate
  • Tools – Postman.

Chapter 5: Database

  • SQL and relational databases.
  • JPA, Object-Relational Mapping.
  • Spring Data.

Chapter 6: Testing

  • Testing basics
  • Junit, unit tests
  • Mockito, mocking frameworks
  • Integration tests

Chapter 7: Security, Front-end & Logging

  • Spring Security
  • JHipster frontend
  • Logging frameworks

Chapter 8: Error Handling & Advanced Spring

  • HTTP Error codes and Java exceptions
  • Advanced Spring features and more
  • Written exam


Aside from links in the agenda:

Pluralsight has some good courses. It is paid service, but there is a 30 days free trial:

Project setup

Environment preparation from ground up.


Git client / Cloning Repository

MySQL (for Windows)

  • Download MySQL Installer from
  • Run
  • [License Agreement]: Accept, Next
  • [Setup Type]: choose “Developer Default”, Next
  • [Installation]: Execute, Next
  • [Type and Networking]: use default settings, Next
  • [Account and Roles]: choose root password, Next
  • [Windows Service]: choose default settings, Next
  • [Connect To Server]: Check, Next
  • Apply Server Configuration: Execute, Finish

MySQL Workbench (for Windows)

Java JDK

Eclipse / Intellij IDEA


  • Download lombok.jar from
  • Run jar (using “Java (TE) Platform SE Binary” on Windows)
  • If it says it can’t find any IDE on your computer, specify eclipse.exe location -> Install / Update
  • It should add -javaagent:lombok.jar to -vmargs in eclipse.ini and lombok.jar file in Eclipse root folder
  • Restart Eclipse if it’s running

Project Setup

In Eclipse:

  • File -> Import -> Maven-> Existing Maven Projects -> Next
  • Select WeatherForecast as root directory. You should have root pom.xml file displayed and submodules pom.xml underneath. -> Finish.
  • Wait for Importing Maven projects background job to finish
  • Go to Workbench (upper right corner)
  • If there will be Java problems don’t panic
  • Window -> preferences -> Java -> Installed JREs -> Add -> Standard VM -> Directory for Java JDK (not JRE!) -> Finish. Choose jdk from list -> Apply.
  • Root project (WeatherForecast) -> Run as Maven Install, it should output “[INFO] BUILD SUCCESS” at the end
  • If there are still red markers: Project -> Clean
  • Go to class in rest module, Run as -> Java Application
  • Output should start to appear on console, and at the end, you should get a line like: “ : Started Application in 12.208 seconds (JVM running for 12.852)”

In MySQL Workbench (setup for chapter 5: Database)

  • MySQL Connections -> Local instance MySQL57
  • File -> New query tab
  • Create schema by executing statement: “CREATE DATABASE forecast DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;”
  • Schema name should match property: “spring.datasource.url” in project file: “WeatherForecast\database-access\src\main\resources\”, in this case “jdbc:mysql://localhost:3306/forecast”
  • Create user by executing statement: “CREATE USER 'username'@'localhost' IDENTIFIED BY userpass;”
  • User name and password should match properties “spring.datasource.username” and “spring.datasource.password” in the same file
  • Grant the new user permissions to schema: “GRANT ALL ON forecast.* TO 'username'@'localhost';”
  • Click refresh in Schemas and select forecast if it’s not visible yet
  • File -> Run SQL script, select script from project: “WeatherForecast\database-access\src\main\resources\sql\mysql\ddl\V0__create_forecast_table.sql”, select forecast schema -> Run




Java/Spring course organized on Wrocław Uniwersity of Technology by PGS Software in Spring 2017.



No releases published


No packages published