Marcus har bl a skrivit följande inlägg på jsolutions.se.

  1. Maven 2 – Proxy

    För ett år sedan letade jag för fullt efter ett program som skulle hjälpa mig att sätta upp en lokal Maven 2 proxy. En Maven 2 proxy bör köras på en dator inom intranätet för att säkra tillgången till nödvändiga jar-filer samt fungera som en plats att internt distribuera inköpta bibliotek och egenutvecklade projekt. Detta visade sig tyvärr vara alltifrån lätt. I slutändan gav jag upp försöket att migrera mitt projekt till Maven 2, till stor del för att det var så krångligt med det interna repositoryt. Men det var för ett år sedan.

    Igår fick jag anledning att på nytt kolla läget på proxy-fronten, och till min glädje finns det nu ett flertal projekt igång som utvecklar proxy-programvaror just för Maven 2.

    Den första jag kikade på var Maven Archiva som just nu finns tillgänglig i version 1.0 Beta 1. Tankade genast ner denna, packade upp och körde igång den bundlade jetty-containern. Man behöver alltså inte ens ha en installerad webcontainer för att köra sitt eget Maven 2 repository! Dock hade jag vissa problem med konfigurationen av användare och fick inte riktigt till så att den tillät anonym read-access. Archiva klarar säkert av detta, men just då ville det sig inte för mig.

    Lite otålig så provade jag nästa programvara på tur, Artifactory (version 1.2.2). Lika enkelt att få igång, den har också sin egen bundlade jetty-container, bara att starta den med bat/sh-skriptet. Nästa steg var att peka om Artifactory mot min web-proxy för access till central-repositoryt samt konfigurera min lokala Maven 2-installation att använda Artifactory’s repository istället för central-repositoryt. Nästa steg? Finns inget nästa steg, för det fungerar!

    Varje gång Maven 2 frågar Artifactory efter en jar-fil så kollar den i sin lokala cache, finns den inte där så laddas den automatiskt ner från repo1.maven.org och lagras i cachen. Har man proprietära jar-filer så kan man ladda upp dem till Artifactory i det medföljande webbgränssnittet så finns de direkt tillgängliga för alla med access till Artifactory (lämpligtvis resten av utvecklarna i ditt projekt). I webbgränssnittet kan man söka och bläddra efter allt som finns lagrat i cachen samt administrera användare.

    Det finns bra dokumentation på Artifactory’s hemsida, men följande guide (SettingUpMavenRepository) kan också vara till hjälp.

    Jag menar inte här att Artifactory är den bästa Maven 2-proxyn som finns då jag bara hunnit testa två stycken än så länge. Dock fungerar den tillräckligt bra för mig och det räcker just nu.

    Proximity är en annan Maven proxy, men den är ännu inte helt färdig utan bara släppt i en Release Candidate 8.

  2. XFire på JavaForum

    Min presentation från javaforum finns nu att ladda ner som pdf här.

    Jag har även lagt upp körbar kod (via Maven 2) för server-implementationerna, exemplet med den generade klienten som jag inte hann visa, samt alla klientskript i Groovy. Koden kan ni ladda ner här.

    För att starta servern:

    För att köra Groovy-skripten (när servern är startad):

    • Se till att Groovy är installerat
    • Installera även SOAP-tillägget för Groovy
    • Öppna en kommandoprompt i groovy_scripts-katalogen
    • Kör t.ex. kommandot groovy users.groovy

    Den genererade klienten samt exemplet mot Västtrafik går båda att köra med kommandot mvn test

    Västtrafik-klienten är lite speciell då WSDL-filen för den operation jag använder (GetRoute) endast returnerar en xsd:string, även fast innehållet i strängen är en XML-struktur. För att kunna koda mot denna servicen ändå så genererade jag ett XML-schema som matchade denna XML-struktur med hjälp av ett program som heter Trang. När jag väl hade XML-schemat så var det bara att låta JAXB sköta deserialiseringen av XML-strukturen. Ett detaljerat exempel på detta kanske blir ett framtida blogg-inlägg.

  3. Spring 2.0 final released!

    Äntligen har Spring 2.0 final släppts. Läs om alla nyheter och ladda ner det här.

    Nu är det bara att vänta på att det ska släppas POM-filer på ibiblio också så vi kan börja använda det med Maven2. Enligt Ben Hale på Interface21 är arbetet dock i full gång.

  4. SpringOne

    Sitter just nu på SpringOne i Antwerpen, Belgien. Över 400 deltagare har letat sig hit på denna 2-dagars konferens som behandlar Spring-ramverket på alla tänkbara sätt. Det handlar om runt 40 presentationer under 2 intensiva dagar.

    Samtliga presentationer kommer föresten att släppas som pdf’er i slutet på juni, som podcasts under july och i september kommer de inspelade versionerna.

    Rod Johnson, en av skaparna till Spring, har entusiastiskt hållit delar av båda dagarnas inledande keynotes. Under dessa handlar mycket som väntat om Spring-evangelism och man får ta det med en nypa salt. Trots detta lyckas man ändå hålla det på en professionell nivå och belysa hur framgångsrikt Spring har använts i många enterpriseprojekt där höga krav ställs på pålitlighet och prestanda. Imponerande!

    Alla utvecklare till Spring finns på plats här och många av dem har hållit presentationer om sina egna submoduler till ramverket. Det märks också på kvalitén på föreläsningarna som ofta håller en mycket hög nivå.

    Själv har jag försökt följa webspåret genom konferensen som bl.a. behandlat Spring MVC, Spring Portlet MVC, Spring-integration mot DWR (ajax rpc-ramverk), Spring Webflow. Mest intressant tyckte jag var sessionerna om DWR samt Spring Webflow.

    Utöver dessa kikade jag även på en session om ett samarbetsprojekt mellan BEA och skaparna av Spring kallat Pitchfork, samt en session allmänt om testning med hjälp av Spring.

    Det har varit ett riktigt bra arrangemang, och förutom nåra problem med luftkonditioneringen i det stora biokomplexet (Metropolis) och något små lunchpåsar har det hela rullat på utmärkt.

  5. Javaforum i Malmö 23/4 -06

    Har precis varit på javaforum hos jayway i deras nya lokaler i malmö. Det var ett halvdagsarrangemang med föreläsare från Trifork, Jayway samt SICS (Swedish Institute for Comuter Science).

    Jag tycker att det var ett välordnat forum med intressant innehåll med bl.a. det alltid så heta Spring (som snart kommer i version 2.0), en presentation av Trifork’s applikationsserver och deras samarbete med open source-servern Geronimo samt en presentation av SICS om hur man lyckas köra en JVM på väldigt begränsade resurser (2KB RAM och ett tiotal KB ROM).

    Den presentation som väckte störst intresse för min del var den om Spring 2.0, och den lyckades höja min motivation ytterligare till att faktiskt ta mig tid att prova på nyheterna i version 2.0. Mest intressant verkar möjligheten att kunna köra POJOs som Message Driven Beans, utan att faktiskt köra applikationen i en EJB-container. Trevligt! En annan nyhet är också integrationen med AspectJ, utöver den redan befintliga Spring AOP.

    Föreläsaren från Trifork gjorde ett bra jobb med att marknadsföra deras applikationsserver, men framförallt framhävdes även Geronimo som en bra och stark konkurrent till JBoss. Geronimo har enligt trifork ett antal fördelar framför JBoss; såsom en mera liberal licens samt en stark community med IBM som en av huvudsponsorerna. Kan Geronimo bli applikationsservrarnas eclipse? I vilket fall som helst har javavärlden minst två bra open source-alternativ framför de stora tunga Websphere och Weblogic.

  6. Bugg med Weblogic + Struts Template

    Struts 1.0.2) fungerar alldeles utmärkt i Tomcat 4.1.31 medan Weblogic 8.1.2 endast ger ‘Error 500 – Internal Server Error’:

    
    javax.servlet.jsp.JspException
     at org.apache.struts.taglib.template.InsertTag.doEndTag(InsertTag.java:149)
     at jsp_servlet._analysis.__input._jspService(__input.java:230)
     at weblogic.servlet.jsp.JspBase.service(JspBase.java:33)
    
    

    Mina JSP-templates ser ut på följande sätt:

    filnamn: /subcomponent/myPage.jsp

    
    
        
        
        
        
    
    
    

    Filen /subcomponent/myPageContent.jsp har själva innehållet.

    Det visade sig att Weblogic (tillsammans med struts templates) inte riktigt klarar av att jsp-filerna är organiserade i underkataloger. Problemen försvann helt då jag flyttade upp alla jsp-filer till rotkatalogen för websajten.

    filnamn: /myPage.jsp

    
    
        
        
        
        
    
    
    

    Nu kan man ju fundera över varför man överhuvudtaget använder struts-template istället för tiles, sitemesh eller nåt annat häftigt template ramverk. Svaret är enkelt, hur coola de ramverken än är så har de inte alltid funnits och det föll sig helt enkelt så att projektet jag sitter på nu började använda struts-template för länge sedan. Jag hoppas dock på att få ”lite tid över” någon gång för att ta tag i den situationen.

  7. Rekursivt ta bort kataloger med Ruby

    rekursivt. Detta kan vara mycket användbart då man inte vill ha dessa kataloger kvar om man behöver checka in en version av ett repository på nytt.För *nix-användare kanske det här aldrig har varit något problem då de direkt har tillgång till kraftfulla script-möjligheter. För windows-användare däremot har det varit betydligt svårare. Här kommer följande ruby-script väl till hands.

    
    def deleteDir(dir)
        puts "cd #{dir}"
        Dir.chdir(dir)
        Dir.foreach(dir) do |file|
            if file != "." and file != ".."
                if File.directory?(file)
                    deleteDir("#{dir}/#{file}")
                else
                    puts "delete file #{file}"
                    File.delete(file)
                end
            end
        end
        Dir.chdir("..")
        puts "delete directory #{dir}"
        Dir.delete(dir)
    end
    
    def processDir(dir)
        #puts "Processing directory #{dir}"
        Dir.chdir(dir)
        Dir.foreach(dir) do |file|
            if File.directory?(file)
                if file == ".svn"
                    puts "Deleting directory #{dir}/#{file}"
                    deleteDir("#{dir}/#{file}")
                elsif file != "." and file != ".."
                    processDir("#{dir}/#{file}")
                end
            end
        end
        Dir.chdir("..")
    end
    
    puts "Working directory: #{Dir.pwd}"
    processDir(Dir.pwd)
    
    

    Det är bara att klistra in i en fil och köra ruby Scriptet ovan tar bort kataloger som heter .svn, passar inte det är det bara att ändra i villkoret i skriptet.

  8. SYSDATE till GMT/UTC i Oracle

    Stötte på ett litet problem för någon dag sedan där jag i en Oracle 8i procedure behövde få SYSTIMESTAMP (eller SYSDATE) i UTC/GMT format. Det verkar som att detta inte är någon standardfunktion som Oracle omedelbart kan tillhandahålla. Dessutom verkar det vara ganska svårt att hitta en bra lösning på detta via google. Det sätt som jag löste problemet på var i alla fall att i proceduren göra följande:

    LOG_DATE TIMESTAMP;
    
    BEGIN
    
    select (SYS_EXTRACT_UTC (systimestamp))
    into LOG_DATE from dual;

    detta stoppar in den nuvarande UTC-tiden i variabeln LOG_DATE som sedan kan användas i vanliga PL/SQL-uttryck. I detta fall anropas proceduren utifrån av en trigger som lyssnar på alla INSERT/UPDATE/DELETE på en viss tabell och genererar journal-poster i en annan tabell. Datumet representerar då slutet på en journalpost och början på nästa.