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