Thursday Oct 03, 2013

Video: Spec Leads of Java Caching Standard, JSR-107

In this video, Brian Oliver (Oracle) and Greg Luck (Terracotta) share news on the progress of the long-awaited Java Caching Standard, to be finalized early in 2014, and discuss the decade-long JCP process behind this emerging Java specification. More information on the Java Caching Standard is available at JCP.org and https://github.com/jsr107.

Thanks to Architect Community Manager Bob Rhubart. You can view more OTN videos on the YouTube OracleTechNet Channel

Tuesday Oct 01, 2013

At the Java Demogrounds: What’s Happening with Java SE?

Over at the Java SE demo booth, Oracle’s Aurelio Garcia-Ribeyro, Senior Group Product Manager, briefly discussed JDK 7 and  JDK 8.

“People may not realize that we’ve recently added new functionality to JDK 7,” he said. “So with JDK 7 u40, we added Mission Control and Flight Recorder to the JDK, something we're very proud of. Flight recorder is a feature that works a little like the flight recorder on a plane; you leave it on and it doesn’t really impact your production. It simply runs, and if you encounter an issue, you can go back and discover what triggered it after the fact. It’s quite useful in debugging horrible problems that occur only in production that you cannot really catch when you’re developing because you need it to be going for 15 days with a slow memory leak, but you don’t want to have to reproduce that because it’s costly and you don’t know when it happens. With flight recorder you just leave it on, set a trigger, and when something goes bad, it helps you figure out what triggered that event.”

I asked him about Java SE 8, which is scheduled for release in March of 2014.

“If you want to play with it, go to https://jdk8.java.net/ and download the developer preview. We’d like you to first try your existing projects, which should work just fine. Then after that, you should start playing with the new features like lambda and JSR 310, the Date and Time API. Lambda is the biggest change to the developer programming model. We are very excited about this.”

Tuesday Sep 24, 2013

Session Report: JSR 341: Expression Language 3.0

Ed Burns, Consulting Member of Technical Staff, and Kinman Chung, Principle Member of Technical Staff, both at Oracle, presented a session on Monday in which they described new features in JSR 341, Expression Language (EL) 3.0. They discussed the APIs for the use of EL in standalone environments and EL syntax for new operators, plus lambda expressions, and support for collection objects, all the while offering copious code illustrations.

Burns remarked that he was pleased that Java Champion and JavaOne Rock Star Adam Bien had referred to EL 3.0 as “the hidden gem of Java EE”. “I don’t know how hidden it is,” said Burns, “but I think it’s a gem.”

He discussed the origins of EL, which has a long and active history in the Java platform. EL began in 2004 as part of the Java Standard Tag Library (JSTL 1.0), moved to JSP 2.0 in 2006, and became an independent specification with JSR 341 in 2011. It is used in JSF, CDI, and Avatar. Now, 9 years after its inception, it is an independent specification that is heavily used in JSF.   

Burns observed that the presence of EL is the key differentiator between Java server and non-java server stacks. “Java server-based web frameworks are likely to use EL,” said Burns. “When you show someone who is not familiar with EL how easy it is to move things together from disparate parts of your application, it’s very compelling.”

The most important feature that EL 3 brings is lambda expressions – developers do not have to wait until Java SE 8 is released. It all runs on Java EE 7, which requires Java SE 7 -- which means that it is currently available. Burns gave a brief discussion of lambda expressions, which basically behave like an anonymous function -- lambdas in EL are EL expressions. They offer full access to the EL environment within the body of the EL lambda expression, something not available from Java SE lambdas. “You won’t be able to refer to other EL things from a plain old SE lambda expression,” said Burns.

The goal of EL 3 is to provide greater expressive power for applications and to use it outside of Java EE. Burns and Chung provided an overview of collection operations and explained EL’s support for stand-alone environments. EL 3 is easy to use outside of Java EE and provides standard data structures: ELContext; ELResolvers; and local variable and function repositories.

They explained that it enables direct EL operations and has: EL expression evaluation; Bean definition; and Function definition. They emphasized that other key parts of Java EE can also be used standalone, such as: Bean Validation; Persistence (JPA); and Contexts and Dependency Injection (CDI). They encouraged developers to consider the possibilities for cloud deployment in: Defining functions and variables and defining beans.

They spent the rest of the session illustrating their key points with a healthy dose of code.

Links and Downloads:
* JSR 341: http://www.jcp.org/en/jsr/detail?id=341
    Download spec and API javadocs

* Project home: https://java.net/projects/el-spec/
   Report spec bugs or RFE for el.next

* RI: https://java.net/projects/uel/
   Maven artifacts available from Maven Central
   Download source and report RI bugs

* Integrated in Glassfish 4.0: https://glassfish.java.net/

You can listen to this session in early October on Parleys.com.

The Eleventh Annual Java Community Process Program Awards

by Timothy Beneke and Janice J. Heiss

In a festive room teeming with over 200 people, including many celebrated Java luminaries,
along with excellent food and drink, the 9th annual JCP Program Awards were handed out atop the majestic Hilton Hotel on Monday night. As the JCP states, “The Java Community Process (JCP) program celebrates success. Members of the community nominate worthy participants, Spec Leads, and Java Specification Requests (JSRs) in order to cheer on the hard work and creativity that produces ground-breaking results for the community and industry in the Java Standard Edition (SE), Java Enterprise Edition (EE), or Java Micro Edition (ME) platforms.”

The JCP added a new awards category this year for Adopt-a-JSR program participants, bringing the total to four: JCP Member/Participant of the Year, Outstanding Spec Lead, Most Significant JSR, and Outstanding Adopt-a-JSR Participant.

The room was full of good cheer, playful humor, a music band of Java developers, and enthusiastic appreciation of much that has been accomplished on behalf of Java technology in the previous year.

The nominees and winners in their respective categories were:

JCP Member/Participant of the Year

--Azul Systems, Gil Tene

--London Java Community (LJC), Ben Evans, Martijn Verburg, Richard Warburton, Graham Allan

--Mohamed Taman

The winner was Azul System’s Gil Tene. The JCP said, “Gil has worked diligently to provide clear advice on matters of Software Patents, IP and licensing that seeks to benefit both non-profits/individuals etc as well as organizations with vested commercial interests in Java. It's not easy delving into the depths of the legal aspects and the potential impacts of changes to the JCP, but with help from folks like Gil we're hopeful for a solid and fair outcome.”

Tene characterized his approach to the JCP as follows: “I represent Azul Systems on the JCP EC, but I try to apply an approach of ‘do the right thing first’ in my choices and positions. Coming from a small company that depends on Java and its ecosystem for its livelihood, I see my role as representing the interests of an entire sector of non-big-company commercial folks and of individual and professional developers out there, and providing some offset and balance to the normal mix of such boards.”

Outstanding Spec Lead

--Brian Goetz, Oracle

--Jitendra Kotamraju, Oracle

--Anatole Tresch, Credit Suisse

--Chris Vignola, IBM

The winner, Oracle’s Brian Goetz, was recognized, “For tirelessly working away at an incredibly complex JSR - JSR 335, Lambda Expressions for the Java Programming Language. From a community point of view, we've appreciated his willingness to listen and consider ideas from other technologists as well as spending time with groups of developers to understand the impact of Lambdas on Java.”

Goetz offered a statement in response to the award for his leadership in creating Lambda Expressions for the Java Language, which also won for most significant JSR. He said that lambdas, “represent a coordinated co-evolution of the Java SE platform, including the VM, language, and core libraries to provide developers with a powerful upgrade -- quite likely the largest ever -- to the Java SE programming model. We started this JSR in early 2010, but the topic of closures-in-Java had already been in play in the community for many years prior, and, of course, there was a broad diversity of opinions as to what direction, how far, and how fast to evolve the Java programming model. In the end, the most significant dimension of the challenge turned out to be: how do we integrate these new features in the language and libraries without them feeling grafted on after-the-fact. I think developers will find programming with this ‘new and improved Java’ to be a very pleasant experience -- I know I have.”

Most Significant JSR

--JSR 335, Lambda Expressions for the Java Programming Language

--JSR 344, JavaServer Faces (JSF) 2.2

--JSR 352, Batch Applications for the Java Platform

--JSR 354, Money and Currency API

--JSR 355, JCP Executive Committee Merge

The winner, as previously mentioned, was JSR 335, Lambda Expressions for the Java Programming Language, which the JCP praised as follows:

“This brings Java kicking and screaming into the modern programming language age and is seen as a catalyst for the second age of Java. It's underlying discoveries and improvements with regards to Type Inference has also resulted in a stronger JVM for all.”

Spec lead Brian Goetz, in picking up the award, remarked, “This is something we’ve been working on for three-and-a-half-years and it’s nice to be looking at it through the rear-view mirror.”

Outstanding Adopt-a-JSR Participant

--BeJUG, Johan Vos

--CeJUG, Helio Frota, Hildeberto Mendonça

--JUG Chennai, Rajmahendra (Raj) Hegde

--Morocco JUG and EGJUG, Mohamed Taman, Faissal Boutaounte

The winner was Morocco JUG and EGJUG, Mohamed Taman, and Faissal Boutaounte, who were praised, “For adopting JSR 339, JAX-RS 2.0 specification, along with many other JSRs. One JIRA issue filed by Morocco JUG on JSR 339 was classified as a ‘release-stopper’. A quick JIRA search using the ‘adoptajsr’ tag shows that most of the JIRA issues have been created by MoroccoJUG members. Several presentations and source code have been organized by these groups. Mohamed presented sessions about the upcoming technologies to widen the range of users in the future, especially Java EE 7 JSRs and spreading of community progress and contributions that make us encouraged to participate. Mohamed sent a clear message that Africa is here and is full of talented people who are willing to take it to the next level. Mohamed was responsible for translating an Arabic Adopt-s-JSR web page to allow more Arabs to participate.”

Taman said that, “Currently, I hold two positions, one as a Business Solutions Systems Architect and design supervisor and Java Team leader, at a big financial services company in Egypt, which affects all the country by building solutions affecting Egyptians every day, by providing more facilities for businesses and enhancing the economy… I am passionate about Java. I really love it and have fun coding, and love seeing it grow, day by day, as if it were my kid.”

The Annual Java Community Process Program Awards at  JavaOne is an event and party not to be missed!

The Java Community Process

Thursday Jun 27, 2013

An Overview of Batch Processing in Java EE 7

Up on otn/java is a new article by Oracle senior software engineer Mahesh Kannan, titled “An Overview of Batch Processing in Java EE 7.0,” which explains the new batch processing capabilities provided by JSR 352 in Java EE 7. Kannan explains that “Batch processing is used in many industries for tasks ranging from payroll processing; statement generation; end-of-day jobs such as interest calculation and ETL (extract, load, and transform) in a data warehouse; and many more. Typically, batch processing is bulk-oriented, non-interactive, and long running—and might be data- or computation-intensive. Batch jobs can be run on schedule or initiated on demand. Also, since batch jobs are typically long-running jobs, check-pointing and restarting are common features found in batch jobs.”

JSR 352 defines the programming model for batch applications plus a runtime to run and manage batch jobs. The article covers feature highlights, selected APIs, the structure of Job Scheduling Language, and explains some of the key functions of JSR 352 using a simple payroll processing application. The article also describes how developers can run batch applications using GlassFish Server Open Source Edition 4.0.

Kannan summarizes the article as follows:

“In this article, we saw how to write, package, and run simple batch applications that use chunk-style steps. We also saw how the checkpoint feature of the batch runtime allows for the easy restart of failed batch jobs. Yet, we have barely scratched the surface of JSR 352. With the full set of Java EE components and features at your disposal, including servlets, EJB beans, CDI beans, EJB automatic timers, and so on, feature-rich batch applications can be written fairly easily.”

Check out the article here.

Monday Apr 29, 2013

JSR 356, Java API for WebSocket

A new article, now up on otn/java, by Java Champion Johan Vos, titled “JSR 356, Java API for WebSocket,” shows developers how to integrate WebSockets into their applications. JSR 356, part of the Java EE 7 platform, specifies the API that Java developers can use when they want to integrate WebSockets into their applications on both on the Java server and client side. The API is highly flexible, and frees developers to write WebSocket-based applications independent of the underlying WebSocket implementation, thus preventing vendor lock in. It also allows for more choice in libraries and application servers. Web clients or native clients leveraging any WebSocket implementation can more easily communicate with a Java back end.

As part of the Java EE 7 standard, all Java EE 7-compliant application servers will have an implementation of the WebSocket protocol that adheres to JSR 356. Vos explains:

“Once they are established, WebSocket client and server peers are symmetrical. The difference between a client API and a server API is, therefore, minimal. JSR 356 defines a Java client API as well, which is a subset of the full API required in Java EE 7….

The Java API for WebSocket is very powerful, because it allows any Java object to be sent or received as a WebSocket message.

Basically, there are three different types of messages:

* Text-based messages
* Binary messages
* Pong messages, which are about the WebSocket connection itself

When using the interface-driven model, each session can register at most one MessageHandler for each of these three different types of messages.

When using the annotation-driven model, for each different type of message, one @onMessage annotated method is allowed. The allowed parameters for specifying the message content in the annotated methods are dependent on the type of the message.”

Check out the article here and learn how to integrate WebSockets into your applications.

Friday Feb 22, 2013

Arun Gupta on Higher Productivity from Embracing HTML5 with Java EE 7

Oracle’s Java evangelist and noted Java EE expert, Arun Gupta, presented a session at the annual IOUC (International Oracle User Community) Summit, held January 14–16, 2013, at Oracle headquarters in Redwood Shores, California, where more than 100 top user group leaders from around the world gathered to share best practices, provide feedback, and receive updates from leading Oracle developers.

Gupta’s talk, titled "The Java EE 7 Platform: Higher Productivity and Embracing HTML5," presented a glimpse into the rich possibilities that will be available in Java EE 7 upon its release in the spring of 2013. He covered several major developments, including:

* Java API for RESTful Web Services 2.0
* Java Message Service 2.0
* Java API for JSON Processing 1.0
* Java API for WebSocket 1.0
* Bean Validation 1.1
* Batch Applications for the Java Platform 1.0
* Java Persistence API 2.1
* Servlet 3.1
* Concurrency Utilities for Java EE 1.0
* JavaServer Faces 2.2

Gupta focuses on ways in which Java EE 7 offers higher productivity; less boilerplate; richer functionality; more default options; and HTML5 support in the form of WebSocket and JSON. He also observed that the cloud is in need of more standards. From the article:

"There are not enough standards in the cloud with W3C and other standards bodies. More standards are needed so that we can define a Java API for the cloud. Premature standardization can also be a problem if not enough innovation has taken place. So what is the right thing for the platform? We have reached out to the community, the core group members, and the executive committee of the Java Community Process and have focused on providing higher productivity and on embracing the HTML5 platform more closely. We are going to use dependency injection a lot more, which will give developers the ability to write less boilerplate code and offer richer functionality such as batch applications and caching. Similarly, for HTML5, we are embracing WebSocket functionality and the ability to parse and generate a JSON structure. We are providing support for HTML5-friendly markup as part of JSF.”

Gupta summarized the strengths of the various JSRs and closed by encouraging developers to participate in Adopt-a-JSR, a project that enables them to, “pursue their interest in particular Java EE 7 JSRs and download code, play with it, report bugs, and offer feedback to Java EE 7 specification leads.”

Check out the article here.

Friday Feb 01, 2013

The JCP Evolution!

Recent changes to the Java Community Process (JCP) program "focus on the way the organization itself is structured and organized" explained Patrick in this interview.  The changes will result from the implementation of three Java Specification Requests (JSRs). The first JSR, the JSR 348, makes the process more open and transparent to facilitate developers' participation. It was released a year ago and Heather witnessed increased transparency in projects,  additional participation and a simplified release process. "They are using public issue trackers and public discussion alias on projects. More people from the community are commenting and participating in the JSRs. The process of releasing final and maintenance releases is more agile," she commented.

She explained the different options for developers' participation in the JCP. Java user groups may become JCP members at no charge and contribute as a group. Individuals and user groups can contribute to the community initiative Adopt-A-JSR. Developers can give feedback on the transparency of a JSR process. Individuals, corporations and non-profit organizations (JUGs for example) can join the JCP. They then can comment on specs, join an expert group and become a spec lead





Information about the JCP program is available at jcp.org. Watch the recent presentation about Adopt-a-JSR with Martin Verburg and Java EE 7 JSR projects with Arun Gupta

Friday Oct 19, 2012

An Interview with JavaOne Rock Star Martijn Verburg

An interview with JavaOne Rock Star Martijn Verburg, by yours truly, titled “Challenging the Diabolical Developer: A Conversation with JavaOne Rock Star Martijn Verburg,” is now up on otn/java. Verburg, one of the leading movers and shakers in the Java community, is well known for his ‘diabolical developer” talks at JavaOne where he uncovers some of the worst practices that Java developers are prone to.

He mentions a few in the interview:

* “A lack of communication: Software development is far more a social activity than a technical one; most projects fail because of communication issues and social dynamics, not because of a bad technical decision. Sadly, many developers never learn this lesson.
* No source control: Some developers simply store code in local file systems and e-mail the code in order to integrate their changes; yes, this still happens.
* Design-driven design: Some developers are inclined to cram every design pattern from the Gang of Four (GoF) book into their projects. Of course, by that stage, they've actually forgotten why they're building the software in the first place.”

He points to a couple of core assumptions and confusions that lead to trouble:

“One is that developers think that the JVM is a magic box that will clean up their memory and make their code run fast, as well as make them cups of coffee. The JVM does help in a lot of cases, but bad code can and will still lead to terrible results!

The other trend is to try to force Java (the language) to do something it's not very good at, such as rapid Web development. So you get a proliferation of overly complex frameworks, libraries, and techniques trying to get around the fact that Java is a monolithic, statically typed, compiled, OO environment. It's not a Golden Hammer!”

Verburg has many insightful things to say about how to keep a Java User Group (JUG) going, about the “Adopt a JSR” program, bugathons, and much more.

Check out the article here.

Sunday Sep 30, 2012

The Java Specialist: An Interview with Java Champion Heinz Kabutz

Dr. Heinz Kabutz is well known for his Java Specialists’ Newsletter, initiated in November 2000, where he displays his acute grasp of the intricacies of the Java platform for an estimated 70,000 readers; for his work as a consultant; and for his workshops and trainings at his home on the Island of Crete where he has lived since 2006 -- where he is known to curl up on the beach with his laptop to hack away, in between dips in the Mediterranean.

Kabutz was born of German parents and raised in Cape Town, South Africa, where he developed a love of programming in junior high school through his explorations on a ZX Spectrum computer. He received a B.S. from the University of Cape Town, and at 25, a Ph.D., both in computer science.

He will be leading a two-hour hands-on lab session, HOL6500 – “Finding and Solving Java Deadlocks,” at this year’s JavaOne that will explore what causes deadlocks and how to solve them.

Q: Tell us about your JavaOne plans.

A: I am arriving on Sunday evening and have just one hands-on-lab to do on Monday morning. This is the first time that a non-Oracle team is doing a HOL at JavaOne under Oracle's stewardship and we are all a bit nervous about how it will turn out. Oracle has been immensely helpful in getting us set up. I have a great team helping me: Kirk Pepperdine, Dario Laverde, Benjamin Evans and Martijn Verburg from jClarity, Nathan Reynolds from Oracle, Henri Tremblay of OCTO Technology and Jeff Genender of Savoir Technologies.

Monday will be hard work, but after that, I will hopefully get to network with fellow Java experts, attend interesting sessions and just enjoy San Francisco. Oh, and my kids have already given me a shopping list of things to get, like a GoPro Hero 2 dive housing for shooting those nice videos of Crete. (That's me at the beginning diving down.)

Q: What sessions are you attending that we should know about?

A: Sometimes the most unusual sessions are the best. I avoid the "big names". They often are spread too thin with all their sessions, which makes it difficult for them to deliver what I would consider deep content. I also avoid entertainers who might be good at presenting but who do not say that much.

In 2010, I attended a session by Vladimir Yaroslavskiy where he talked about sorting. Although he struggled to speak English, what he had to say was spectacular. There was hardly anybody in the room, having not heard of Vladimir before. To me that was the highlight of 2010. Funnily enough, he was supposed to speak with Joshua Bloch, but if you remember, Google cancelled. If Bloch has been there, the room would have been packed to capacity.

Q: Give us an update on the Java Specialists’ Newsletter.

A: The Java Specialists' Newsletter continues being read by an elite audience around the world. The apostrophe in the name is significant.  It is a newsletter for Java specialists. When I started it twelve years ago, I was trying to find non-obvious things in Java to write about. Things that would be interesting to an advanced audience.

As an April Fool's joke, I told my readers in Issue 44 that subscribing would remain free, but that they would have to pay US$5 to US$7 depending on their geographical location. I received quite a few angry emails from that one. I would have not earned that much from unsubscriptions. Most readers stay for a very long time.

After Oracle bought Sun, the Java community held its breath for about two years whilst Oracle was figuring out what to do with Java. For a while, we were quite concerned that there was not much progress shown by Oracle. My newsletter still continued, but it was quite difficult finding new things to write about. We have probably about 70,000 readers, which is quite a small number for a Java publication. However, our readers are the top in the Java industry. So I don't mind having "only" 70000 readers, as long as they are the top 0.7%.

Java concurrency is a very important topic that programmers think they should know about, but often neglect to fully understand. I continued writing about that and made some interesting discoveries. For example, in Issue 165, I showed how we can get thread starvation with the ReadWriteLock. This was a bug in Java 5, which was corrected in Java 6, but perhaps a bit too much. Whereas we could get starvation of writers in Java 5, in Java 6 we could now get starvation of readers. All of these interesting findings make their way into my courseware to help companies avoid these pitfalls.

Another interesting discovery was how polymorphism works in the Server HotSpot compiler in Issue 157 and Issue 158. HotSpot can inline methods from interfaces that have only one implementation class in the JVM. When a new subclass is instantiated and called for the first time, the JVM will undo the previous optimization and re-optimize differently.

Here is a little memory puzzle for your readers:

public class JavaMemoryPuzzle {
  private final int dataSize =
      (int) (Runtime.getRuntime().maxMemory() * 0.6);

  public void f() {
    {
      byte[] data = new byte[dataSize];
    }
    byte[] data2 = new byte[dataSize];
  }

  public static void main(String[] args) {
    JavaMemoryPuzzle jmp = new JavaMemoryPuzzle();
    jmp.f();
  }
}


When you run this you will always get an OutOfMemoryError, even though the local variable data is no longer visible outside of the code block.

So here comes the puzzle, that I'd like you to ponder a bit. If you very politely ask the VM to release memory, then you don't get an OutOfMemoryError:

public class JavaMemoryPuzzlePolite {
  private final int dataSize =
      (int) (Runtime.getRuntime().maxMemory() * 0.6);

  public void f() {
    {
      byte[] data = new byte[dataSize];
    }

    for(int i=0; i<10; i++) {
      System.out.println("Please be so kind and release memory");
    }
    byte[] data2 = new byte[dataSize];
  }

  public static void main(String[] args) {
    JavaMemoryPuzzlePolite jmp = new JavaMemoryPuzzlePolite();
    jmp.f();
    System.out.println("No OutOfMemoryError");
  }
}


Why does this work? When I published this in my newsletter, I received over 400 emails from excited readers around the world, most of whom sent me the wrong explanation. After the 300th wrong answer, my replies became unfortunately a bit curt. Have a look at Issue 174 for a detailed explanation, but before you do, put on your thinking caps and try to figure it out yourself.

Q: What do you think Java developers should know that they currently do not know?

A: They should definitely get to know more about concurrency. It is a tough subject that most programmers try to avoid. Unfortunately we do come in contact with it. And when we do, we need to know how to protect ourselves and how to solve tricky system errors.

Knowing your IDE is also useful. Most IDEs have a ton of shortcuts, which can make you a lot more productive in moving code around. Another thing that is useful is being able to read GC logs. Kirk Pepperdine has a great talk at JavaOne that I can recommend if you want to learn more. It's this: CON5405 – “Are Your Garbage Collection Logs Speaking to You?”

Q: What are you looking forward to in Java 8?

A: I'm quite excited about lambdas, though I must confess that I have not studied them in detail yet. Maurice Naftalin's Lambda FAQ is quite a good start to document what you can do with them. I'm looking forward to finding all the interesting bugs that we will now get due to lambdas obscuring what is really going on underneath, just like we had with generics.

I am quite impressed with what the team at Oracle did with OpenJDK's performance. A lot of the benchmarks now run faster.

Hopefully Java 8 will come with JSR 310, the Date and Time API. It still boggles my mind that such an important API has been left out in the cold for so long.

What I am not looking forward to is losing perm space. Even though some systems run out of perm space, at least the problem is contained and they usually manage to work around it. In most cases, this is due to a memory leak in that region of memory. Once they bundle perm space with the old generation, I predict that memory leaks in perm space will be harder to find. More contracts for us, but also more pain for our customers.

Originally published on blogs.oracle.com/javaone.

About

Insider News from the Java Team at Oracle!

duke
javeone logo
Links


Search

Archives
« April 2014
SunMonTueWedThuFriSat
  
2
5
6
7
12
13
17
18
19
20
22
24
25
26
27
28
29
30
   
       
Today