1. Systemintegration vs. arkitekturen

    En av viktiga frågorna i ett systemintegration projekt är hur arkitekturen ser ut. Oavsett om man använder Java eller inte, gäller det att ta arkitekturen som den centrala frågan i projektet. Man måste se frågan från olika synvinklar och kategorisera dem i detaljer. Ungefär en sådan checklista skulle vara en bra början:

    • Bygg enligt OOA/OOD/OOP
    • Följ standard koncept och principer (Best Practices)
    • Ha tjänsteorienterad arkitekt i tankar
    • Stora krav på en hållbar/flexibel arkitektur som hanterar alla tänkbara utmaningarna/förändringar
    • Bygg enligt AOD/AOA/AOP (icke funktionella aspekter): Identifiera viktiga systemintegration aspekter och prioritera dem
    • Dela upp applikationen i flera skikt/moduler (Multi Tier. Presentation, Biz and Integration)

    Här är bara några av ”aspekter” jag vill nämna:

    Accessibility, Accountability, Adaptability, Administrability,  Affordability, Agility, Availability, Composability, Configurability, Customizability, Demonstrability, Dependability, Deployability, Distributability, Durability,
    Evolvability, Extensibility, Flexibility, Installability, Interoperability, Maintainability, Manageability, Portability, Recoverability, Reliability, Reusability, Scalability, Seamlessness, Serviceability, Securability, Simplicity, Stability, Survivability, Tailorability, Testability, Understandability, Usability

  2. Vad betyder systemintegration för dig?

    Systemintegration är ett ord med olika innehåll beroende på vem som tolkar det. Om man summerar de flesta beskrivningar kan man sammanfatta så här enligt mina observationer:

    Den verkliga integrationen kräver bådadera, det vill säga både integration av system och funktioner (ökad effektivitet, produktivitet, nya tjänster och i slutänden en möjlighet att tjäna mer pengar)

    • För tekniker: länka ihop program och system, för att de ska fungera bättre ihop
    • För affärsfolket: länka ihop funktioner och affärsverksamhet för att förbättra affärsverksamheten.
  3. Godbitar i Java 6

    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