2012-10-17 3 views
4

Je pense au portage d'une application Spring Quartz vers EJB 3.1 pour voir si EJB s'est amélioré. J'ai de la difficulté à comprendre comment le basculement fonctionne avec le service de temporisation. Dans Quartz, il existe des tables de base de données que les instances de Quartz utilisent en cluster. Si un nœud de votre cluster tombe en panne, les tâches seront toujours exécutées sur d'autres nœuds.JBoss 7.1.1 et le service de minuterie EJB 3.1

J'ai regardé comment le service de minuterie persiste des choses et il semble utiliser le système de fichiers du serveur sur lequel le minuteur a été créé. Est-ce vrai? Je ne vois pas comment cela serait possible car cela rendrait le service de minuterie inutilisable puisqu'il ne supporterait pas le basculement.

Je dois donc manquer quelque chose. Est-ce que quelqu'un pourrait m'aider avec ceci?

Répondre

2

Le service d'horloge EJB n'est tout simplement pas aussi avancé que Quartz (avec ou sans ressort).

Les temporisateurs EJB sont conservés dans un emplacement inconnu. Il peut s'agir du système de fichiers, mais il peut aussi s'agir du registre Windows si vous utilisez Windows ou s'il s'agit d'un serveur LDAP ou autre. Il y avait un problème sur la spécification EJB spec JIRA depuis un certain temps à ce sujet, et il a été discuté sur la liste de diffusion spec, mais ensuite il a été brutalement abandonné et fermé parce que personne ne répondait à personne (peut-être parce que beaucoup de les gens étaient en vacances à l'époque). C'est l'une des raisons les plus légères de clore une question si vous me le demandez, mais je suppose que le responsable de la spécification doit parfois recourir à de telles mesures.

Quoi qu'il en soit, dans JBoss AS persister arrive à une source de données relationnelle intégrée, qui à son tour écrit dans le système de fichiers. Via la configuration propriétaire, vous pouvez diriger cette source vers n'importe quelle base de données distante. Le fail-over devrait aussi provenir de la fonctionnalité JBoss. Bien que EJB interdise beaucoup de choses pour des raisons de clustering potentiel, il n'y a pas de support de cluster explicite dans la spécification et ainsi, les temporisateurs d'EJB ne sont pas spécifiquement sensibles au cluster.

+0

merci pour la réponse Mike. Il est étrange que le service de minuterie soit si primitif et manque de fonctionnalités clés telles que le support de basculement. Je suppose que je vais utiliser Quartz de JEE et juste regarder comment copier dans JEE ce que le code fait avec Spring. – user671731

0

Vous ne savez pas si cela était disponible au moment de la question, mais vous pouvez utiliser 'cluster-ha-singleton' pour cela, il vous permet de créer un temporisateur singleton qui est invoqué à partir d'un seul noeud de cluster, au cas de basculement du nœud choisi un nouveau nœud est élu pour exécuter le singleton (et donc les minuteries)

http://www.jboss.org/quickstarts/eap/cluster-ha-singleton/

Il mentionne EAP, mais je suis en cours d'exécution sur AS 7.2.0 bien, les pots sont déjà inclus dans/modules/org/jboss/