Although this is pretty elementary stuff - allow me to cut to the chase (and skip reinventing the wheel) by presenting an excellent summary of the description of Java from www.paololatella.it:
Java technology is both a programming language and a platform. The Java programming language is a high-level object-oriented language that has a particular syntax and style. A Java platform is a particular environment in which Java programming language applications run. There are four platforms of the Java programming language:
- Java Platform, Standard Edition (Java SE)
- Java Platform, Enterprise Edition (Java EE)
- Java Platform, Micro Edition (Java ME)
- Java FX
All Java platforms consist of a Java Virtual Machine (VM) and an application programming interface (API). The Java Virtual Machine is a program, for a particular hardware and software platform, that runs Java technology applications. An API is a collection of software components that you can use to create other software components or applications. Each Java platform provides a virtual machine and an API, and this allows applications written for that platform to run on any compatible system with all the advantages of the Java programming language: platform-independence, power, stability, ease-of-development, and security.
When most people think of the Java programming language, they think of the Java SE API. Java SE's API provides the core functionality of the Java programming language. It defines everything from the basic types and objects of the Java programming language to high-level classes that are used for networking, security, database access, graphical user interface (GUI) development, and XML parsing. In addition to the core API, the Java SE platform consists of a virtual machine, development tools, deployment technologies, and other class libraries and toolkits commonly used in Java technology applications.
JDK vs JRE
The JRE is 'usually' what you get when you download Java software (without making particular selections). The JRE consists of the Java Virtual Machine (JVM), Java platform core classes, and supporting Java platform libraries. The JVM, an implementation of the platform on a particular hardware and software (Operating System - Win, Linux etc...) is created at run time and serves as the 'container' in which a Talend job (or any Java application) runs or is executed within. The JDK is an extension of the JRE and contain the JVM and the kit for developing new applications, in particular the compiler (javac) and other pieces.
The following is a visual description of the pieces that make up the language & platform:
With all that, what do you need to run Talend Studio?
If you're developing jobs that do not involve web service calls, the JRE works fine:
If you happen to run a job with a Studio that's configured to use the JRE and is invoking web service calls, you will get an error like
Exception in component tWebService_1
java.lang.NullPointerException
at org.apache.cxf.common.util.Compiler.useJava6Compiler(Compiler.java:190)
at org.apache.cxf.common.util.Compiler.compileFiles(Compiler.java:144)
at org.apache.cxf.common.util.Compiler.compileFiles(Compiler.java:139)
at org.apache.cxf.endpoint.dynamic.DynamicClientFactory.compileJavaSrc(DynamicClientFactory.java:610)
at org.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:369)
at org.talend.webservice.helper.ServiceInvokerHelper.createClient(ServiceInvokerHelper.java:144)
at org.talend.webservice.helper.ServiceInvokerHelper.getClient(ServiceInvokerHelper.java:135)
at org.talend.webservice.helper.ServiceInvokerHelper.invoke(ServiceInvokerHelper.java:236)
Switching to the JDK resolves that - because it includes additional classes that are necessary to invoke and create web service calls.