donderdag 15 juli 2010

Code highlighting in Blogger

Het heeft even geduurd maar eindelijk heb ik code highlighting in blogger voor elkaar. Wat heb ik gedaan? Ga in de instellingen naar het HTML sjabloon van je blog. Voeg voor de <l/head> tag de volgende code toe:
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shCore.css' rel='stylesheet' type='text/css'/> 
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css' rel='stylesheet' type='text/css'/> 
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js' type='text/javascript'/> 
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shAutoloader.js' type='text/javascript'/> 
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js' type='text/javascript'/> 
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js' type='text/javascript'/> 
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js' type='text/javascript'/> 
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js' type='text/javascript'/> 

Merk op de er script geladen worden van iemand anders zijn pagina. De maker raadt aan om de scripts zelf te hosten.

Voeg vervolgens achter de </body> tag de volgende code toe:
<script>
  SyntaxHighlighter.config.bloggerMode = true; 
  SyntaxHighlighter.all();
</script>

Je kunt nu java code higlighten met:
<pre class="brush: java">code</pre>

woensdag 7 juli 2010

Minimale afhankelijkheden van Hibernate

Het is even geleden dat ik hier iets geschreven heb. Dat heeft twee redenen. Ten eerste heb ik de studiedag meerdere keren gebruikt om de drukte van het werk op te vangen. Daarnaast waren de dingen die ik gedaan heb, niet echt spectaculair: een Java boek uitlezen, spelen met HTML5, CSS3, Geolocation en JavaScript, Internationalisation van UIBInder in GWT en een chrome extensie bouwen. Dat werd allemaal zo goed uitgelegd dat ik weinig kon toevoegen aan de link waar het al perfect uitgelegd stond.

Vandaag was ik aan het spelen met Hibernate aan de hand van een tutorial. Hibernate is een OR-Mapper. Dat wil zeggen dat je objecten in je programma om kunt zetten naar tabel records in je database naar keuze. Als de mapping van de velden eenmaal bekend is, kun je de objecten eenvoudig ophalen zonder complexe queries te hoeven schrijven. Een nadeel is wel dat Hibernate een leercurve heeft vanwege de vele opties die de gebruiker heeft.

Wat mij opviel aan de tutorial was het grote aantal jar-files in het classpath van het voorbeeld. Een goede dertig zouden er nodig zijn voor een "Hello World" voorbeeld. Dat leek me wat overdreven. Zelfs de Google resultaten leken me nog wat uitgebreid dus ik ben met de trial and error methode gaan zoeken naar welke jar files je nu echt nodig hebt voor stap 1 van die tutorial (die het overigens zelfs inclusief alle jars bij mij niet deed zonder wat code aan te passen).

Hieronder de lijst met jars die je absoluut nodig hebt om het voorbeeld met hulp van MySQL te draaien:
  • hibernate3.jar (uiteraard)
  • mysql-connector-java-3.0.16-ga-bin.jar (alleen als je MySQL gebruikt)
  • log4j-1.2.9.jar (voor de logging, maar je kunt ook een andere logger gebruiken)
  • commons-collections-2.1.1.jar (wat collections spul dat niet standaard in Java zit)
  • commons-logging-1.0.4.jar (wat logging spul dat log4j nodig heeft)
  • dom4j-1.5.2.jar (om xml bestanden te interpreteren)
  • cglib-full-2.0.2.jar (doet iets voor hibernate maar het is me niet duidelijk wat)
  • ehcache-1.1.jar (geen idee wat het doet)
  • jta.jar (wordt gebruikt voor transacties)

De andere 20 jars heb je dus voor een simpel voorbeeld helemaal niet nodig. Hier kun je bovenstaande bestanden downloaden.

Zoals ik al zei heb ik het voorbeeld aan moeten passen om het te laten werken. Er is een transactie toegevoegd. Hieronder de code:
public class FirstExample {
 public static void main(String[] args) {
  SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
  Session session = sessionFactory.openSession();
  Transaction transaction = session.beginTransaction();
  
  try{
   Contact contact = new Contact();
   contact.setId(2);
   contact.setFirstName("Gerben");
   contact.setLastName("Kegel");
   contact.setEmail("gerben@bastarddomain.com");
   session.save(contact);
   transaction.commit();
  }catch(HibernateException e){
   transaction.rollback();
   System.out.println(e.getMessage());
  }finally{
   session.close();
  }
 }
}