2012-05-15 1 views
4

J'évalue Hazelcast comme une solution de grille de données distribuée pour une application sur laquelle je travaille. Hazelcast est configuré sur un cluster distribué, et mon application utilise Spring pour définir un client Hazelcast de cette façon:en utilisant un MapLoader pour une carte distribuée Hazelcast au sein d'un client

<hz:client id="hazelcastClient" group-name="dev" group-password="dev-pass"> 
    <hz:member>localhost:5701</hz:member> 
</hz:client> 

Sur mon nœud Hazelcast, dans le fichier hazelcast.xml j'ai de configurer une carte, avec toute la configuration nécessaire . Disons que cette carte s'appelle myMap. Je peux voir cette carte mise en place correctement lors de l'utilisation de la webapp Hazelcast pour la surveillance (mancenter).

Je dois maintenant configurer la carte pour qu'elle soit injectée dans mon bean, du côté de l'application. Si je fais quelque chose comme

<hz:map id="myMap" instance-ref="hazelcastClient" name="myMap" /> 

Et j'injecte cette carte dans mon haricot qui containst la logique fetching, j'ai aucun problème.

Cependant, j'ai également écrit une classe qui implémente l'interface MapLoader, afin de gérer les données manquantes du cache. Mon problème est maintenant que je ne sais pas comment lier ce Maploader au cache que j'ai défini. Si je tente quelque chose comme

<hz:map id="myMap" instance-ref="hazelcastClient" name="myMap"> 
    <hz:map-store enabled="true" implementation="myMapLoader"/> 
</hz:map> 

Je reçois une erreur d'analyse XML, comme il semble que lorsque hz:map est utilisé comme élément de niveau supérieur (et non à l'intérieur d'un hz:config, par exemple), vous ne pouvez pas spécifier intérieure éléments. Cela me fait penser que vous devez définir un élément hz:config. Mais il n'est pas très clair dans la documentation si vous pouvez définir un élément hz:config pour un client. Pour moi, il semble que vous devez utiliser hz:config si vous voulez que votre application fasse partie du cluster. Cependant, je ne suis pas sûr que s'il est logique que mon application fasse partie du cluster, c'est essentiellement un client de la grille de données.

Avez-vous des idées sur la façon dont je peux configurer mon application pour obtenir le comportement que je veux?

Merci!

Répondre

13

Vous ne pouvez pas configurer une carte sur le côté client. Vous devez configurer myMap et son MapLoader/MapStore sur le noeud Hazelcast. Les opérations MapStore/MapLoader sont exécutées par le noeud Hazelcast qui possède les données, et non par le client.

Hazelcast Noeud

<hz:config> 
    ... 
    <hz:map name="myMap" backup-count="1" max-size="0"> 
     <hz:map-store enabled="true" implementation="myMapLoader" /> 
    </hz:map> 
    ... 
</hz:config> 

-OU- utilisant hazelcast.xml

<map name="myMap"> 
    <backup-count>1</backup-count> 
    <time-to-live-seconds>0</time-to-live-seconds> 
    <max-idle-seconds>0</max-idle-seconds> 

    <map-store enabled="true"> 
     <class-name>foo.bar.MyMapLoader</class-name> 
     <write-delay-seconds>0</write-delay-seconds> 
    </map-store> 
</map> 

côté client juste instancier myMap;

<hz:map id="myMap" instance-ref="hazelcastClient" name="myMap" /> 

Lorsque le client met à/de cette carte devient, le nœud gère la demande du client appellera MapLoader/MapStore.

Questions connexes