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