OpenJDK 11 on Fedora

Interesting in running the current version of Java (and its compiler) on your Fedora instance? It’s easy:

sudo dnf install java-11-openjdk-devel
sudo alternatives --config java # select Java 11
sudo alternatives --config javac # if necessary, select java 11

Note that this is still labeled as the “early access” version as of this writing – but the early access version is virtually identical to the released version.

Interesting Links podcast, episode 1

This is the first ##java channel podcast. I decided to do a podcast for a few reasons: probably the most important is that I thought it would save time for me; another reason is that I thought it would be nice to have more of a multimedia approach to propagating information from the channel.

I don’t know what kind of schedule the podcast will take. I wanted it to be weekly; some of the interesting stuff for this podcast is a little older than a week, but that’s largely because I’ve been stuck trying to get my ducks in a row to record the podcast. We’ll see how the schedule plays out.
If there’s any advice or criticism you have, you can always put it on the IRC channel, of course, but if you want to make sure I see it, send it to me via private message, memoserv, or – probably best – email, at [email protected].

The interesting stuff

Before we get too far in, it’s worth pointing out that this is all material referenced and sourced elsewhere. As such, we try to vet it for accuracy, but there’s no way to prevent the authors’ opinions from being a factor. It’s perfectly okay if you disagree with this podcast or the links offered in the podcast – after all, the channel even has a few vim and blueJ users, so clearly not everyone on the channel is all that bright, right?
Also, the podcast is associated with a blog post on the channel blog, at http://javachannel.org/. All links to the source material can be found in the blog post that goes with each podcast edition. This is the first podcast, so look for podcast-1 in the search bar.
So off to the news!

  1. Atom gets IDE functionality. Atom is a text editor; IDE features means that it gets a little easier to do quick fixes in Atom if that’s your bag. Invoke your build tool, see errors inline, get autocompletion, and other such features, too. Atom’s open source.
  2. Sublime Text 3 has been released. Sublime Text is not open source, but it’s an excellent tool nonetheless; this release has been cooking for quite some time.
  3. OpenJ9 is available as part of OpenJDK 9. OpenJ9 is a JVM implementation; it’s a peer of the Oracle release. It comes from IBM, via Eclipse; it will behave differently than the “standard JVM,” although I don’t have any experience with it so I’m not sure what that looks like in practice.
  4. Speaking of J9, how did it get its name? Well, Ronald Servant has explained: it comes from the migration of a Smalltalk interpreter such that it handles Java.
  5. Glassfish 5.0 has been released! And … while that’s kind of important and relevant for Java EE users, it’s even more important to note that Java EE 8 is final. Glassfish is the reference implementation of Java EE 8; the new features include the Servlet 4.0 API, better JSON support, a new portable Security API, and Java 8 capabilities, just in time for Java 9.
  6. Speaking of Java 9… it’s finally out. It’s been a long road, but it’s done, for better or for worse. Java 9, with a lot of enhancements, is out – and the biggest enhancement, the biggest disruptor, is Jigsaw, the module system for Java 9. Early adopters have already been talking about migration efforts. This sounds fun, I think, but it’ll be worth it in the long run. Now we get to hope that the lessons we’ve learned in watching Java 9’s release and development cycle haven’t burned so many bridges that people stop being invested.
  7. Lastly, there’s a reference to some realtime resources for Java. There’s even a reference to a DSP library (digital signal processing, typically for sound) in TarsosDSP. Yes, you can use Java for audio processing; BBE’s Sonic Sweetener, for example, was written with Java back in the day and still might be. Sonic Sweetener was an exciter, which is one of the core effects that gave Joe Satriani his distinctive guitar sound on “Surfing with the Alien,” although he didn’t use this exact product (he used a hardware-based effect instead.)

Submitting More Information

The preferred way to get information into this podcast is to, well, submit it. The best way to submit it is through the channel bot.
The syntax is really easy. Join the channel, hit the tilde – the squiggly line that’s the standard trigger for the bot – and type the word “submit.” Then include your link; it has to be an actual URL, because I’m not posting unsubstantiated data, and it’s ideal if you include some commentary about what’s interesting about the link. That’s about it, really.
Okay, that’s it! Thanks for listening, and keep coding, folks.

Interesting Links, 14 April 2016

  • Natty is a natural language date parser written in Java. The idea is that you feed it corpora like "1984/04/02", "february twenty-eighth", or "3 days from now", and get back a list of potential matching Date objects. It is not designed to pull dates out of natural language – for that you’d want something like OpenNLP – but it might be able to help convert the natural language dates you get from OpenNLP into Java’s Date representations.
  • Scriptus is a Maven plugin that writes the Git version into build properties. It’s not entirely well-documented, but that’s what open source might be able to fix, right?
  • In When Interviews Fail, Ted Neward deconstructs a DZone article (“Can You Call Non-Static Method From a Static?“). It’s not difficult to imagine the activity – after all, this site does it to authors all the time! – but Ted’s especially good at it. In this case, he’s actually trying to dig at the purpose of an interview in the first place – and closes with “what do you really interview for?”, because if you’re interviewing for some grunt who can answer the corner cases, that’s… all you’re going to get.
  • The jOOQ blog asks: “Would We Still Criticise Checked Exceptions, If Java had a Better try-catch Syntax?” History says that yes, people would criticize Java for pretty much anything they can think of, and a few things they can’t. But in this case, it’s talking about potential syntax where the try is optional. It’s not present in a real compiler, and it does have some syntactic clarity to it – but in this author’s opinion, it’s actually hiding some pretty important information (namely, that you’re entering a try/catch block, which is pretty relevant information.)
  • From DZone: Properly Shutting Down An ExecutorService shows us a Spring bean to manage an ExecutorService shutdown. This, in itself, is a good thing. However, the interesting thing is that he wrote this because Tomcat was failing to kill the ExecutorService itself – he’s basically illustrated why doing thread management in a web application is a bad idea. Let the container manage the threads, people. (This has always been in the specification – the apps are not supposed to start threads. Ever. Use message-driven beans, or timers, or a ManagedExecutorService.)

BTW, feel free to send me Java-related (or somewhat Java-related!) links you think are worth retaining!

Interesting Links, 28 Mar 2016

  • The Apache Foundation has announced the release of PDFBox 2.0. Apache PDFBox allows for the “creation of new PDF documents, manipulation, rendering, signing of existing documents and the ability to extract content from documents.”
  • TechEmpower‘s Web Framework Benchmarks features Rapidoid as the fastest web framework – and Rapidoid is written in Java. It’s worth noting that the benchmark, being a benchmark, isn’t exactly “real world” – and Rapidoid doesn’t win every category – but it’s still pretty impressive to see Java, with it’s (ancient and outmoded) reputation for lack of speed, featuring so highly here.
  • AngularBeans: A Fresh New Take on AngularJS and JavaEE discusses the use of the AngularBeans project to expose functionality from CDI beans.
  • Docker Commands and Best Practices Cheat Sheet, from our friends at ZeroTurnaround, is pretty useful.
  • Functional Programming: Concepts, Idioms and Philosophy is an attempt to sum up functional programming for people who might not be familiar with the idiom. Not bad, but if you want to really dig in deep, you might check Manning‘s Functional Programming in Scala, which does a fine job exposing you not only to the idea, but its strengths and weaknesses.
  • Chronicle Map is, according to the project site, an in-memory key-value store designed for low-latency and/or multi-process applications. Notably trading, financial market applications. Looks interesting – there are plenty of distributed key/value stores around, it might be interesting to see how this one compares to things like Apache Ignite, GigaSpaces’ community edition, Oracle Coherence, Terracotta DSO, and other such candidates.
  • Markov Chains explains, well, markov chains. Basically, markov chains are a state transition method that predicts the “next state” using probabilities – you can build conversations using markov chains to predict likely responses. (For example, “vote Trump for President” has likely responses of “Gosh, why” or “heck yeah, let’s build us a wall!”) The reference link is actually a really nice explanation.

ZeroTurnaround's Developer Productivity Report

ZeroTurnaround has issued their latest developer productivity survey – if enough people take it, they’re giving money to Devoxx4Kids.
It’s an interesting survey, done very well – probably the best execution of such a survey as I’ve ever seen (and I’ve seen a lot). Check it out, let’s get Devoxx4Kids that donation (and/or join ourselves).

Interesting Links, 1 Feb 2016

Editor’s note before we get to the links: I’ve been trying to keep the links’ length down to a manageable four or five, so the frequency’s been higher than I might otherwise have desired (roughly every two or three days). I’m going to try a longer list of interesting links, and move the frequency down – we’ll see if that’s useful and palatable. The problem is that ##java (and the Java community overall) just has a lot of interesting, relevant content that’s worth keeping! (Keep it up, guys. “Too much interesting stuff” is a good problem to have.)

  • WildFly 10 has been released. This is the latest version of the open source (community-supported) JBoss Application Server; it’s fully Java EE 7, and requires Java 8. Very cool stuff, congratulations to the WildFly team.
  • Neo4J has released milestone 1 of their object/graph mapping library’s second version. (Read it with me: “Neo4J has released OGM 2.0 m1.” Much simpler that way.) It sounds promising, especially since they seem to have straightened out the connection process to Neo4J instances such that both embedded and remote instances have similar capabilities.
  • Implied Readability” uses readability as a term to address transitive dependencies in Java 9, more or less, and shows how a module can export visibility of a dependency to other modules. As stated: Java 9, not Java 8, so it’s a new feature – but it looks a little like how OSGi exports visibility rules. It might be really relevant as time goes on and Java 9 gets closer. (It’s based off of information in “Programming with Modularity and Project Jigsaw. A Tutorial Using the Latest Early Access Build” published on InfoQ, so there may be more interesting stuff in that article.)
  • How we accidentally doubled our JDBC traffic with Hibernate” discusses an obvious issue (doubling JDBC traffic!), found when Hibernate logging was set to WARN – because Hibernate then re-executes every query in order to show the warnings associated with the query in question. The warnings can be useful, to be sure, but be wary!
  • PNG encoding from Java’s ImageIO can be slow, according to one ##java op. He said that he used ObjectPlanet‘s PngEncoder and got much better performance.
  • As an update to the process by which one can examine request headers (mentioned in “Interesting Links, 22 Jan 2016“) a ##java user mentioned RequestBin, which allows you to build a URL and issue requests against it, to examine the actual traffic data.
  • Moving to a Plugin-Free Web – by Oracle – says it point blank: “Oracle plans to deprecate the Java browser plugin in JDK 9. This technology will be removed from the Oracle JDK and JRE in a future Java SE release.” This makes sense – browsers are ignoring the java plugin (and should). If you’re still doing applets, stop. Oracle has spoken, and the technology is going away. (Now if we could get Oracle to get rid of Vector somehow…)
  • ZeroTurnaround – who gave the world JRebel – posted Java 8 Streams cheat sheet, which offers a one-page example of a lot of useful, relevant information around streams for handy, quick reference. I looked for a DZone Refcard on streams for a point of comparison, but they didn’t have one that I saw on first scan – which is surprising, since the Refcardz are actually done really well, in general.

Interesting Links, 27 Jan 2016

  • Mutation Testing: Watching the Watchmen talks about the need for mutation testing, in addition to addressing the desire for unit testing. His point is: unit testing is good – do it. But it’s often not enough, and he promises to go more into mutation testing as an enhancement in future posts.
  • JOOQ has published If Java Were Designed Today: The Synchronizable Interface, discussing what could have been designed as opposed to what we got with the synchronized keyword – a Synchronizable interface, that could have been used for specific situations a lot like we use Iterable in more recent Java coding.
  • The Double Colon Operator in Java 8 discusses, of all things, the double colon operator in Java 8 (surprise!), which is a shorthand way to refer to a method reference. You find this used very often when working with streams, because the shorthand is so useful.
  • RedPen 1.4 has been released (back in October 2015, but I didn’t know about the project until it showed up on homebrew.) RedPen is a proofreading tool for technical documents, NOT for programming, and as such won’t be very useful for most readers of JavaChannel.org, but it’s still pretty interesting. For some reason, it complained a lot about the content of this post…

Eclipse Neon will require Java 8

Excellent news from the Eclipse Foundation: the next version of Eclipse, called “Neon,” will require the Java 8 runtime. The announcement in email is underwhelming, but the actual project plan is a little more explicit and informative:

In general, the 4.6 release of the Eclipse Project is developed on Java SE 8 VMs. As such, the Eclipse SDK as a whole is targeted at all modern, desktop Java VMs. Most functionality is available for Java SE 8 level development everywhere, and extended development capabilities are made available on the VMs that support them.

Frank Vogella, in Eclipse Neon (Eclipse 4.6) will require a Java 8 runtime, says this:

Several Eclipse projects like m2e and Jetty have already moved to Java 8. This moves allows us in the Eclipse platform to use the improved Java 8 API to modernize and optimize our code base and will hopefully make the Eclipse project even more interesting for potential Eclipse contributors.
After all, who wants to work in his unpaid time with an outdated Java version?

From Apache: Log4J 1 end-of-lifed; update to Log4J 2 recommended

On 5 Aug 2015, the Apache Foundation announced that Log4J 1, the popular logging framework, has been end-of-lifed, meaning that no future releases are expected and maintenance and support have been discontinued.
Migration to Log4J 2 is enabled through the use of a Log4J 1.X bridge, as described in a short FAQ about the EOL of Log4J 1:

Q: Is there a way to quickly migrate from Log4j 1.x to Log4j 2.x?
A: Yes, you can use the Log4j 1.x bridge http://logging.apache.org/log4j/2.x/log4j-1.2-api/index.html You must use this bridge without Log4j 1 jars in your application’s classpath. The bridge forwards all requests to Log4j 1 to Log4j 2.

Which logging framework do you prefer, and why?