{"id":19622227,"url":"https://github.com/commercetools/commercetools-sunrise-java-training","last_synced_at":"2025-07-14T00:36:18.647Z","repository":{"id":145047414,"uuid":"62542387","full_name":"commercetools/commercetools-sunrise-java-training","owner":"commercetools","description":null,"archived":false,"fork":false,"pushed_at":"2019-12-17T09:18:14.000Z","size":2272,"stargazers_count":2,"open_issues_count":2,"forks_count":1,"subscribers_count":86,"default_branch":"master","last_synced_at":"2025-04-20T15:17:56.053Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/commercetools.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-07-04T07:52:39.000Z","updated_at":"2017-04-19T03:02:13.000Z","dependencies_parsed_at":null,"dependency_job_id":"311382be-b867-471c-914e-11b9e1769194","html_url":"https://github.com/commercetools/commercetools-sunrise-java-training","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/commercetools%2Fcommercetools-sunrise-java-training","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/commercetools%2Fcommercetools-sunrise-java-training/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/commercetools%2Fcommercetools-sunrise-java-training/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/commercetools%2Fcommercetools-sunrise-java-training/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/commercetools","download_url":"https://codeload.github.com/commercetools/commercetools-sunrise-java-training/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251246394,"owners_count":21558762,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-11T11:26:43.479Z","updated_at":"2025-04-28T03:32:29.673Z","avatar_url":"https://github.com/commercetools.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Sunrise Java Training\n\n[![Build Status](https://travis-ci.org/commercetools/commercetools-sunrise-java-training.svg?branch=master)](https://travis-ci.org/commercetools/commercetools-sunrise-java-training)\n\n## Preconditions\n\nSame preconditions apply as in [Sunrise Starter Project](https://github.com/commercetools/commercetools-sunrise-java-starter#preconditions).\n\n## Run it\n\nLearn how to run it following the documentation in [Sunrise Starter Project](https://github.com/commercetools/commercetools-sunrise-java-starter#run-it-locally).\n\n## Pre-training material \u0026 reading\n\n### Handlebars\n\nTo learn how to write Handlebars templates, please check the [Handlebars.js](http://handlebarsjs.com/) documentation. In particular, the sections about [Expressions](http://handlebarsjs.com/expressions.html), [Built-In Helpers](http://handlebarsjs.com/builtin_helpers.html) and [@data Variables](http://handlebarsjs.com/reference.html#data).\n\nTry it out interactively: [tryhandlebarsjs.com](http://tryhandlebarsjs.com/)\n\n### Java 8\n\n[Lamdba Expressions](https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html), [Streams](https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html) and [Optional](https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html) are recurring Java 8 features in Sunrise.\n\n[CompletionStage](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletionStage.html) is heavily used in Sunrise to enable asynchronous computation. Read the [Guide to Java 8 CompletionStage](http://www.nurkiewicz.com/2013/05/java-8-definitive-guide-to.html) to learn how to work with it and take a look at the [CompletableFutureUtils.java](http://commercetools.github.io/commercetools-jvm-sdk/apidocs/io/sphere/sdk/utils/CompletableFutureUtils.html) class provided by the [JVM SDK](https://github.com/commercetools/commercetools-jvm-sdk), which contains some useful methods such as `recoverWith` and `exceptionallyCompleted`.\n\n* A general guide on the highlights of Java 8 can be found in this [Java 8 Tutorial](http://winterbe.com/posts/2014/03/16/java-8-tutorial/).\n* Another good overview is [\"Java SE 8 for the Really Impatient\"](http://www.horstmann.com/java8/index.html).\n* Our [Java 8 Cheatsheet](https://we.tl/lmnvCPmqTT) is a helpful one-pager to put on your desk.\n\n### Play Framework\n\nSunrise is built on top of [Play Web Framework](https://www.playframework.com/). If you're interested in the ideas behind the Play Framework it's worth checking [this presentation by the creator](http://www.slideshare.net/jboner/going-reactive-eventdriven-scalable-resilient-systems).\n\nPlay offers Dependency Injection using [Guice](https://github.com/google/guice), which is the main way to override the default behaviour of Sunrise. Read further information on how to use [Java Dependency Injection](https://www.playframework.com/documentation/2.5.x/JavaDependencyInjection) and [how to test](https://www.playframework.com/documentation/2.5.x/JavaFunctionalTest#Injecting-tests) with it.\n\nSince Play 2.5, `CompletionStage` may arise sometimes a `No HTTP Context available` error. To understand why and learn how to fix it, check the [Java Thread Locals](https://www.playframework.com/documentation/2.5.x/ThreadPools#Java-thread-locals) documentation.\n\n* The official [Play 2.5.x Documentation](https://www.playframework.com/documentation/2.5.x/Home). You can skip the \"advanced topics\" and everything concerning persistence and databases.\n* The [\"Play for Java\" Book](http://www.manning.com/leroux/).\n* Dependency Injection:\n  * [In the Play Documentation](https://www.playframework.com/documentation/2.5.x/JavaDependencyInjection) \n  * [Getting Started on Guice](https://github.com/google/guice/wiki/GettingStarted) \n  * [Guice Bindings](https://github.com/google/guice/wiki/Bindings)\n\n### SBT (Simple Build Tool)\n\n[SBT 0.13 Tutorial](http://www.scala-sbt.org/0.13/tutorial/index.html)\n\n### Play 2.5.x migration (in case that is relevant to your project) \n\nPlay 2.5 switched some of its classes to the Java 8 counterpart, for example now `F.Promise` is replaced by `CompletionStage`. To see all changes in detail, check the [Migration Guide to 2.5](https://www.playframework.com/documentation/2.5.x/JavaMigration25).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcommercetools%2Fcommercetools-sunrise-java-training","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcommercetools%2Fcommercetools-sunrise-java-training","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcommercetools%2Fcommercetools-sunrise-java-training/lists"}