Att bidra till något fritt är en oerhörd moralboost.

Jag berättade tidigare i veckan om vår strategi för fri och öppen källkod. Det första bidraget till öppen källkod  från utvecklingsavdelningen blir ett Java-bibliotek för objekt-relationell mappning av databaser, en så kallat ORM. Förenklat uttryckt används en ORM för att omvandla data från databaser till objekt som går att bearbeta med kod. Varefter vi hinner med kommer dessutom ett antal andra typer av hjälpbibliotek som redan lever i våra interna system paketeras i någon lämplig form av fri och öppen källkod. Det låter väl spännande?

Varför utveckla en egen ORM?

Jajja är ett datadrivet företag! På säljavdelningen är det förstås möjligt att de inte håller med mig i detta uttalande, för det finns ett stort utrymme för handläggningar och kundanpassningar också. Oavsett hur man väljer att se på det, så finns det ett stort antal databaser och system som bearbetar data från dessa. Vi pumpar in data från externa källor och matar ut dem till våra kunder i förståeligt format, eller använder dem för att driva produktion av våra produkter.

Det finns ett oskrivet krav att snabbt kunna ta fram nya system för bearbetning av data och att bygga nya databaser för att representera olika typer av mätvärden för analys, men även för att representera redaktionellt material. Därför har vi redan gått igenom ett stort antal lösningar i vår jakt på att förenkla processen. Vi har provat Hibernate som måste anses ligga i den tyngre kategorin, använt myBatis som ligger i mellanregistret och handrullat egna mappningar med endast standardbiblioteket JDBC som stöd. Inget av de alternativen har känts smidigt att arbeta med trots att de alla löser problemen väl, så vi bestämde oss till slut för att leta även i lättviktsregistret. Där fann vi bland andra ActiveJDBC och ORMLite, som verkar höra till de hetaste kandidaterna. Även om de i många avseenden redan gått lång väg för tillhandahålla ett rent och användbart gränssnitt mot databasen så finns där också designval som inte riktigt är förenliga med våra krav. Vi måste både enkelt kunna generera en rak mappning av databasen och samtidigt kunna erhålla full exponering av den starka uttrycksfrihet som rena SQL-frågor ger. Detta är något som ActiveRecord sköter väldigt bra under huven på Ruby on Rails, men som inte finns att tillgå i Java, mest på grund av begränsningar i språket.

Vi insåg redan tidigt att vi inte kommer kunna bygga den kompletta lösningen på en gång, utan valde istället att fokusera på det vi såg som viktigt och som saknas i de tillgängliga alternativen. Resultatet av våra ansträngningar är jORM, som du själv kan granska på vår egen sida på Github.

jORM är en lättvikts-ORM för Java

jORM lanseras under licensen MIT, som är en av de minst inskränkande licenserna för fri mjukvara som finns att tillgå. Därmed kan alla som vill använda sig av biblioteket eller vidareutveckla egna versioner, göra så utan att orsaka problem för sig själva eller sin organisation.

Här följer ett par kodexempel som tyvärr bara beskriver en bråkdel av vad biblioteket erbjuder i form av gränssnitt mot databaser. Om du vill läsa mer eller använda det själv, kika in på repot för jORM på Github istället!

// Mapped queries
Locale locale = Record.findById(Locale.class, 1);
locale = Record.find(Locale.class, new Column("language", "sv"), new Column("country", "SE"));
List locales = Record.findAll(Locale.class, new Column("language", "en"));

// SQL queries
Tribe tribe = new Tribe();
tribe.setId(1);
String name = "Azog";
Goblin goblin = Record.select(
    Goblin.class,
    "SELECT * FROM goblins WHERE name = #1# AND tribe_id = #2:id#",
    name, // #1#
    tribe // #2#
);

Om du nu själv funderar på din egen roll i öppen källkod bör det viktigaste argumentet för öppen källkod nämnas. Att bidra till något fritt är en oerhörd moralboost, vilket antagligen är anledningen till att det finns så många framgångsrika projekt i den utvecklingsformen, som Wikipedia och WordPress för att nämna ett par av de större projekten. Faktum är att en stor del av arbetet med jORM skedde obetalt på vår egen fritid, men låt bli att uppmärksamma det senare för din arbetsgivare så skall vi försöka göra detsamma.