Arkiv for kategorien 'Åpen kildekode'

Endelig skikkelig konfigurasjonsstyring av java-applikasjoner

For oss utviklere som er opptatt av å levere kvalitetsløsninger så har konfigurering av deploymentpakker for ulike miljøer som test, stage og prod vært problematisk og tungvint.

En nokså populær måte bygge deployment pakker på har vært å bruke Mavens funksjonalitet til å definere profiler og filtrer. På denne måten får man definert hvilke konfigurasjonsfiler som skal være med i de ulike miljøene. Ulemen med denne løsinger er at man ender opp med en pakke for hvert miljø, noe driftspersonal ikke ønsker. De ønsker å kunne deploye den samme pakken i alle miljøene.

For å løse dette så er det ofte vanlige å trekke ut konfigurasjonsfiler av deployment pakkene, og legge dem på et bestemt sted(/etc/konfig.properties)  hvor de blir lest ved oppstart.  Ulempene med denne løsningen er at konfigurasjonsfilene blir spredd ut over forkjellige maskiner. Dette gjør det  tungvint å refakturere og endre på strukturene av konfigurasjonsfilene. (I stedet for å endre på konfigurasjonsparameter så beholder man det subboptimale for å unngå å måtte gjøre endringer på flere forskjellige maskiner.) En annen svakhet med denne løsningen er at det blir vanskelige å holde styr på hvilke parameter som er satt i de ulike miljøene for eksempel når man introduserer nye parameter.

En bedre løsning hadde vært å kunne gjøre alle konfigurasjonene på en plass i en fil. Dette er nøyaktig hva Constretto muligjør.

Constretto er et java open-source rammeverk laget av Kaare Nilsen fra Arktekk som gjør det mulig å deploye samme pakke i flere miljøer. Constretto kan ta konfigurasjonsfiler på to forskjellige måter.

Den første er en variant over java properties filer og ser slik ut:

parameter1 = min felles verdi
parameter2 = enda en felles verdi

@test.parameter3 = en verdi for test
@stage.parameter3 = en annen verdi for stage
@prod.parameter3 = en tredje verdi for prod

Vi har altså parametrer som er felles for alle miljøene, samt parametere for hvert miljø.

Den andre konfigurasjonsmåten er basert på gamle gode ini-fil-notasjonen:

[default]
parameter1 = min felles verdi
parameter2 = enda en felles verdi

[test]
parameter3 = en verdi for test
[stage]
parameter3 = en annen verdi for stage
[prod]
parameter3 = en tredje verdi for prod

Så dette var to forskjellige konfigurasjonsmåter, men hvordan vet hvert miljø hvilken parameter3 som skal brukes? Dette gjøres med å angå ved oppstart av java hvilket miljø man er i. For test vil det være –DCONSTRETTO_TAGS=test, og så vil Constretto lese de riktige parameterne.

Til slutt, hvordan kommer disse parameterne inn i selve java-applikasjonene? Bruker man Spring rammeverket så har Constretto en konfigurasjonslaster som oppfører seg veldig likt Springs egen property-placeholder, og som gjør at man når parameterne med vanlig ${parameter3} notasjon:

<constretto:resource location=”classpath:konfigurasjonsfil.properties”/>

<bean class=”KonfigKlasse”>
<property name=”parameter3” value=”${parameter3}”/>
</bean>

En annen måte å få injektet parameterverdier på er å bruke Constretto sine egne snertne java annotasjoner:

public class KonfigKlasse{
private String parameter3;

@Configure
public void configure(String parameter3){
this.parameter3 = parameter3;
}

Alt i alt så har dette revolusjonert konfigurasjonsstyring av java applikasjoner for meg. De er nå mye lettere å vedlikeholde og vi har nå en helt ny kontroll på hvilke parameter som blir brukt i de ulike miljøene.

Av variantene over så foretrekker jeg ini-filer sammen med java annotasjoner.

Luclipse et Lucene index verktøy for Eclipse

For alle som jobber med Lucene indexer av og til har vi nå laget et nytt verktøy som kan gjøre hverdagen litt enklere. Luclipse er en eclipse plugin som gir deg tilgang til dine Lucene indexer direkte fra Eclipse. Hittil har alternativet vært å bruke Luke, som har sine mangler. Bl.a. huser ikke Luke hvilke indexer du tidligere har åpnet, og brukergrensesnittet kan være noe overveldende og forvirrende før man har brukt det en del. På sikt er Luclipse tenkt å ha mye den samme funksonaliteten som Luke som sikkert flere kjenner, men forhåpentligvis vil Luclipse gi et enklere og mer effektivt brukergrensesnitt.  Vi ser også for oss å legge til funksjonalitet for å kunne teste sine egne alalyzere. Luclipse har vi valgt å legge ut som et opensource prosjekt, slik at andre kan være med å bridra til at vi får et bedre verktøy for jobbe med lucene. Den første versjonen og kildekode kan lastes ned på http://sourceforge.net/projects/luclipse/