Prise en charge des beans d'extension Spring et des espaces de noms

WebSphere eXtreme Scale fournit une fonction permettant de déclarer des objets Java simples (POJO) afin de les utiliser en tant que points d'extension dans le fichier objectgrid.xml et le moyen de nommer les beans, puis de spécifier le nom de classe. En règle générale, les instances de la classe spécifiée sont créées et ces objets sont utilisés en tant que plug-in. Maintenant, eXtreme Scale peut déléguer à Spring l'obtention d'instances de ces objets de plug-in. Si une application utilise Spring, alors de tels objets Java simples doivent être connectés au reste de l'application.

Dans certains scénarios, vous devez utiliser Spring pour configurer un plug-in, comme dans l'exemple suivant :

<objectGrid name="Grid">
    <bean id="TransactionCallback" className="com.ibm.websphere.objectgrid.jpa.JPATxCallback">
        <property name="persistenceUnitName" type="java.lang.String"  value="employeePU" />
    </bean>
    ...
</objectGrid>

L'implémentation TransactionCallback intégrée, la classe com.ibm.websphere.objectgrid.jpa.JPATxCallback, est configurée comme classe TransactionCallback. Cette classe est configurée avec la propriété persistenceUnitName, comme le montre l'exemple précédent. La classe JPATxCallback comporte également l'attribut JPAPropertyFactory attribute, qui est de type java.lang.Object. La configuration ObjectGrid XML ne prend pas ce type de configuration en charge.

L'intégration de eXtreme Scale Spring résout ce problème en déléguant à Spring la création des beans. La configuration révisée est comme suit :

<objectGrid name="Grid">
    <bean id="TransactionCallback" className="{spring}jpaTxCallback"/>
    ...
</objectGrid>

Le fichier Spring pour l'objet "Grid" comporte les informations suivantes :

<bean id="jpaTxCallback" class="com.ibm.websphere.objectgrid.jpa.JPATxCallback" scope="shard">
    <property name="persistenceUnitName" value="employeeEMPU"/>
    <property name="JPAPropertyFactory" ref ="jpaPropFactory"/>
</bean>

<bean id="jpaPropFactory" class="com.ibm.ws.objectgrid.jpa.plugins.
JPAPropFactoryImpl" scope="shard">
</bean>

Ici, TransactionCallback est spécifié comme {spring}jpaTxCallback et les beans jpaTxCallback et jpaPropFactory sont configurés dans le fichier Spring comme indiqué dans l'exemple précédent. La configuration Spring permet de configurer un bean JPAPropertyFactory en tant que paramètre de l'objet JPATxCallback.

Classe de bean Spring par défaut

Lorsque eXtreme Scale détecte un plug-in ou un bean d'extension (par exemple, ObjectTransformer, Loader ou TransactionCallback etc.) avec une valeur de nom de classe dotée du préfixe {spring}, alors eXtreme Scale utilise le reste du nom en tant que nom de bean Spring et obtient l'instance de bean à l'aide de la classe Spring Bean.

Par défaut, si aucune classe de bean n'a été enregistrée pour un objet ObjectGrid donné, il tente alors de trouver un fichier ObjectGridName_spring.xml. Par exemple, si la grille de données s'appelle "Grid", le fichier XML s'appelle /Grid_spring.xml. Ce fichier devrait se trouver dans le chemin de classe ou dans un répertoire META-INF qui correspond au chemin de classe. Si ce fichier est trouvé, alors eXtreme Scale construit un ApplicationContext à l'aide de ce fichier et des beans de construction provenant de cette classe de beans.

Classe de bean Spring personnalisée

WebSphere eXtreme Scale fournit également une interface de programme d'application ObjectGridSpringFactory pour enregistrer une instance de fabrique de beans Spring pour une utilisation pour un ObjectGrid spécifiquement nommé. Cette interface de programme d'application enregistre une instance de BeanFactory dans eXtreme Scale à l'aide de la méthode statique suivante :

void registerSpringBeanFactoryAdapter(String objectGridName, Object springBeanFactory)

Prise en charge de l'espace de noms

Depuis la version 2.0, Spring dispose d'un mécanisme pour les extensions basées sur le schéma au format XML Spring de base pour la définition et la configuration des beans. ObjectGrid utilise cette nouvelle fonction pour définir et configurer les beans ObjectGrid. Avec l'extension de schéma Spring XML, une partie des implémentations des plug-in eXtreme Scale et de certains beans ObjectGrid sont prédéfinies dans l'espace de noms "objectgrid". Lors de l'écriture des fichiers de configuration Spring, il n'est pas nécessaire de spécifier le nom de classe complet des implémentations pré-intégrées. Vous pouvez plutôt référencer les beans prédéfinis.

De plus, si vous définissez les attributs des beans dans le schéma XML, cela diminue le risque de fournir un nom d'attribut erroné. La validation XML basée sur le schéma XML peut détecter ce type d'erreurs plus tôt lors du cycle de développement.

Ces beans définis dans les extensions de schéma XML sont :

  • transactionManager
  • registre
  • serveur
  • catalogue
  • catalogServerProperties
  • conteneur
  • JPALoader
  • JPATxCallback
  • JPAEntityLoader
  • LRUEvictor
  • LFUEvictor
  • HashIndex

Ces beans sont définis dans le schéma XML objectgrid.xsd XML. Ce fichier XSD est envoyé en tant que fichier com/ibm/ws/objectgrid/spring/namespace/objectgrid.xsd dans le fichier ogspring.jar. Pour obtenir la description détaillée du fichier XSD et des beans définis dans le fichier XSD, voir Fichier XML du descripteur de Spring.

Utilisez l'exemple JPATxCallback de la section précédente. Dans la section précédente, le bean JPATxCallback est configuré comme suit :

<bean id="jpaTxCallback" class="com.ibm.websphere.objectgrid.jpa.JPATxCallback" scope="shard">
    <property name="persistenceUnitName" value="employeeEMPU"/>
    <property name="JPAPropertyFactory" ref ="jpaPropFactory"/>
</bean>

<bean id="jpaPropFactory" class="com.ibm.ws.objectgrid.jpa.plugins.JPAPropFactoryImpl" scope="shard">
</bean>

Si elle fait appel à cette fonction d'espace de noms, la configuration Spring XML peut s'écrire comme suit :

<objectgrid:JPATxCallback id="jpaTxCallback" persistenceUnitName="employeeEMPU" 
	jpaPropertyFactory="jpaPropFactory" />

<bean id="jpaPropFactory" class="com.ibm.ws.objectgrid.jpa.plugins.JPAPropFactoryImpl" 
	scope="shard">
</bean>

Ici, notez qu'au lieu de définir la classe com.ibm.websphere.objectgrid.jpa.JPATxCallback comme dans l'exemple précédent, nous utilisons directement le bean objectgrid:JPATxCallback prédéfini. Comme vous pouvez le voir, cette configuration est moins détaillée et facilite la détection d'erreurs.

Pour la description de l'utilisation des beans Spring, consultez Démarrage d'un serveur de conteneur avec Spring.