Under hösten 2006 planeras en ny release av Java SE att släppas, Java SE 6. Version 6 är namnet på produkt versionen medans 1.6.0 är beteckningen på utvecklarversion. Nedan ges en beskrivning av några av nyheterna som den nya versionen innehåller. Under hösten 2006 planeras en ny release av Java SE att släppas, Java SE 6. Version 6 är namnet på produkt versionen medans 1.6.0 är beteckningen på utvecklarversion. Nedan ges en beskrivning av några av nyheterna som den nya versionen innehåller.
Webb services
Java SE 6 innehåller bl.a. förbättrade möjligheter att skapa webb services. Detta är primärt meningen att användas i klientsidan av en applikation. Java SE 6 innehåller en lättvikts HTTP server som webb servicarna publiceras i. Syftet är primärt att kunna använda sig av callbacks anrop.
För att illustrera hur webb services kan implementeras i Java SE 6 ges här ett exempel. Det är en enkel webb service som beräknar kvadraten av ett tal. Webb servicen körs från ett JUnit testprogram.
package server;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
@WebService
@SOAPBinding(style=SOAPBinding.Style.RPC)
public interface ICalculator {
/**
* @param number The value to calculate.
* @return The result of the calculation.
*/
@WebMethod
@WebResult(name = "calculationresult")
public int square(@WebParam(name = "number") int number);
}
Första steget är att skriva ett interface till webb servicen. Klassen Calculator nedan implementerar ICalculator interfacet.
package server;
import javax.jws.WebService;
@WebService(
endpointInterface = "server.ICalculator",
serviceName = "CalculatorService",
targetNamespace = "http://jsolutions.se")
public class Calculator implements ICalculator {
/**
* @param number The value to calculate.
* @return The result of the calculation.
*/
public int square(int number) {
return number*number;
}
}
För att köra och testa webb servicen används JUnit testprogram. I setUp-metoden i testprogrammet startas webb servicen och en klient vy av webb servicen. Metoden testSquare testar metoden square som är publicerad som en web service.
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Endpoint;
import javax.xml.ws.Service;
import junit.framework.TestCase;
import server.Calculator;
import server.ICalculator;
public class CalculatorTest extends TestCase {
private Endpoint endpoint;
private ICalculator proxy;
@Override
protected void setUp() throws Exception {
// start the web service
String address = "http://localhost:8080/calculator";
endpoint = Endpoint.publish(address, new Calculator());
// provide the client view of the web service
Service s = Service.create(
new URL(address + "?wsdl"),
new QName("http://jsolutions.se", "CalculatorService"));
proxy = (ICalculator) s.getPort(ICalculator.class);
}
public void testSquare() throws Exception {
int number = 2;
int result = proxy.square(number);
assertEquals(result,number*number);
}
@Override
protected void tearDown() {
endpoint.stop();
}
}
JDBC
JDBC 4.0 kommer att vara en del av Java SE 6. JDBC 4.0 innehåller bl.a. det nya interfacet DataSet. Ett resultat från en fråga kan bindas till ett DataSet, som ärver från java.util.List.
Ett DataSet kan hanteras och manipuleras både som connected och disconnected.
Eftersom DataSet är ett sub interface till java.util.List, ger det möjlighet till access av resultatraderna med Iterator mönstret m.h.a java.util.Iterator interfacet.
JDBC 4.0 har ett interface SQLXML som mappar standard SQL XML i SQL 2003 specifikationen. ResultSet, PreparedStatement och CallableStatement interfacen i java.sql-paketet har metoden getSQLXML() för att hämta data paketerat i SQLXML datatyp. PreparedStatement och CallableStatement har dessutom en setSQLXML() metod för skicka in SQLXML objekt som parameter.
I JDBC 4.0 finns också metoden isValid() i Connection interfacet, för att testa om connection fortfarande fungerar. Denna metod har kommit till eftersom att ibland kan en databas connection vara oanvändbar trots att den inte blivit garbage collected eller stängd.
Script
Java SE 6 innehåller ett paket javax.script som gör att du kan köra script från din javakod. Nedan ges ett exempelprogram som visar på hur JavaScript kan köras i ett javaprogram.
import javax.script.Compilable;
import javax.script.CompiledScript;
import javax.script.Invocable;
import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
public class JavaScript {
public static void main(String[] args) {
try {
ScriptEngineManager sEngMan = new ScriptEngineManager();
ScriptEngine sEng = sEngMan.getEngineByName("js");
sEng.eval("print('Start of square calculations')");
// set num
int num = 2;
sEng.put("num", num);
// direct output
sEng.eval("print('Square calculation from script execution')");
sEng.eval("print('Square of ' + num + ' = ' + num*num);");
// compile scripts to a form that
// can be executed repeatedly without recompilation.
Compilable com = (Compilable)sEng;
CompiledScript coScr = com.compile("function square() { " +
"return num*num;" +
"}; square();");
// execute the program stored in the CompiledScript object.
sEng.eval("print('Execute the program earlier compiled')");
Object result = coScr.eval();
System.out.println("Square of " + num + " = " + result);
// evaluate individual functions
sEng.eval("function square(num) { return num*num; }");
// methods that allow the invocation of procedures in scripts
// that have previously been executed.
Invocable inv = (Invocable)sEng;
sEng.eval("print('Procedure call from previous execution')");
result = inv.invoke("square", sEng.get("num"));
System.out.println("Square of " + num + " = " + result);
}
catch (Exception e) {
e.printStackTrace();
}
}
}
Det första som sker är det i ScriptEngineManager instansierar en JavaScript SrciptEngine genom anrop av metoden getEngineByName. I den instansierade ScriptEngine läggs värdet 2 in för nyckeln num. Genom anrop av eval metoden i ScriptEngine exekveras ett JavaScript som exekverar kvadraten på talet och skriver ut resultatet.
Nästa del i programmet är att kompilera ett skript som seanre kan exekveras. En funktion square skapas och som anropas. Med metodanropet script.eval() exekveras det kompilerade skriptet.
Sista delen i programmet anropar procedurer i skript som har kompilerats i en tidigare skriptexekvering. Funktionen square anropas med parametern num och exekveras. I metodanropet inv.invoke anropas funktionen square som tidigare har exekverats.
Övrigt
- I den nuvarande versionen av Java Platform, J2SE 5.0, var en av nyheterna paketet java.util.concurrent. Detta paket har i Java SE 6 utökats med interfacet BlockingQueue som är en Queue som stödjer att vänta på att det skall finnas något tillgängligt element i kön för att plocka ut. Detta kan t.ex. användas för att implementera ett consumer-producer scenario.
- Tidigare har klassen java.io.File inte haft stöd för långa sökvägar i Windows miljö. Begränsningen på max 255 tecken för hantering av sökväg i java.io.File klassen i Windows miljö, är med Java SE 6 borttagen.
- Klassen java.io.File har utökats med metoder för att ta fram det totala utrymmet respektive ledigt utrymme på en diskpartition.
- Stödet för JMX har förbättrats, bl.a. finns det möjlighet att skapa egendefinierade MXBeans.
- Prestanda har förbättrats, framförallt i GUI delarna.
- I Mustang finns XML Digitala signaturer API:s, för att skapa och manipulera digitala signaturer.
Informationskällor
- Mustang project home, https://mustang.dev.java.net/
- Leaver J. A., Jonathan A. Leaver’s Weblog, http://www.jroller.com/page/eldaaran
- Kotamraju J., Jitendra Kotamraju’s Blog, http://weblogs.java.net/blog/jitu/
- Coward D., Danny Cowards Sun Weblog, http://blogs.sun.com/roller/page/dannycoward
- Java 6 SE, Platform Name and Version Numbers, http://java.sun.com/javase/6/webnotes/version-6.html
- Jensen P., Scripting Support in Mustang, http://www.ociweb.com/jnb/jnbFeb2006.html
- Künneth T., Scripting for the Java Platform, http://today.java.net/pub/a/today/2006/04/11/scripting-for-java-platform.html
- Gans R., Ray Gans’s Blog, http://weblogs.java.net/blog/ray_gans/
- Tiwari S., Design and performance improvements with JDBC 4.0, – http://www.javaworld.com/javaworld/jw-05-2006/jw-0501-jdbc.html