├── readme.adoc └── timeline.adoc /readme.adoc: -------------------------------------------------------------------------------- 1 | = Modern Web Application Development for Java Programmers 2 | © 2014 Farata Systems LLC. 3 | 2014-03-11 4 | :revdate: 2014-03-11 12:00:32 -0600 5 | :linkattrs: 6 | :ast: * 7 | :y: ✓ 8 | :n: ✘ 9 | :y: icon:check-sign[role="green"] 10 | :n: icon:check-minus[role="red"] 11 | :c: icon:file-text-alt[role="blue"] 12 | :toc: 13 | :toc-placement!: 14 | :toc-title: Table of Contents 15 | :toclevels: 3 16 | :idprefix: 17 | :idseparator: - 18 | :sectanchors: 19 | :icons: font 20 | :source-highlighter: highlight.js 21 | :highlightjs-theme: idea 22 | :experimental: 23 | 24 | Java ecosystem offers lots of different ways to architect, develop, and deploy a distributed Web application. The parallel ecosystem known as HTML5 offers lots of different ways to design, develop, and deploy the cross-platform UI that works on multiple Web browsers and variety of devices. 25 | 26 | toc::[] 27 | 28 | == Enter The Modern Web Application Development 29 | 30 | This online training class will give you a practical knowledge of developing front and back end components by immersing into an environment similar to a real-world enterprise setup. Be prepared to download, install and master lots of various software packages that will be used at different stages of training. 31 | 32 | We'll spend about 40% of the time developing User Interface in HTML5 and about 60% working on the server-side Java code. During the first half of the course sessions we'll be working only with HTML, JavaScript and related libraries and frameworks. The Java-related topics are covered in the second part of this training. 33 | 34 | === Course Outline 35 | 36 | * *Unit 1.* Creating a wireframe of the UI of the online auction. Developing and Debugging in HTML/JavaScript. Fast pace introduction to JavaScript. Intro to GIT/Github. Think mobile: Intro to Responsive Web Design. Mocking up the UI. Creating the first prototype of the auction in pure HTML/JavaScript/CSS. Configuring the auction project in IntelliJ IDEA. Styling with Bootstrap. Here's link:timeline.adoc#unit-1[the timeline] of this lesson. 37 | 38 | * *Unit 2.* Intro to Google AngularJS framework. Configuring libraries in IntelliJ IDEA. Re-creating the first two pages of the auction app. Installing NPM and Grunt. Configuring Grunt. Here's link:timeline.adoc#unit-2[the timeline] for this lesson. 39 | 40 | * *Unit 3.* Creating the second prototype of the UI with AngularJS. Scopes. Adding more tools: package management with Bower. Project scaffolding with Yeoman. Here's link:timeline.adoc#unit-3[the timeline] of this lesson. 41 | 42 | * *Unit 4.* AngularJS framework in depth. Forms, REST interaction and custom reusable components. Mocking up server side with AngularJS. 43 | 44 | * *Unit 5.* Introducing Test-Driven Development in JavaScript. Test-driven is not test-first. Creating test scripts for models, views, controllers with Jasmine.js. AJAX. JSON. REST, HATEOAS. Creating the third prototype of the UI (consuming JSON from the server via HTTP protocol). Here's link:timeline.adoc#unit-5[the timeline] for this lesson. 45 | 46 | _One week break for self study and catching up._ 47 | 48 | * *Unit 6.* 49 | + 50 | 51 | _Prerequisites_ 52 | + 53 | 54 | * Download and install http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html[Java SE Development Kit 8] 55 | + 56 | 57 | _Java SE 8_. Overview of the selected new features (lambda-expressions, Streams API, Default Methods in interfaces). Applying bulk operations on the collections of auctions items. Java build automation with Gradle. Test-Driven Development in Java. JUnit and Spock. Here's link:timeline.adoc#unit-6[the timeline] of this lesson. 58 | 59 | * *Unit 7.* 60 | + 61 | 62 | _Prerequisites_ 63 | + 64 | 65 | * Install WildFly server (_TBD_ link) 66 | * Configure IDE (_TBD_ link to video) 67 | + 68 | 69 | _Java EE 7_. Overview of the new features. Creating the Java EE version of the server-side auction (JAX-RS, CDI). Intro to WebSockets (WebSocket API, JSR-356). Pushing the auction data to the client using WebSocket. 70 | 71 | * *Unit 8.* 72 | + 73 | 74 | _Prerequisites_ 75 | 76 | * Install DBMS server 77 | * Configure IDE to connect to the database 78 | + 79 | 80 | Creating data storage for online auction. JDBC vs JPA. SQL mapping framework MyBatis. 81 | 82 | * *Unit 9.* Intro to Java Messaging. JMS 2.0. JNDI. Configuring Messaging Server (mocking a bidding engine). Bringing messaging into the Auction application. 83 | 84 | 85 | * *Unit 10.* Spring Framework 4 (core, security, MVC, JdbcTemplate). Creating the Spring version of the server-side app. Integration with the auction UI. Code review and discussing the Spring version of the Auction Web application. 86 | 87 | === Prerequisites 88 | 89 | Attendees should plan on committing about 15-20 hours a week for studying and working on the assignments from this course. We'll split the class into small teams to work on the assignments during the week, so your contribution is required. 90 | 91 | Attendees must know basic HTML tags (see http://docs.webplatform.org/wiki/html/tutorials ). 92 | 93 | We'll be using Git version control system during this course. To get familiar with Git and GitHub watch http://flexblog.faratasystems.com/2013/11/08/intro-to-working-with-git-and-github[our training video] before this training starts. 94 | 95 | Attendees must have a working knowledge of core Java, and understanding of Java EE technologies. 96 | 97 | Each attendee has to have a modern computer with plenty of disk space (4+ GB of RAM is recommended). 98 | 99 | Having a decent Internet connection (more than 4Mbps for download) is a must. 100 | 101 | 102 | === How 103 | 104 | This class will be a a mix of theory (40%) and practical work (60%). During this training attendees will develop an online auction. This auction should look good and be functional on desktops, tablets and smartphones. 105 | 106 | This training will consist of 10 weekly online live sessions on the weekends (each session is about 3hr and 20min) and 9 optional-to-attend one-hour meetings in between. We'll use screen-sharing software. Attendees will be able to hear and see the instructors and will communicate with them via a chat room. Between the lessons the student communicate with each other in the online forum. 107 | 108 | === Frameworks, Tools and APIs 109 | 110 | Here's the current list of the software that we'll use in this course. 111 | 112 | ==== Front end 113 | 114 | * HTML 115 | * CSS 116 | * Responsive Web Design principles 117 | * JavaScript 118 | * JSON 119 | * http://angularjs.org/[AngularJS framework] 120 | * http://getbootstrap.com/[Twitter Bootstrap framework] 121 | * Google Chrome Web Browser 122 | * WebSockets https://developer.mozilla.org/en-US/docs/WebSockets[on the client] 123 | * http://gruntjs.com/[Grunt] (The JavaScript task runner) 124 | * https://npmjs.org/[NPM] 125 | * http://bower.io/[Bower] 126 | * https://github.com/pivotal/jasmine[Jasmine framework] 127 | 128 | ==== Middle Tier 129 | 130 | * http://www.oracle.com/technetwork/java/javase/overview/index.html/[Java SE 8] 131 | * http://www.oracle.com/technetwork/java/javaee/overview/index.html[Java EE 7] 132 | * SQL: JDBC or http://mybatis.github.io/mybatis-3/[MyBatis] 133 | * https://spring.io/blog/2013/11/01/spring-framework-4-0-rc1-available[Spring 4 Framework] (some modules) 134 | * http://www.wildfly.org/[JBoss Wildfly] Application Server 135 | * WebSockets https://jcp.org/en/jsr/detail?id=356[on the server (JSR-356]) 136 | * JMS 2.0 137 | * http://docs.oracle.com/javaee/7/tutorial/doc/jaxrs-advanced.htm#GJJXE[JAX-RS] (Java API for RESTful Web services) 138 | * http://www.gradle.org/[Gradle] (build automation) 139 | * https://code.google.com/p/spock/[Spock] or JUnit (unit testing and mocking) 140 | 141 | ==== DBMS 142 | 143 | * Oracle 144 | 145 | ==== Miscellaneous 146 | 147 | * Git (version control system), GitHub (Git hosting service) 148 | * IntelliJ IDEA IDE Ultimate. Our special thanks to JetBrains for providing free http://www.jetbrains.com/idea/buy/classroom_license.html[classroom license] for all the students enrolled into this class. 149 | 150 | === FAQ 151 | 152 | 1. _I'm a professional programmer, but have never actually worked in Java. I took some classes both in SE and EE, worked though several Java books. Would it be enough?_ 153 | + 154 | 155 | We don't know. It depends on your ability to learn new material. If your Java is a little rusty, start watching http://www.youtube.com/user/yfain[Java video lessons by Yakov Fain] - they are being published weekly. 156 | 157 | 2. _I have Eclipse Juno with Java EE 7. I'm currently taking Intro to Android Programming and would prefer to keep my existing setup._ 158 | + 159 | 160 | In this training we use IntelliJ IDEA IDE as it has good support of both JavaScript and Java. All instructions will be provided for this IDE only. Instructors will not be addressing issues related to Eclipse IDE. 161 | 162 | 3. _What other software do I need to have installed on my laptop?_ 163 | + 164 | 165 | We're providing instructions for the software required for each lesson as we proceed. 166 | 167 | 4. _How deep knowledge of SQL is required? I'm OK with not too complicated queries._ 168 | + 169 | 170 | No deep knowledge of SQL is required. 171 | 172 | 5. _Are we starting JavaScript practically from scratch?_ 173 | + 174 | 175 | Yes, but in a fast pace. 176 | 177 | 6. _How much "extra help" will be available if I'd be having a trouble with something?_ 178 | + 179 | 180 | Students communicate with each other by posting questions/answers in the forum. Instructors are monitoring this list too. Also, there is one hour consultation time between the lesson where instructors answer questions. 181 | 182 | 7. _Do I need to know GIT for this course?_ 183 | + 184 | 185 | Yes, you do. Please watch http://www.youtube.com/watch?v=MXDRIUGW3X4[this video] to get familiar with GIT and GitHub. 186 | 187 | 8. _I'm still not sure if I can absorb all these materials within 10 weeks_ 188 | + 189 | 190 | This is an intensive training that's targeted busy professionals who need to master new software in a fast pace. If you can't commit 15-20 hours a week for studying, do not enroll as you'll be wasting money. 191 | 192 | 9. _When's the Next Training_ 193 | 194 | Currently we're planning to run the next public training starting July 27, 2014. The information about the next public training will be announced at http://www.faratasystems.com. To get on the waiting list please email at training@faratasystems.com. 195 | 196 | You can also request this training to be conducted for your organization online. Just email you inquiry to training@faratasystems.com. 197 | 198 | === Instructors 199 | 200 | This course is taught by three instructors who are practitioners employed by http://faratasystems.com/[Farata Systems]: 201 | 202 | * *Yakov Fain* - Co-founder of Farata Systems, the IT consultancy. https://java.net/website/java-champions/bios.html[Java Champion]. Organizer of the http://www.meetup.com/NJFlex/[Princeton Java Users Group]. Authored and co-authored a number of technical books on programming. Yakov presented on various international conferences on Java and JavaScript related topics. 203 | 204 | * *Viktor Gamov* - Lead software developer in Farata Systems. Helps financial companies with various Java and HTML5 projects. Co-organizer of the Princeton Java Users Group. Co-author of the O'Reilly book on http://enterprisewebbook.com/[Enterprise Web Development]. Viktor presented on various international conferences on Java and JavaScript related topics. 205 | 206 | * *Anton Moiseev* - Lead software developer in Farata Systems. Specializes in developing e-Commerce applications. Enjoys everything HTML5-related. Authored and taught trainings on developing Web applications with Ext JS framework. 207 | 208 | Other professionals from Farata Systems may also be invited to share their experience in developing and deploying complex enterprise systems. 209 | -------------------------------------------------------------------------------- /timeline.adoc: -------------------------------------------------------------------------------- 1 | = Unit Timelines 2 | © 2014 Farata Systems LLC. 3 | :revdate: 2014-03-18 14:54:36 -0600 4 | :linkattrs: 5 | :ast: * 6 | :y: ✓ 7 | :n: ✘ 8 | :y: icon:check-sign[role="green"] 9 | :n: icon:check-minus[role="red"] 10 | :c: icon:file-text-alt[role="blue"] 11 | :toc: auto 12 | :toc-placement: auto 13 | :toc-position: right 14 | :toc-title: Table of content 15 | :toclevels: 3 16 | :idprefix: 17 | :idseparator: - 18 | :sectanchors: 19 | :icons: font 20 | :source-highlighter: highlight.js 21 | :highlightjs-theme: idea 22 | :experimental: 23 | 24 | toc::[] 25 | 26 | == Timelines 27 | 28 | === Unit 1 29 | 30 | [cols="2", options="footer"] 31 | |=== 32 | |Intro to this Training Course 33 | |10 min 34 | 35 | |Fast-paced Intro to JavaScript 36 | |60 min 37 | 38 | |Creating Auction App Mockups 39 | |10 min 40 | 41 | |_Hands-on:_ Auction App Prototype (v0, v1) 42 | |20 min 43 | 44 | |Responsive Web Design 45 | |20 min 46 | 47 | |Break 48 | |10 min 49 | 50 | |_Hands-on:_ Auction App Prototype (v2, v3) 51 | |20 min 52 | 53 | |Bootstrap Framework 54 | |20 min 55 | 56 | |_Hands-on:_ Auction App Prototype (v4, v5) 57 | |20 min 58 | 59 | |Using Git/GitHub in this course 60 | |10 min 61 | 62 | |*Total* 63 | |*200 min* 64 | |=== 65 | 66 | 67 | === Unit 2 68 | 69 | [cols="2", options="footer"] 70 | |=== 71 | |Homework 1 Review 72 | |30 min 73 | 74 | |Overview of JavaScript Alternatives 75 | |10 min 76 | 77 | |TypeScript Basics 78 | |30 min 79 | 80 | |_Hands-on:_ Installing required tools, TypeScript in action 81 | |20 min 82 | 83 | |Break 84 | |10 min 85 | 86 | |Overview of JavaScript Frameworks 87 | |10 min 88 | 89 | |Getting Started with AngularJS 90 | |20 min 91 | 92 | |_Hands-on:_ First AngularJS Application 93 | |10 min 94 | 95 | |Dependency Injection in AngularJS 96 | |30 min 97 | 98 | |_Hands-on:_ Getting Started AngularJS version of Auction App. 99 | |30 min 100 | 101 | |*Total* 102 | |*200 min* 103 | |=== 104 | 105 | 106 | === Unit 3 107 | 108 | [cols="2", options="footer"] 109 | |=== 110 | |Homework 2 Review 111 | |30 min 112 | 113 | |AngularJS Scopes 114 | |20 min 115 | 116 | |AngularJS Routing 117 | |10 min 118 | 119 | |_Hands-on:_ Enabling routing for the auction app 120 | |20 min 121 | 122 | |Break 123 | |10 min 124 | 125 | |AngularJS Directives 126 | |30 min 127 | 128 | |AngularJS Filters 129 | |10 min 130 | 131 | |_Hands-on:_ Decomposing the auction app UI using directives 132 | |20 min 133 | 134 | |AngularJS: Interacting with REST services. 135 | |20 min 136 | 137 | |Setting up tools: node, npm, bower, grunt. 138 | |30 min 139 | 140 | |*Total* 141 | |*200 min* 142 | |=== 143 | 144 | === Unit 5 145 | 146 | [cols="2", options="footer"] 147 | |=== 148 | |Code Quality Tools (+jshint+, +tslint+) 149 | |15 min 150 | 151 | 2+|*Test Driven Development* 152 | 153 | |Test Driven Development 154 | |10 min 155 | 156 | |Jasmine 157 | |10 min 158 | 159 | |_Hands-on:_ Using Jasmine 160 | |10 min 161 | 162 | |Test Runners: Karma 163 | |10 min 164 | 165 | |_Hands-on:_ Initializing Karma project, run tests, IDE integration 166 | |20 min 167 | 168 | |AngularJS specific testing Angular DI, mocks (`$httpBackend`), view tests, controllers 169 | |20 min 170 | 171 | |_Hands-on:_ TDD with AngularJS 172 | |20 min 173 | 174 | |*Total* 175 | |*115 min* 176 | 177 | |Break 178 | |10 min 179 | 180 | |AJAX, JSON, REST, HATEOAS, CORS 181 | |40 min 182 | 183 | |Angular Components: `AngularResource`, `RestAngular` 184 | |15 min 185 | 186 | |_Hands-on_: Consuming JSON services from a fake server - http://apiary.io[apiary] 187 | |20 min 188 | 189 | 2+|_Home work_: Creating the third prototype of the UI: cover components with tests, consuming JSON from the server via HTTP protocol. 190 | 191 | |*Total* 192 | |*85 min* 193 | |=== 194 | 195 | 196 | === Unit 6 197 | 198 | [cols="2", options="footer"] 199 | |=== 200 | |Java SE 8. Overview of the new features 201 | |60 min 202 | 203 | |_Hands-on_: Quick intro to Gradle 204 | |20 min 205 | 206 | |Test-Driven Development in Java 207 | |45 min 208 | 209 | |_Hands-on_: Running unit tests and collection the test results 210 | |15 min 211 | 212 | |_Hands-on_: Moving from fake REST server to real one (WildFly). 213 | |30 min 214 | 215 | |*Total* 216 | |*tbd min* 217 | |=== 218 | 219 | === Unit 7 220 | 221 | [cols="2", options="footer"] 222 | |=== 223 | |Java EE 7. Overview of the new features 224 | |30 min 225 | 226 | |Contexts and Dependency Injection for the Java EE Platform (CDI) 227 | |30 min 228 | 229 | |JAX-RS 2.0: Building restful Web Services 230 | |60 min 231 | 232 | |WebSocket: Pushing data to the server 233 | |60 min 234 | 235 | |*Total* 236 | |tbd 237 | |=== --------------------------------------------------------------------------------