I attended Java One 2014 in San Francisco from September 28 - October 2. This conference is huge and is just a portion of the massive Oracle OpenWorld.
I did not attend any sessions on the first day due to some travel issues, but I still made the most of the four remaining days. These are the sessions I attended, a summary of the content, my impressions, slide decks, video and any other information I could find.
In researching this post I assumed I would be able to find video or recorded screencasts of almost every session. There were cameras in most rooms and lots of technicians who were obviously recording, but I can't find a thing. If you know where this content is hiding please drop me a line.
Edited October 31st: I received an email from Oracle with video and sound synced slide decks for a number of sessions. I will add video details as they become available.
Journey’s End: Collection and Reduction in the Stream API
Maurice Naftalin
video
This session's focus on collection and reduction greatly clarified the stream API for me. I had previously only read a few articles about the subject and live code examples were helpful.
Stream
- Born as spliterator
- Transformed
- Collected
Stream can be written for sequential execution and be parallel ready if it becomes necessary
Terminal operation
- search (match, find)
- side effecting -> *care must be taken to insure still parallel ready
- reduction - great for primitives & immutables, can be used w/ collections but its ugly
Reduction over an identity can remove need for Optional but does not work over collections
Collectors (hard way) - not necessary very often
- Supplier
- Accumulator
- Combiner
- Finisher
In most cases just use supplied collectors, tons of static factory methods in Collectors class
.collect(Collectors.*())
Collecting to Classification Maps
- groupingBy
- partitioningBy
Nashorn: Javascript for JVM
Jim Laskey
slide deck
video
Firstly, it is pronounced Nass - horn. The ease of including Javascript in Java and vice versa provided by Nashorn could make some bothersome boilerplate a thing of the past. An interactive javascript command line REPL included along with your JDK (or JRE) is also a useful feature.
import javax.script.*
ScriptEngineFactory…
Command line
jjs -scripting <- interactive
jjs -scripting blah.js <- run script
Can also use #! to run script
NetBeans integration: Breakpoints, debug, etc.
Clojure in the Cloud
Everett Toews
slide deck
This session was very much a tutorial and spent a lot of time explaining underlying technologies and how to use them with Clojure. In many ways, I considered it too basic.
lein try -> test a new dependency/project
(pprint *) pretty-print
lein repl :connect host:port <- connect to running lein instance for debug, etc
clj-http
Hosebird (hbc)
Apache jclouds
Clojure SDK (twitter-api, tentacles)
Thinking in Functional Style
Venkat Subramaniam
topics and code
video
Venkat presented the best sessions I attended at JavaOne. He has a witty, likable style, is well prepared, his examples are relevant, and he isn't afraid to type code live.
“mutable sharing is the devil’s work”
Assignment-less programming
Immutable state
Functions
- first class
- no side effects (pure)
memoization
www.agiledeveloper.com -> code, examples, etc
check out prime number example
Building Secure Applications w/ Java EE
Patrycja Wegrzynowicz
slide deck
Security is boring, it is especially hard early in the morning when your caffeine has not kicked in. This session was yet another example of this, but I came away with some new usable tools and some pointers I have already put to use.
OWASP
Zed Attack Proxy (ZAP)
Enterprise Security API (ESAPI)
WebGoat
Session Management: associate session w/IP, UserAgent, etc. if anything changes invalidate
Declarative authorization
- web.xml
- @RolesAllowed, @…
Consider moving from JSP to JSF 2.x+
Clojure, Made Simple
Rich Hickey
It came across in his presentation that Rich is passionate about software development. His description of burning out due to some repetitive tasks forced on you by OOP was all too familiar. I was especially interested in this session because I started learning Clojure on the plane on the way to JavaOne. Hearing why Clojure is the way it is from the creator's mouth was a great way to begin my education.
Datomic
Om - browser MVC
Clojure
- data orientation
- simplicity (in sense of opposite of complexity)
Data is raw, immutable information
Code is data
Majority of functions take/return data
symbols reference something else
keywords reference themselves
EDN - extensible data notation
Data structures are the code
Syntax is in the interpretation of data structures
Hiccup DSL -> Data as HTML
core.async -> simple channel model
emphasize flow over places
Polymorphism
- Clojure protocols
- polymorphism on first argument
Counterclockwise for Eclipse
Accelerated Java EE Open Source Development w/ Eclipse
Greg Stachnick
slide deck
video
I use Eclipse daily and I was introduced to multiple useful plugins and even found out a few useful details about plugins I already use.
Dali Java Persistence Tools
- create a data model
- configuration
- JPQL querying
Eclipse Link - JPA & multiple to/from conversions
Java Server Faces
- lib management
- config (not necessary in JEE 6/7)
- navigation
- page components drag & drop
Allows Java <-> WSDL can start w/either
JAX-RS for RESTful
BDD in Action
John Smart
slide deck
I was introduced to BDD when I worked at Dollar Tree and I find it is an excellent way to get individuals at different levels on the same page. I have read a couple chapters of BDD in Action and will finish the book after this presentation.
BDD
- collaboration
- hunting out value
- building the right software
- automated acceptance criteria
- API and code design
- building the software right
- living documentation
3 Amigos session: business analyst, developer, tester
- Develop features from requirement descriptions
- Create automated acceptance criteria with BDD scenario
Convert scenarios to code in tests
Collaboration before automation
JBehave, Cucumber, Thucydides(creates nice web output reports)
Use layers
- Business rules
- Business flow
- Page/Component interactions
- Page/Component details
JUnit, Spock, Lambda-Behave(Java 8)
50 JMS 2.0 Best Practices in 50 minutes
Nigel Deakin
slide deck
video
My only note from this session was "Get the slide deck". It is useful and you will learn something that you can use in your Java code.
Writing Highly Concurrent Polyglot Applications with Vert.x
Tim Fox
I have used Vert.x a bit in previous projects, but it was with older versions. I am impressed by the growth of the project and gained insight into the project's design decisions while watching Tim's presentation.
features described are from 3.0 -> Java 8 only
Event Bus
- heart of the system
- verticals talk over bus
- point-to-point, pub/sub, request/response
Distributed Date
- across cluster
- map
Vertical
- execution unit of Vert.x
- written in any supported language
- single threaded *one edge case
- communicate via messages
Command Line: vertx run * <— run any vertical
Clustered Event Bus
- can be cross JVM
- microservices
- apps loosely coupled can be distributed across network
Event bus can be extended to client side in Javascript
On command line add “-cluster” when running across verticals
maven shade —> generate fat jars
Can create fat jars & just deploy on command line
High Availability
- automatic failover
- network partition detection (quorum)
RxJava
- mitigate call back hell
- use codeine to generate Rx-ified version of Vert.x APIs
3.0: distributed, asynchronous map, lock, counter
A lot of core objects now create Metrics - expand on JMX, can also be on Event bus
Creating stack of recommended modules that will be announced soon
Reactive Programming for Java Devs
Venkat Subramaniam - www.agiledeveloper.com
topics and code
video
I was not going to attend this session until I went to another presentation by Venkat. I was not disappointed and learned enough about Reactive programming to gain a new appreciation for why it is the new hotness.
RxJava
Reactive App
- event driven
- scalable
- resilient
- responsive
Compositional & lazy evaluation
Reactive
- Observable++, observer patter but better
- dataflow
- push instead of pull iteration
- signal end
- respectfully deal w/errors (1st class)
- synchronous, asynchronous, lazy
Handling failure
- options
- onErrorResumeNext
skip and take to filter inputs
Asynchronous clients
- subscribeOn
- Schedulers (Schedulers.io <— will elegantly handle I/O wait)
- Executors.new FixedThreadPool
- Schedulers.from( ^ )
Slow clients
- feed.subscribe…
- subscriber.setProducer(request -> {})
- request
Java Apps w/Docker on Raspberry Pi
Johan Janssen
slide deck
video
I didn't learn much new here, but it was an example of an interesting combination of three technologies that I have never tried before.
Map, Flatmap & Reduce are Your New Best Friends (same, but from oscon)
Chris Richardson
slide deck (from OSCON)
By this point in the conference I was feeling fairly comfortable with streams. Chris mixed in some examples from other JVM languages (Scala in particular) that kept the topic fresh and made a good final session of the conference.