Langage Scala [3ème partie]

Nous avons vu dans la seconde partie quelque concepts de scala qui vous ont donné l'envie de poursuivre la découverte de scala.
L'apprentissage de scala nous donne l'opportunité de redécouvrir ce que nous connaissons au quotidien: le monde java/j2ee.
Et nous encourage aussi à porter un regard critique sur le code que nous produisons.

Ce qui est sûr est que la liste des grands clients séduits par scala s'allonge: Sony, SAP, Siemens, EDF,...

Nous avons évoqué le concept "tout est fonction" dans scala, plus précisément, une fonction est un objet avec la méthode "apply".

Le plan de cette 3ème partie est comme suit:

-  Connexion JDBC,
-  Retour sur les constructeurs et les annotations

Avec ces annotations, c'est fini la galère des getters/setters (même s'ils sont générés par EDI).

Les démos sont testés avec eclipse sous windows.

Démo 1 JDBC

Le code suivant, déjà présenté dans la seconde partie, est remanié et complété avec try-finally afin de libérer les ressources jdbc.
L'url pointe sur une base informix, vous pouvez l'adapter à votre base, mysql ou toute autre base fera l'affaire.
Les éléments en majuscule dans l'url doivent être vérifiés.
Enfin, n'hésitez pas à réécrire la requête SQL simplement avec le nom correct de votre table.


package fr.netapsys.blog.jdbc
import java.sql._
object MainJdbc extends App {
	@throws(classOf[SQLException])
	def connect:Connection ={
		classOf[com.informix.jdbc.IfxDriver].newInstance
		DriverManager.getConnection(
                    "jdbc:informix-sqli://localhost:PORT/BD:informixserver=SERVER", 
                    "informix", "administrateur")
	}
        // la fonction connect affecté à l'attribut con
	var con=connect
	var rs:ResultSet=null
	var stm:Statement=null
	try{ 
		stm= con.createStatement
		rs=stm.executeQuery ("select count(*) nb from agent")
		if(rs.next) 
		 Console.println("Nb agents="+rs.getInt("nb"))
	}finally{
		if(null!=rs)rs.close
		if(null!=stm)stm.close
		if(null!=con)con.close
	}		  
}

Vous notez bien qu'une fonction nommée "connect" est affectée à une variable nommée "con".
Une fonction dans scala est un objet tout simplement. Nous illustrons ce point intéressant ci-après.
En attendant, vous constatez que MainJdbc est un object qui ne définit pas de méthode "main".
C'est la seconde façon de définir une classe "main".

Je reviendrai aussi sur les annotations afin d'en rajouter d'autres.

Démo 2 Les constructeurs et les annotations

L'exemple suivant illustre la déclaration d'un constructeur principal et avec l'annotation @BeanProperty du package scala.reflect, nous avons les getters/setters sans écrire du code (de plomberie).

package fr.netapys.blog.constructeurs
import scala.reflect.BeanProperty

class Etablissement(@BeanProperty var raisonSociale:String , @BeanProperty var id:String) {

	@Override
	override def toString():String={
		"Rs='"+getRaisonSociale() + "' id="+ getId()
	}
}

Notez que les setters/getters sont appelés dans la méthode toString surchargée ici.
Les getters/setters sont générés par scala car :
- la présence de l'annotation @BeanProperty
- les arguments du constructeur sont des "var" (d'où les setters générés)

Le code de la classe "object" permet de tester notre exemple volontairement simple :

object MainEtablissement extends App{
	val etab:Etablissement = new Etablissement("rs1","02A")	
	etab.setRaisonSociale("new rs")	
	println( etab )
}

Je vous laisse découvrir la sortie de la console en cliquant droit sur cette classe "MainEtablissement" puis Run as Scala Application.

Pour finir, j'aborderai prochainement le mariage heureux du duo Spring et Scala.
Ca promet.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.