<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Cygni</title>
	<atom:link href="http://cygni.se/feed/" rel="self" type="application/rss+xml" />
	<link>http://cygni.se</link>
	<description>expertis inom agil systemutveckling på moderna plattformar</description>
	<lastBuildDate>Tue, 07 Feb 2012 21:53:25 +0000</lastBuildDate>
	<language>sv</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Ny kund: Avanza Bank</title>
		<link>http://cygni.se/2012/02/07/ny-kund-avanza-bank/</link>
		<comments>http://cygni.se/2012/02/07/ny-kund-avanza-bank/#comments</comments>
		<pubDate>Tue, 07 Feb 2012 14:01:28 +0000</pubDate>
		<dc:creator>Jon Persson</dc:creator>
				<category><![CDATA[Pressmeddelanden]]></category>
		<category><![CDATA[bank]]></category>
		<category><![CDATA[finans]]></category>
		<category><![CDATA[ledande]]></category>
		<category><![CDATA[ny kund]]></category>

		<guid isPermaLink="false">http://cygni.se/?p=3994</guid>
		<description><![CDATA[Cygni har idag tecknat avtal med Avanza Bank om att leverera avancerade konsulttjänster inom webbutveckling. Avanza är Sveriges största nätmäklare och det helägda dotterbolaget Avanza Bank är Sveriges största nischbank inom sparande. Avanza-aktien är noterad på MidCap-listan på Stockholmsbörsen. Detta avtal befäster Cygnis ställning som en ledande leverantör av konsulttjänster till företag vars webbtjänster har ...]]></description>
			<content:encoded><![CDATA[<p>Cygni har idag tecknat avtal med Avanza Bank om att leverera avancerade konsulttjänster inom webbutveckling. Avanza är Sveriges största nätmäklare och det helägda dotterbolaget Avanza Bank är Sveriges största nischbank inom sparande. Avanza-aktien är noterad på MidCap-listan på Stockholmsbörsen.</p>
<p>Detta avtal befäster Cygnis ställning som en ledande leverantör av konsulttjänster till företag vars webbtjänster har exceptionella krav på prestanda, säkerhet och användbarhet.</p>

	Tags: <a href="http://cygni.se/taggar/bank/" title="bank" rel="tag">bank</a>, <a href="http://cygni.se/taggar/finans/" title="finans" rel="tag">finans</a>, <a href="http://cygni.se/taggar/ledande/" title="ledande" rel="tag">ledande</a>, <a href="http://cygni.se/taggar/ny-kund/" title="ny kund" rel="tag">ny kund</a><br />
]]></content:encoded>
			<wfw:commentRss>http://cygni.se/2012/02/07/ny-kund-avanza-bank/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Synkronisering av multipla Google Calendars med iPhone</title>
		<link>http://cygni.se/2012/01/24/synkronisering-av-multipla-google-calendars-med-iphone/</link>
		<comments>http://cygni.se/2012/01/24/synkronisering-av-multipla-google-calendars-med-iphone/#comments</comments>
		<pubDate>Tue, 24 Jan 2012 07:19:05 +0000</pubDate>
		<dc:creator>Nathalie Sandström</dc:creator>
				<category><![CDATA[Stacktrace]]></category>
		<category><![CDATA[cygni]]></category>
		<category><![CDATA[e-post]]></category>
		<category><![CDATA[exchange]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[microsoft]]></category>

		<guid isPermaLink="false">http://cygni.se/?p=3598</guid>
		<description><![CDATA[På Cygni använder vi Google Apps för en stor del av all kommunikation: e-post, kalendrar, wiki, kontakter o.s.v. vilket fungerar grymt. Kalenderbiten är en viktig del och personligen har jag ett tiotal olika kalendrar &#8211; egna som andras, privata som arbetsrelaterade &#8211; kopplade till mitt konto. I kombination med detta kör jag iPhone, både privat ...]]></description>
			<content:encoded><![CDATA[<p>På Cygni använder vi Google Apps för en stor del av all kommunikation: e-post, kalendrar, wiki, kontakter o.s.v. vilket fungerar grymt. Kalenderbiten är en viktig del och personligen har jag ett tiotal olika kalendrar &#8211; egna som andras, privata som arbetsrelaterade &#8211; kopplade till mitt konto. I kombination med detta kör jag iPhone, både privat och på jobbet, och ser det som en nödvändighet att kunna nå och editera mina kalendrar från den enheten.</p>
<p>Det finns redan mängder med tutorials över hur man sätter upp Google-konton på sin iPhone men jag har upplevt det aningen problematiskt att synka multipla Google-kalendrar och tänker mig att detta inlägg får fungera som en steg för steg-guide över hur jag fick till synkningen. Jag har en iPhone 3GS med iOS 5 och använder mig av <a href="http://www.google.se/mobile/sync/">Google Sync</a> för synkronisering.</p>
<p>Har du inte redan satt upp ett Google-konto på din iPhone följer du dessa steg:</p>
<ol>
<li>Under inställningsmenyn på din iPhone väljer du<strong> E-post, kontakter, kalendrar</strong></li>
<li><strong>Lägg till konto</strong></li>
<li>Välj att skapa ett <strong>Microsoft Exchange</strong>-konto (vilket är det protokoll Google Sync använder vid synkronisering till iPhone)</li>
</ol>
<p><a href="http://cygni.se/2012/01/24/synkronisering-av-multipla-google-calendars-med-iphone/gallery1-5/" rel="attachment wp-att-3636"><img src="http://cygni.se/wp-uploads/2011/10/gallery14.png" alt="Add Microsoft Exchange account" width="550" height="255" class="alignnone size-full wp-image-3636" /></a></p>
<ol start="4">
<li>Under <strong>E-post</strong> fyller du i din fullständiga e-postadress</li>
<li>Lämna <strong>domän</strong>fältet tomt</li>
<li>Fyll i din fullständiga e-postadress under <strong>Användarnamn</strong></li>
<li>Skriv in <strong>lösenordet</strong> för ditt Google-konto</li>
<li>Klicka på <strong>Nästa</strong></li>
<li>När fältet <strong>Server</strong> poppar upp fyller du i <em>m.google.com</em></li>
<li>Klicka på <strong>Nästa</strong></li>
<li>Välj vad du vill synka (denna guide kräver att du åtminstone väljer att synka kalendrar)</li>
</ol>
<p><a href="http://cygni.se/2012/01/24/synkronisering-av-multipla-google-calendars-med-iphone/gallery2/" rel="attachment wp-att-3637"><img src="http://cygni.se/wp-uploads/2011/10/gallery2.png" alt="Account information" width="550" height="255" class="alignnone size-full wp-image-3637" /></a></p>
<p>Setup av synkroniseringen är nu klar och beroende på vad du i steg 11 valde att synka kommer det nu att pushas ut information till din iPhone.</p>
<p>Med Google Sync kan du synka upp till 25 kalendrar på din iPhone vilket man enkelt ska kunna sätta upp genom att surfa in på <a href="http://m.google.com/sync">http://m.google.com/sync</a> och logga in på sitt konto. Här stötte jag dock på problem. Sidan talade om för mig att Google Sync tyvärr inte kunde stödja min enhet eftersom jag var tvungen att ha iOS 3 eller senare &#8211; något som jag uppenbarligen hade då jag precis uppdaterat till iOS 5.</p>
<p><a href="http://cygni.se/2012/01/24/synkronisering-av-multipla-google-calendars-med-iphone/error/" rel="attachment wp-att-3638"><img src="http://cygni.se/wp-uploads/2011/10/error.png" alt="" width="260" height="400" class="alignnone size-full wp-image-3638" /></a></p>
<p>Efter en tids undersökning kunde jag konstatera att detta var en bugg fler användare upplevt och en konsekvens av att Google Sync befinner sig i ett beta-stadie. Sajten kräver att sidan presenteras på engelska och det du behöver göra för att komma runt problemet är att byta språk från svenska till just engelska enligt nedan steg:</p>
<ol start="12">
<li>Med din iPhone, surfa in på <a href="http://m.google.com/sync">http://m.google.com/sync</a></li>
<li>För att ändra språk klickar du på länken <strong>Byt språk</strong> (jag valde English (UK))</li>
<li>Sidan laddas om och du har nu möjlighet att logga in. Gör detta genom att klicka på <strong>Sign in with your Google Account</strong></li>
<li>Du möts nu av de enheter du har satt upp ditt Google-konto på och genom att klicka dig in på de olika enheterna kan du välja exakt vilka kalendrar du vill synka</li>
</ol>
<p><a href="http://cygni.se/2012/01/24/synkronisering-av-multipla-google-calendars-med-iphone/gallery3/" rel="attachment wp-att-3639"><img src="http://cygni.se/wp-uploads/2011/10/gallery3.png" alt="Sync devices" width="550" height="410" class="alignnone size-full wp-image-3639" /></a></p>
<ol start="16">
<li>Efter att ha valt vilka kalendrar du vill synka och klickat på <strong>Save</strong> är du klar</li>
</ol>
<p>När du nu lägger till, editerar eller tar bort händelser i dina kalendrar kommer dessa speglas på alla enheter du synkat enligt ovan steg &#8211; detta gäller självfallet oberoende av om du gör förändringarna i kalendern på din iPhone eller i webbgränssnittet på din dator.</p>
<p><a href="http://cygni.se/2012/01/24/synkronisering-av-multipla-google-calendars-med-iphone/gallery4/" rel="attachment wp-att-3640"><img src="http://cygni.se/wp-uploads/2011/10/gallery4.png" alt="Devices synced" width="550" height="300" class="alignnone size-full wp-image-3640" /></a></p>

	Tags: <a href="http://cygni.se/taggar/cygni/" title="cygni" rel="tag">cygni</a>, <a href="http://cygni.se/taggar/e-post/" title="e-post" rel="tag">e-post</a>, <a href="http://cygni.se/taggar/exchange/" title="exchange" rel="tag">exchange</a>, <a href="http://cygni.se/taggar/iphone/" title="iphone" rel="tag">iphone</a>, <a href="http://cygni.se/taggar/microsoft/" title="microsoft" rel="tag">microsoft</a><br />
]]></content:encoded>
			<wfw:commentRss>http://cygni.se/2012/01/24/synkronisering-av-multipla-google-calendars-med-iphone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ny kund: Svenska Dagbladet</title>
		<link>http://cygni.se/2012/01/16/ny-kund-svenska-dagbladet/</link>
		<comments>http://cygni.se/2012/01/16/ny-kund-svenska-dagbladet/#comments</comments>
		<pubDate>Mon, 16 Jan 2012 09:38:29 +0000</pubDate>
		<dc:creator>Jon Persson</dc:creator>
				<category><![CDATA[Pressmeddelanden]]></category>
		<category><![CDATA[media]]></category>
		<category><![CDATA[SvD]]></category>

		<guid isPermaLink="false">http://cygni.se/?p=3979</guid>
		<description><![CDATA[Cygni har tecknat avtal med Svenska Dagbladet om att leverera avancerade konsulttjänster inom javautveckling, webbutveckling och Content Management. SvD.se är en av Sveriges största nyhetssajter och blev nyligen utsedd till Årets dagstidning – digitala medier. Cygni har de senaste åren framgångsrikt levererat konsulttjänster till majoriteten av de största svenska mediebolagen. Det nya avtalet med Svenska Dagbladet ...]]></description>
			<content:encoded><![CDATA[<p>Cygni har tecknat avtal med Svenska Dagbladet om att leverera avancerade konsulttjänster inom javautveckling, webbutveckling och Content Management. SvD.se är en av Sveriges största nyhetssajter och blev nyligen utsedd till Årets dagstidning – digitala medier.</p>
<p>Cygni har de senaste åren framgångsrikt levererat konsulttjänster till majoriteten av de största svenska mediebolagen. Det nya avtalet med Svenska Dagbladet är ytterligare ett i raden av bevis för att Cygnis spetskompetens är efterfrågad i mediebranschen.</p>

	Tags: <a href="http://cygni.se/taggar/media/" title="media" rel="tag">media</a>, <a href="http://cygni.se/taggar/svd/" title="SvD" rel="tag">SvD</a><br />
]]></content:encoded>
			<wfw:commentRss>http://cygni.se/2012/01/16/ny-kund-svenska-dagbladet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mockning &#8211; @InjectMocks med Mockito</title>
		<link>http://cygni.se/2012/01/11/mockning-injectmocks-med-mockito/</link>
		<comments>http://cygni.se/2012/01/11/mockning-injectmocks-med-mockito/#comments</comments>
		<pubDate>Wed, 11 Jan 2012 16:23:55 +0000</pubDate>
		<dc:creator>Leo Wentzel</dc:creator>
				<category><![CDATA[Stacktrace]]></category>
		<category><![CDATA[di]]></category>
		<category><![CDATA[ioc]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[java ee]]></category>
		<category><![CDATA[junit]]></category>
		<category><![CDATA[mock objects]]></category>
		<category><![CDATA[mockito]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[tdd]]></category>

		<guid isPermaLink="false">http://cygni.se/?p=3848</guid>
		<description><![CDATA[När ett test skrivs för en klass som har beroenden till en datakälla, en extern service eller bara en annan klass är mockning ofta väldigt användbart. Ibland kan detta leda till att produktionskod anpassas för att det ska gå att skriva dessa tester. Nedan är exempel på ett test som testar en service som använder ...]]></description>
			<content:encoded><![CDATA[<p>När ett test skrivs för en klass som har beroenden till en datakälla, en extern service eller bara en annan klass är mockning ofta väldigt användbart. Ibland kan detta leda till att produktionskod anpassas för att det ska gå att skriva dessa tester. Nedan är exempel på ett test som testar en service som använder en entity manager.</p>
<pre class="brush: java; title: ;">
package se.cygni.blog;

import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;

import javax.persistence.EntityManager;

import org.junit.Before;
import org.junit.Test;

public class BlogServiceTest {

    private BlogService service;
    private EntityManager entityManager;

    @Before
    public void setup() {
        entityManager = mock(EntityManager.class);
        service = new BlogService(entityManager);
    }

    @Test
    public void addEntry() {
        Entry entry = new Entry(&quot;title&quot;, &quot;text&quot;);

        service.addEntry(entry);

        verify(entityManager).persist(entry);
    }

}
</pre>
<p>Testet i exemplet är relativt enkelt och verifierar endast att <em>persist</em> anropas i <em>addEntry</em> och ger oss  följande kod för ett Spring-baserat projekt:</p>
<pre class="brush: java; title: ;">
package se.cygni.blog;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class BlogService {

    @PersistenceContext
    private EntityManager entityManager;

    public BlogService() {
    }

    protected BlogService(EntityManager entityManager) {
        this.entityManager = entityManager;
    }

    @Transactional
    public void addEntry(Entry entry) {
        entityManager.persist(entry);
    }

}
</pre>
<p>För att kunna använda en mockad <em>entityManager</em> har vi lagt till en konstruktor som tar en <em>EntityManager</em> som <em>BlogService</em> sedan kan använda. Använder vi dessutom <em>&#8221;field injection&#8221;</em> är vi tvugna att lägga till en no-args-konstruktor. Alternativt hade vi kunnat lägga till en setter istället.</p>
<pre class="brush: java; title: ;">
    protected void setEntityManager(EntityManager entityManager) {
        this.entityManager = entityManager;
    }
</pre>
<p>Det är väl antagligen inte så illa att behöva lägga till konstruktorer alternativt setters även om det blir värre när en klass har flera beroenden. Däremot känns det ju lite onödigt när både Spring och Java EE numera stödjer <em>field injection</em>. Det går ju att köra enhetstesterna med till exempel Spring och låta Spring injicera alla beroenden. Detta anses dock inte helt lämpligt för enhetstester utan lämpar sig bättre för integrationstester. Istället kan <a href="http://code.google.com/p/mockito/">Mockito</a> ta hand om injicering, genom att köra testerna med <em>MockitoJUnitRunner</em> och använda annotationerna <em>@Mock</em> och <em><a href="http://docs.mockito.googlecode.com/hg/latest/org/mockito/InjectMocks.html">@InjectMocks</a></em>. Mockito fungerar då i princip som en enkel IOC-container och några extra konstruktorer eller setters behövs inte. </p>
<pre class="brush: java; title: ;">
package se.cygni.blog;

import static org.mockito.Mockito.verify;

import javax.persistence.EntityManager;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;

@RunWith(MockitoJUnitRunner.class)
public class BlogServiceTest {

    @Mock
    private EntityManager entityManager;

    @InjectMocks
    private BlogService service = new BlogService();

    @Test
    public void addEntry() {
        Entry entry = new Entry(&quot;title&quot;, &quot;text&quot;);

        service.addEntry(entry);

        verify(entityManager).persist(entry);
    }
}
</pre>

	Tags: <a href="http://cygni.se/taggar/di/" title="di" rel="tag">di</a>, <a href="http://cygni.se/taggar/ioc/" title="ioc" rel="tag">ioc</a>, <a href="http://cygni.se/taggar/java/" title="java" rel="tag">java</a>, <a href="http://cygni.se/taggar/java-ee/" title="java ee" rel="tag">java ee</a>, <a href="http://cygni.se/taggar/junit/" title="junit" rel="tag">junit</a>, <a href="http://cygni.se/taggar/mock-objects/" title="mock objects" rel="tag">mock objects</a>, <a href="http://cygni.se/taggar/mockito/" title="mockito" rel="tag">mockito</a>, <a href="http://cygni.se/taggar/spring/" title="spring" rel="tag">spring</a>, <a href="http://cygni.se/taggar/tdd/" title="tdd" rel="tag">tdd</a><br />
]]></content:encoded>
			<wfw:commentRss>http://cygni.se/2012/01/11/mockning-injectmocks-med-mockito/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cygni tecknar ramavtal med Sveriges Television</title>
		<link>http://cygni.se/2011/12/21/cygni-tecknar-ramavtal-med-sveriges-television/</link>
		<comments>http://cygni.se/2011/12/21/cygni-tecknar-ramavtal-med-sveriges-television/#comments</comments>
		<pubDate>Wed, 21 Dec 2011 09:39:43 +0000</pubDate>
		<dc:creator>Jon Persson</dc:creator>
				<category><![CDATA[Pressmeddelanden]]></category>
		<category><![CDATA[agil]]></category>
		<category><![CDATA[cygni]]></category>
		<category><![CDATA[expertis]]></category>
		<category><![CDATA[ledande]]></category>
		<category><![CDATA[ramavtal]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[systemutveckling]]></category>
		<category><![CDATA[teknik]]></category>

		<guid isPermaLink="false">http://cygni.se/?p=3903</guid>
		<description><![CDATA[IT-konsultbolaget Cygni har tecknat ett ramavtal med Sveriges Television. Även Sveriges Utbildningsradio och det samägda Sveriges Radios Förvaltning äger rätt att avropa på detta avtal. Cygni deltog i upphandlingen i kategorierna Systemarkitektur, Systemutveckling och Webbutveckling och blev enda leverantör att erhålla ramavtal i samtliga tre kategorier. Det är främst ett par enheter på Sveriges Television ...]]></description>
			<content:encoded><![CDATA[<p>IT-konsultbolaget Cygni har tecknat ett ramavtal med Sveriges Television. Även Sveriges Utbildningsradio och det samägda Sveriges Radios Förvaltning äger rätt att avropa på detta avtal. Cygni deltog i upphandlingen i kategorierna Systemarkitektur, Systemutveckling och Webbutveckling och blev enda leverantör att erhålla ramavtal i samtliga tre kategorier.</p>
<p>Det är främst ett par enheter på Sveriges Television som har det största konsultbehovet framöver – ’SVT Teknik och Utveckling’ och ’SVT Interaktiv’. Inom ’SVT Teknik och Utveckling’ är det i huvudsak webbapplikationer och integrationer mellan system för broadcast och administrativa system som skall utvecklas. ’SVT Interaktiv’ utvecklar och samordnar utbudet av interaktiva tjänster mot publiken.</p>
<p><em>”Sättet som vi konsumerar TV på är i snabb förändring med mobila plattformar, interaktivitet och ett icke-linjärt utbud. Sveriges Television leder denna utveckling på många fronter. Att Cygni nu får möjlighet att delta i det arbetet är väldigt stimulerande, både för oss som företag och för våra konsulter” </em>säger Jon Persson, VD på Cygni.</p>
<p>Cygni är ett IT-konsultbolag som erbjuder expertis inom agil systemutveckling på moderna plattformar. Under de senaste 5 åren har Cygni framgångsrikt levererat systemarkitekter, Scrum Masters, backendutvecklare och frontendutvecklare till flera av Sveriges ledande mediabolag.</p>
<p><em>”Detta ramavtal ger Cygni möjlighet att leverera avancerade konsulttjänster till några av Sveriges mest spännande utvecklingsorganisationer. Vi är mycket stolta och glada över det förtroende som Sveriges Television gett oss.” </em>avslutar Jon Persson.</p>

	Tags: <a href="http://cygni.se/taggar/agil/" title="agil" rel="tag">agil</a>, <a href="http://cygni.se/taggar/cygni/" title="cygni" rel="tag">cygni</a>, <a href="http://cygni.se/taggar/expertis/" title="expertis" rel="tag">expertis</a>, <a href="http://cygni.se/taggar/ledande/" title="ledande" rel="tag">ledande</a>, <a href="http://cygni.se/taggar/ramavtal/" title="ramavtal" rel="tag">ramavtal</a>, <a href="http://cygni.se/taggar/scrum/" title="scrum" rel="tag">scrum</a>, <a href="http://cygni.se/taggar/systemutveckling/" title="systemutveckling" rel="tag">systemutveckling</a>, <a href="http://cygni.se/taggar/teknik/" title="teknik" rel="tag">teknik</a><br />
]]></content:encoded>
			<wfw:commentRss>http://cygni.se/2011/12/21/cygni-tecknar-ramavtal-med-sveriges-television/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java EE 6 med Spring MVC</title>
		<link>http://cygni.se/2011/12/19/java-ee-6-med-spring-mvc/</link>
		<comments>http://cygni.se/2011/12/19/java-ee-6-med-spring-mvc/#comments</comments>
		<pubDate>Mon, 19 Dec 2011 08:13:19 +0000</pubDate>
		<dc:creator>Leo Wentzel</dc:creator>
				<category><![CDATA[Stacktrace]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[java ee]]></category>
		<category><![CDATA[java ee 6]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[spring mvc]]></category>

		<guid isPermaLink="false">http://cygni.se/?p=3784</guid>
		<description><![CDATA[Nyligen läste jag ett intressant blogginlägg där Spring jämfördes med Java EE 6. Författaren drar slutsatsen att det numera är minst lika enkelt att utveckla en applikation för Java EE-plattformen som för Spring. Då Spring, Spring MVC inkluderat, är väldigt populärt blev jag nyfiken på hur detta kan integreras med Java EE för att lättare ...]]></description>
			<content:encoded><![CDATA[<p>Nyligen läste jag ett intressant <a href="http://www.javacodegeeks.com/2011/11/from-spring-to-java-ee-6.html" title="Bloggartikel om Java EE 6" target="_blank">blogginlägg</a> där <a href="http://www.springsource.org/" title="Spring" target="_blank">Spring</a> jämfördes med Java EE 6. Författaren drar slutsatsen att det numera är minst lika enkelt att utveckla en applikation för Java EE-plattformen som för Spring. Då Spring, Spring MVC inkluderat, är väldigt populärt blev jag nyfiken på hur detta kan integreras med Java EE för att lättare dra nytta av allt som en Java EE-container kan erbjuda. Det visade sig att detta var förbluffande enkelt, till exempel går det utan ytterligare Spring-konfiguration direkt injicera en <em>Session Bean</em> i en Spring-controller.</p>
<pre class="brush: java; title: ;">
@Controller
public class MyController {

    @EJB(mappedName=&quot;java:module/MyService&quot;)
    private MyService myService;

    @RequestMapping(value = &quot;/&quot;, method = RequestMethod.GET)
    public String home(Model model) {
        model.addAttribute(&quot;message&quot;, myService.getMessage());
        return &quot;home&quot;;
    }
}
</pre>
<p>Nyckeln till att injektionen med <em>@EJB</em>-annotation fungerar, i exemplet ovan, är att <em>mappedName</em> används. Spring utför då en JNDI-lookup på det angivna JNDI-namnet. Eftersom JNDI har standardiserats i Java EE 6 är dessutom namnen portabla mellan applikationsservrar. Stödet för Java EE 6 kommer säkerligen förbättras i framtida versioner av Spring så det finns bra defaults för ejb-lookups med JNDI.</p>
<p>En annan spännande detalj med detta exempel är att <em>MyService</em> inte behöver vara ett interface eftersom Java EE 6 inte kräver detta för lokala session beans. Dessutom kan session beans paketeras tillsammans med resten av webbapplikationen i war-arkivet. D.v.s. det behövs ingen ejb-jar och inget EAR-arkiv. </p>
<p>Läs hela artikeln på <a href="http://www.javacodegeeks.com/2011/11/from-spring-to-java-ee-6.html" target="_blank" title="Java Code Geeks">Java Code Geeks</a>.</p>

	Tags: <a href="http://cygni.se/taggar/java/" title="java" rel="tag">java</a>, <a href="http://cygni.se/taggar/java-ee/" title="java ee" rel="tag">java ee</a>, <a href="http://cygni.se/taggar/java-ee-6/" title="java ee 6" rel="tag">java ee 6</a>, <a href="http://cygni.se/taggar/spring/" title="spring" rel="tag">spring</a>, <a href="http://cygni.se/taggar/spring-mvc/" title="spring mvc" rel="tag">spring mvc</a><br />
]]></content:encoded>
			<wfw:commentRss>http://cygni.se/2011/12/19/java-ee-6-med-spring-mvc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cygni stödjer BRIS</title>
		<link>http://cygni.se/2011/12/16/cygni-stodjer-bris/</link>
		<comments>http://cygni.se/2011/12/16/cygni-stodjer-bris/#comments</comments>
		<pubDate>Fri, 16 Dec 2011 10:18:52 +0000</pubDate>
		<dc:creator>Jon Persson</dc:creator>
				<category><![CDATA[Cygnibloggen]]></category>
		<category><![CDATA[cygni]]></category>

		<guid isPermaLink="false">http://cygni.se/?p=3886</guid>
		<description><![CDATA[Istället för att köpa julklappar till alla som arbetar på Cygni brukar vi skänka pengar till något välgörande ändamål. I år har vi beslutat att stödja BRIS, Barnens rätt i samhället, i deras arbete att hjälpa utsatta barn. Cygni kommer därför under 2012 att vara ett så kallat BRIS Guldföretag. Tags: cygni]]></description>
			<content:encoded><![CDATA[<p><img src="http://cygni.se/wp-uploads/2011/12/BRIS_Banner2012_200x68.gif" alt="BRIS" title="BRIS_Banner2012_200x68" width="200" height="68" class="alignright size-full wp-image-3890" />Istället för att köpa julklappar till alla som arbetar på Cygni brukar vi skänka pengar till något välgörande ändamål. I år har vi beslutat att stödja <a title="BRIS" href="http://bris.se">BRIS</a>, Barnens rätt i samhället, i deras arbete att hjälpa utsatta barn. Cygni kommer därför under 2012 att vara ett så kallat <a title="Guldföretag" href="http://www.brisstodforetag.se/showcase/showcaseguld.html">BRIS Guldföretag</a>.</p>

	Tags: <a href="http://cygni.se/taggar/cygni/" title="cygni" rel="tag">cygni</a><br />
]]></content:encoded>
			<wfw:commentRss>http://cygni.se/2011/12/16/cygni-stodjer-bris/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Best of Eclipse &#8211; Godbitar, kortkommandon mm</title>
		<link>http://cygni.se/2011/12/15/best-of-eclipse-godbitar-kortkommandon-mm/</link>
		<comments>http://cygni.se/2011/12/15/best-of-eclipse-godbitar-kortkommandon-mm/#comments</comments>
		<pubDate>Thu, 15 Dec 2011 09:25:07 +0000</pubDate>
		<dc:creator>Tommy Wassgren</dc:creator>
				<category><![CDATA[Stacktrace]]></category>
		<category><![CDATA[artiklar]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[stacktrace]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://cygni.se/?p=3644</guid>
		<description><![CDATA[Det finns mängder av artiklar här på Stacktrace som handlar om Eclipse. Jag tänkte samla ihop några godbitar som fortfarande känns relevanta. Roberts inlägg om kortkommandon och handgrepp är alltid högaktuellt. Inlägget visar bland annat på smarta kommandon för navigering och refactoring. Save Actions är ett ovärderligt verktyg om du vill hålla ordning och reda ...]]></description>
			<content:encoded><![CDATA[<p>Det finns mängder av artiklar här på Stacktrace som handlar om Eclipse. Jag tänkte samla ihop några godbitar som fortfarande känns relevanta.</p>
<ul>
<li>Roberts <a href="http://cygni.se/2007/11/27/eclipse-tips-och-tricks/" title="Eclipse Tips och Tricks">inlägg om kortkommandon och handgrepp</a> är alltid högaktuellt. Inlägget visar bland annat på smarta kommandon för navigering och refactoring.</li>
<li><a href="http://cygni.se/2009/10/07/save-actions-i-eclipse/" title="Eclipse Save Actions">Save Actions</a> är ett ovärderligt verktyg om du vill hålla ordning och reda i koden.</li>
<li><a href="http://cygni.se/2007/12/04/breakpoints-i-eclipse/" title="Conditional Breakpoints">Conditional Breakpoints och Exception Breakpoints</a> kan vara välbehövligt i vissa debugsituationer.</li>
</ul>
<p>Kolla även in en rad tips på olika <a href="http://cygni.se/?s=eclipse" title="Eclipse">smarta plugins, hur man remote-debuggar osv</a>.</p>

	Tags: <a href="http://cygni.se/taggar/artiklar/" title="artiklar" rel="tag">artiklar</a>, <a href="http://cygni.se/taggar/eclipse/" title="eclipse" rel="tag">eclipse</a>, <a href="http://cygni.se/taggar/stacktrace-2/" title="stacktrace" rel="tag">stacktrace</a>, <a href="http://cygni.se/taggar/tips/" title="tips" rel="tag">tips</a><br />
]]></content:encoded>
			<wfw:commentRss>http://cygni.se/2011/12/15/best-of-eclipse-godbitar-kortkommandon-mm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java Bean Validation</title>
		<link>http://cygni.se/2011/11/28/java-bean-validation/</link>
		<comments>http://cygni.se/2011/11/28/java-bean-validation/#comments</comments>
		<pubDate>Mon, 28 Nov 2011 09:01:57 +0000</pubDate>
		<dc:creator>Leo Wentzel</dc:creator>
				<category><![CDATA[Stacktrace]]></category>
		<category><![CDATA[bean validation]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jpa]]></category>
		<category><![CDATA[jsf]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://cygni.se/?p=3449</guid>
		<description><![CDATA[Java Bean Validation (JSR 303) definierar en meta-data-modell och ett API för validering av klasser. Implementationer av denna specifikation gör det möjligt att definiera och utföra validering med hjälp av annotationer eller xml. Exemplet nedan illusterar detta för ett användarnamn: @NotNull @Size(min = 5, max = 20) @Pattern(regexp = &#34;[a-zA-Z0-9\\._-]+&#34;) private String userName; Bean Validation ...]]></description>
			<content:encoded><![CDATA[<p><strong>Java Bean Validation</strong> (<a title="JSR 303" href="http://jcp.org/en/jsr/detail?id=303" target="_blank">JSR 303</a>) definierar en meta-data-modell och ett API för validering av klasser. Implementationer av denna specifikation gör det möjligt att definiera och utföra validering med hjälp av annotationer eller xml. Exemplet nedan illusterar detta för ett användarnamn:</p>
<pre class="brush: java; title: ;">
@NotNull
@Size(min = 5, max = 20)
@Pattern(regexp = &quot;[a-zA-Z0-9\\._-]+&quot;)
private String userName;
</pre>
<p>Bean Validation är inte knutet till något speciellt ramverk eller lager. Det finns däremot bra stöd för Bean Validation i flertalet populära ramverk, såsom Hibernate och JSF 2. Dessutom är det enkelt att utföra validering via API:t:</p>
<pre class="brush: java; title: ;">
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
...
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set&lt;ConstraintViolation&lt;Customer&gt;&gt; constraintViolations = validator.validate(customer);
</pre>
<p>För att komma igång med ett Bean Validation (<a href="http://www.hibernate.org/subprojects/validator.html">Hibernate Validator 4.x</a> är referensimplementationen) i ett Maven-projekt lägg till följande beroenden i din pom:</p>
<pre class="brush: xml; title: ;">
&lt;dependency&gt;
 &lt;groupId&gt;org.hibernate&lt;/groupId&gt;
 &lt;artifactId&gt;hibernate-validator&lt;/artifactId&gt;
 &lt;version&gt;4.2.0.Final&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
 &lt;groupId&gt;org.slf4j&lt;/groupId&gt;
 &lt;artifactId&gt;slf4j-jdk14&lt;/artifactId&gt;
 &lt;version&gt;1.6.1&lt;/version&gt;
&lt;/dependency&gt;
</pre>
<p>Används Hibernate eller JSF 2 räcker det oftast med att lägga till ovanstående beroenden så länge de finns tillgängliga i applikationens class path. Används JSF 2 går det till exempel att aktivera validering för ett inmatningsfält på följande sätt:</p>
<pre class="brush: xml; title: ;">
&lt;h:inputText value=&quot;#{customer.age}&quot;&gt;
  &lt;f:validateBean/&gt;
&lt;/h:inputText&gt;
</pre>
<p>Bean validation stödjer dessutom validering av grupper som gör det möjligt att validera olika aspekter av ett objekt:</p>
<pre class="brush: java; title: ;">
@Min(value=15, groups=AgeCheck.class)
private int age;
</pre>

	Tags: <a href="http://cygni.se/taggar/bean-validation/" title="bean validation" rel="tag">bean validation</a>, <a href="http://cygni.se/taggar/hibernate/" title="hibernate" rel="tag">hibernate</a>, <a href="http://cygni.se/taggar/java/" title="java" rel="tag">java</a>, <a href="http://cygni.se/taggar/jpa/" title="jpa" rel="tag">jpa</a>, <a href="http://cygni.se/taggar/jsf/" title="jsf" rel="tag">jsf</a>, <a href="http://cygni.se/taggar/spring/" title="spring" rel="tag">spring</a><br />
]]></content:encoded>
			<wfw:commentRss>http://cygni.se/2011/11/28/java-bean-validation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rebecka intervjuas på CAPs hemsida</title>
		<link>http://cygni.se/2011/11/18/rebecka-intervjuas-pa-caps-hemsida/</link>
		<comments>http://cygni.se/2011/11/18/rebecka-intervjuas-pa-caps-hemsida/#comments</comments>
		<pubDate>Fri, 18 Nov 2011 14:43:33 +0000</pubDate>
		<dc:creator>Jon Persson</dc:creator>
				<category><![CDATA[Cygnibloggen]]></category>
		<category><![CDATA[agil]]></category>
		<category><![CDATA[intervju]]></category>
		<category><![CDATA[konsult]]></category>
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://cygni.se/?p=3772</guid>
		<description><![CDATA[Cygnis konsult Rebecka Wedlund uttalar sig om Scrum hos föreningen Certifierad Agil Projektledare! Tags: agil, intervju, konsult, scrum]]></description>
			<content:encoded><![CDATA[<p>Cygnis konsult Rebecka Wedlund <a href="http://www.agileleadership.se/2011/11/17/intervju-scrum-enligt-rebecka-wedlund-javakonsult-hos-cygni/" target="_blank">uttalar sig</a> om Scrum hos föreningen <a href="http://www.agileleadership.se/" target="_blank">Certifierad Agil Projektledare</a>!</p>

	Tags: <a href="http://cygni.se/taggar/agil/" title="agil" rel="tag">agil</a>, <a href="http://cygni.se/taggar/intervju/" title="intervju" rel="tag">intervju</a>, <a href="http://cygni.se/taggar/konsult/" title="konsult" rel="tag">konsult</a>, <a href="http://cygni.se/taggar/scrum/" title="scrum" rel="tag">scrum</a><br />
]]></content:encoded>
			<wfw:commentRss>http://cygni.se/2011/11/18/rebecka-intervjuas-pa-caps-hemsida/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

