Utilisation de Zend JavaBridge – Part 2

Par défaut
Business Lib
Architecture de notre librairie :
Business/
– Controler/
—- CompteControler.php
– DataHandler/
—- EjbDataHandler.php
– Dto/ (ou pojo/popo)
—- Compte.php
–Helper/
—-DtoHelper.php
datahandler/EjbDataHander.php



/**
* EJB DataHandler - S'occupe de la connexion aux services
*/
class EJBDataHandler {

protected $_contextHn;
protected $_contextService;
protected $_serviceLookup;
protected $_serviceLookupName;


/**
* Constructeur
* @param String Ip / host du serveur JBOSS
* @param String Nom du bean (service)
*/
function __construct($serviceHost, $serviceLookupName) {
$environnement = array(
"java.naming.factory.url.pkgs" => "org.jboss.naming:org.jnp.interfaces",
"java.naming.provider.url" => $serviceHost
);

// Connexion
try {
$this->_contextService = new Java("javax.naming.InitialContext", $environnement);
} catch(JavaException $e) {
$exception = java_last_exception_get();
throw new JavaException("Impossible de se connecter au(x) serveur(s) Jboss.\n".$exception->getMessage());
}

// Lookup
try {
$this->_serviceLookup = $this->_contextService->lookup($serviceLookupName);
} catch(JavaException $e) {
$exception = java_last_exception_get();
throw new JavaException("Impossible de se brancher sur le service.\n".$exception->getMessage());
}
$this->_serviceLookupName = $serviceLookupName;
}


/**
* Fonction magique permettant d'appeler les méthodes des services
* @param String Nom de la méthode
* @param Array tableau d'arguments

*/
public function __call($methode, $arguments) {
try {
$result = call_user_func_array(array($this->_serviceLookup, $methode), $arguments);
} catch(JavaException $e) {
$exception = java_last_exception_get();
throw new Exception($exception->getMessage(), $exception->getErrorNumber());
}
return $result;
}
}

Quelques explications s’imposent, commençons pour le constructeur.
Deux arguments sont attendus, le premier étant l’adresse du serveur Jboss et le second, le Bean sur lequel on se connecte. La fonction java_last_exception_get() permet de caster l’exception en un objet java du type de l’exception levée (il est fort probable que la gestion des exceptions coté métier soit très spécifique).
Nous utilisons une méthode magique en php, à savoir __call. Noter que par exemple $exception->getErrorNumber() est une méthode propre à l’exception retournée.
Passons aux controlers.
controler/Controler.php
D’abord une classe abstraite qui va nous permettre d’effectuer quelques actions communes à tous les controlers. Tous les controlers hériterons ensuite de celle-ci.


require_once('datahandler/EJBDataHandler.php');
require_once('helper/DtoHelper.php');


/**
* Classe abstraite Controler
* @abstract
*/
abstract class Controler {

public $serviceName;
public $serviceStatut;
public $serviceError;

protected $_dataHandler;

/**
* Constructeur
*/
function __construct($service) {
$this->serviceName = $service;

try {
$this->_dataHandler = new EJBDataHandler('ip_server_jboss:port', $service);
$this->serviceStatut = true;
} catch(Exception $e) {
$this->serviceStatut = false;
$this->serviceError = $e->getMessage();
}
}

/**
* Initialise un "contexte"
* @access public
*/
public function initContext($userId, $context, $lang) {
$this->_dataHandler->initContext($userId, $applicationName, $lang);
}
}