Archive

Posts Tagged ‘java’

Build.version

August 8th, 2010

Med hjälp av MANIFEST

<build><plugins><plugin>
				<groupid>org.codehaus.mojo</groupid>
				<artifactid>maven-buildnumber-plugin</artifactid>
				<version>0.9.6</version>
				<executions>
					<execution>
						<phase>validate</phase>
						<goals>
							<goal>create</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
</plugins></build>

Denna plugin kräver att man satt upp SCM ordentligt så att versionnummer kan hämtas därifrån!

<build><plugins><plugin>
				<groupid>org.apache.maven.plugins</groupid>
				<artifactid>maven-war-plugin</artifactid>
				<version>2.0</version>
				<configuration>
					<archive>
						<manifestentries>
							<implementation -Build>${buildNumber}</implementation>
						</manifestentries>
					</archive>
				</configuration>
			</plugin>
</plugins></build>
	private String readBuildNumber(ServletContext servletContext) {
		try {
			URL resource = servletContext.getResource("/META-INF/MANIFEST.MF");
			InputStream manifestStream = resource.openStream();
			Manifest mf = new Manifest(manifestStream);
			Attributes atts = mf.getMainAttributes();
			String value = atts.getValue("Implementation-Build");
			if (value == null) {
				throw new IllegalArgumentException("Implementation-Build attribute is not set in MANIFEST " + resource.toExternalForm());
			}
			manifestStream.close();
			return value;
		} catch (Exception e) {
			throw new IllegalStateException("Failed to read Implementation-Build attribute from MANIFEST.MF");
		}
	}

Eller som vanlig resource (properties)

<build>
		<resources>
			<resource>
				<directory>src/main/resources</directory>
				<filtering>true</filtering>
			</resource>
		</resources>
</build>

Fredrik Wendt Uncategorized ,

assertThat(Hamcrest).looksNice();

August 2nd, 2010

I väntan på David Saff’s alternative assertThat(x).y() så nöjer jag mig med:

public class EmptyMatcher extends TypeSafeMatcher&lt;Collection < ?>> {
 
    @Override
    public boolean matchesSafely(Collection< ?> c) {
        return c.isEmpty();
    }
 
    public void describeTo(Description desc) {
        desc.appendText("empty");
    }
 
    @Factory
    public static lt;T> Matcher< ? super Collection<?>> isEmpty() {
        return new EmptyMatcher();
    }
}

som gör att man kan skriva trevlig enkelt läsbar kod, t ex:

@Test
public void filteringAnEmptyListReturnsAnEmptyList() {
    List anEmptyList = new ArrayList();
    List result = testee.filter(emptyList());
    assertThat(result, isEmpty());
    // men helst: assertThat(result).isEmpty();
}

Fredrik Wendt Uncategorized, jsolutions , , , , , ,

Javautvecklare sökes

April 9th, 2010

Jag jobbar på Iptor Konsult AB och mer specifikt på avdelningen som går under namnet JavaSolutions. Jag trivs väldigt bra och bytte till denna arbetsgivare bara pga dess “interna politik”: lågt i tak, platt organisation, många teamaktiviteter samt kompetenta medarbetare som ger mig bra med- och mothugg i diskussioner av alla dess slag.

Vi söker fler personer som kan berika vår trupp och annonser på nätet på olika platser och jag tänkte föreviga den beskrivning som oftast kan ses, mest för att det kan vara kul att se tillbaka på om 15-20 år.

I huvudsak är beskrivningen bra: jag hade hoppat bindestrecken efter Java, flyttat Webservices från rubriken “webb” och ev lagt till något om lättviktig/rörlig/agil utvecklingsmetodik.

Skulle du som läser detta (mot förmodan - det här är mina anteckningar!) bli intresserad går det bra att höra av dig till mig eller Tomas Trolltoft t ex via mail.


Erfarna javautvecklare till Iptor

Presentation
Iptor expanderar och behöver utöka sitt team av Java-specialister. Därför söker vi dig med stor erfarenhet av Java-utveckling.

Arbetsuppgifter
Dina arbetsuppgifter anpassas efter dina egna erfarenheter.

Iptor tillhandahåller tjänster som:

- systemutveckling och arkitektur
- uppbyggnad av kundens utvecklingsmiljö
- teknisk konsultation, till exempel vid val av utvecklingsplattform
- granskning av system- och kodstruktur
- optimering av befintlig kod
- optimering av kunds utvecklingscykel
- mentorskap
- utbildning.

Utbildning/erfarenhet
För att passa in i teamet måste du brinna för Java och de möjligheter det skapar, samt ha förmåga att vidareförmedla dina kunskaper. Vanliga forum för detta är olika typer av utbildningar hos kunder.

Vi tror att du har en högskoleexamen och minst 5 års erfarenhet som Java-utvecklare. Du är van vid konsultrollen och har tidigare arbetat med några av nedanstående tekniker:

- JSE, JEE, JME
- applikationsservrar: JBoss, Glassfish, Weblogic, WebSphere m.fl.
- ramverk: JPA, Hibernate, Spring m.fl.
- utvecklingsverktyg: Eclipse, Ant, Maven m.fl.
- meddelandehantering
- webb: HTML, XML, JSP, WebServices m.fl.
- OS: Linux, Windows, Unix, iSeries m.fl.
- databaser: Oracle, DB2, MySQL, MS SQLServer.

Har du arbetat med JSF, SEAM eller testdriven utveckling är det meriterande.

Du är engagerad till din natur. Du brinner för kundnyttan i dina projekt och du har förståelse för hur man vidareutvecklar en affär.

Företagspresentation
Iptor är ett svenskt IT-konsultbolag inom IBS koncernen, med kontor i Göteborg, Stockholm och Malmö.

Sedan våren 2006 är vi till exempel arrangör av Javaforum i Göteborg, ett förtroende vi fått från SUN Microsystems där vi åtar oss att hålla kontinuerliga Javaforum med intressant innehåll. Via vår Javaportal www.JSolutions.se presenterar vi artiklar, nyheter och tankar kring systemutveckling med Java.

Vår specialitet är systemutveckling och systemintegration med Java. Vi har haft majoriteten av våra uppdrag hos större företag där vi levererat både rena produktionsplattformar, affärsstöd samt integrationslösningar. Flertalet av våra konsulter har arbetat med realtidsapplikationer där kraven på prestanda och svarstider är mycket viktiga. Vi har jobbat med de flesta hårdvaru- och mjukvaruplattformar som IBM, BEA, Oracle, Microsoft, SUN, Linux m.fl. Vi vågar säga att vi är i framkanten på Javautvecklingen i Sverige.

Fredrik Wendt jsolutions ,

Utvecklingsstack - för Java

October 25th, 2009

Jag har funderat lite på vilken stack jag föredrar och nu såhär sent på kvällen skriver jag ihop:

  • JIRA
  • DokuWiki
  • Hudson
  • Sonar
  • Nexus / Archiva
  • Git

Egentligen behövs två kategorier: en fri (gratis) och en betalvariant. Tanken väcktes av att jag såg Markus M. May paketera sin favoritstack för ArchLinux (tidigare Ubuntu, men gav upp detta). Det händer ju ett par gånger om året att just detta behöver sättas upp för ett projekt - att ha en färdig “blob” att bara slänga igång hade ju inte varit fel. Kanske en Xen image (Gandi hosting om man inte vill köra AMI/Amazon) eller bara en stor zip klar att sparkas igång med ett bash-script, …

Projekt- och ärendehantering

JIRA - en klassiker som fungerar även i större sammanhang. Kan knytas in till confluence. Projekt, komponenter, milstolpar, olika flöden, watchers, voters, rapporter, ärende-relationer, … Icke-gratis och icke-fri.

Mingle är en vacker produkt som jag inte är övertygad vara värd sin kostnad. Mest web 2.0-ig av alla och mest planeringsvänlig (dra-och-släpp med bäst översikt av tillgängligt material). Icke-gratis och icke-fri.

VersionOne - otestad.

BugZilla - klassiker som är för enkel för min smak.

RedMine - tyvärr otestad ruby-historia som ser kompetent ut på pappret. Verkar sakna ärende-relationer såsom liknar, ersätter, beror på, …

Trac - ärendehanteringen i trac är kass och för enkel.

Wiki

DokuWiki - enklast, snabbast, smidigast, rättframmast. Gör jobbet och det är trevligt att jobba med.

Trac - wikin i Trac fungerar ok. Trevligt när man kan länka till kod så lätt.

MediaWiki - no no.

Confluence - hat-kärlek. Ingen redigering av stycken, editorn buggig och saknar en hel del av TinyMCE:s “kraft”.

Källkodrepositorie

Git - har inte varit fri från strul, och strulet har inte varit helt idiotsäkert att fixa till. Men distribuerat, snabbt och enkelt att komma igång.

Mercurial (hg) - otestat, skall kunna mäta sig med git och till och med vara “finare” i vissa avseenden, t ex hur lång livslängden på en branch är.

SVN, CVS - klassiker som trots allt fungerar ganska långt för mindre team.

Mavenbibliotek

Archiva - trotjänare som trots allt fungerat stabilt under långa perioder. En aning gammalmodig med lösenordspenalism t ex.

Nexus - otestad, men vacker i publika installationer och på pappret. Mindre minnesavtryck (memory footprint) är ju inte fel.

Bygg- och CI-motor

Hudson - en klar favorit.

Continuum, Cruise Control - är lite samma sak för mig: en hög XML och inget som inte Hudson har. (Var länge sedan jag körde dessa dock.)

Övriga verktyg

Sonar - alla rapporter som kan genereras automatiskt bör genereras. När man får upp farten gäller det att hålla kurs så man inte hamnar i dolda teknisk skuld-fällor.

Fredrik Wendt Uncategorized , , , , ,

Protected: WebServices, overview and intro

September 16th, 2009
Enter your password to view comments

This post is password protected. To view it please enter your password below:


Fredrik Wendt Uncategorized , , , , , , , , ,

En presentation om testning och Java

September 14th, 2009
Det här är ett material jag kommer utgå från (det är inte komplett, vissa saker är kanske inte hundra och det är tre år gammalt) när jag kör crash course i enhetstestning på torsdag.
View more presentations from David Noble.

Fredrik Wendt Uncategorized , , ,

Eclipse workshop-anteckningar

September 2nd, 2009

Hade en liten workshop om Eclipse och detta var anteckningarna jag utgick från (och 2010-04-13 höll jag en till, och uppdaterade sedan listan).

Eclipse GUI

* Workbench, Workspace, Sets, Project, Project linking/dependencies
* Package explorer - flat vs hierarchic layout
* View - SA+Q, Window > Show View, Detached view
* Perspective: C+F8, Window > Customize Perspective
* Flera fönster / workspaces

Project

* .classpath, .project
* Attach javadoc
* Attach source
* maven eclipse:eclipse -DdownloadSources=true -DdownloadJavadoc=true

Editor

* F3 F2 (source, javadoc)
* F12
* C+M
* Link with editor
* Templates - sysout > System.out.println()
* show line numbers, show print margin vs C+L
* CS+O C+mellanslag SA+D SA+X CS+F
* New Editor [editor1|edtior2]
* SA+R
* CS+G - FilterBidResult.MATCH
* C+E, C+F6 CS+F6
* bind:a om tangenter till Ctrl+Tab - Window > Prefs > General > Keys
* Alt-<, Alt->
* Alt-v, Alt-^
* CS+T ype
* CS+R esource
* Mark occurance / highlight SA+O - visas i listen till höger om rullningslist
* Team compare, local history

Ctrl+1

* Visa: ta bort TripAction convertToProperFormat
return null;
return result; C+1
* Visa:
obj.method(); C+1
x = obj.method(); C+1
String x = obj.method(); C+1

Debug

* Breakpoints med krav
* CS+B
* F5 step into, F6 step over, F7 step out, F8 run
* C+3 Rerun
* Break på Exception, t ex AssertionError, NullPointerException

Remote Debugging

* -Xdebug –Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=1234
* t ex
** websphere
http://pa-blogger.blogspot.com/2008/08/debugging-websphere-with-eclipse.html
** JBoss
** externa applikationer? mvn jetty:run

CVS

* Team compare (se allt som hänt mellan olika datum)
* Flytta root/server

History

* local vs remote
* eclipse -clean

XML Schema

* XML Catalog - installera schema för att få content assist
* Generate XML file - få exempelfil utifrån schema
* Namespaces?

Views

* Problems

** Quick fix

* Tasks

** FIXME, TODO

* Search

** next match/annotation (C+, C+.)
** history

* Servers

** Configuration

* Console

** follow output

Lite andra saker

* Aptana - för JavaScript-redigering (egentligen dynamiska språk)
* MyEclipse - plugins för koppling till BugZilla/JIRA

Fredrik Wendt jsolutions , , ,

Hur går bygget?

July 10th, 2009
I-Buddy

I-Buddy

Låt en kompis berätta, en I-Buddy. Med lite python har andra lyckats hacka ihop lite enkel styrning. Finns även javalib för samma sak. Bara att sätta ihop när tid finns.

Fredrik Wendt Uncategorized , , ,