Я пытаюсь настроить Jboss 6 в кластерной среде и использовать его для размещения кластерных одноэлементных EJB с отслеживанием состояния.
На данный момент мы успешно установили Singleton EJB в кластере, где разные точки входа в наше приложение (через веб-сайт, развернутый на каждом узле) указывают на единую среду, в которой размещен EJB (таким образом сохраняя состояние статических переменных). Мы достигли этого, используя следующую конфигурацию:
Интерфейс компонента:
@Remote
public interface IUniverse {
...
}
Реализация бина:
@Clustered @Stateful
public class Universe implements IUniverse {
private static Vector<String> messages = new Vector<String>();
...
}
Конфигурация jboss-beans.xml:
<deployment xmlns="urn:jboss:bean-deployer:2.0">
<!-- This bean is an example of a clustered singleton -->
<bean name="Universe" class="Universe">
</bean>
<bean name="UniverseController" class="org.jboss.ha.singleton.HASingletonController">
<property name="HAPartition"><inject bean="HAPartition"/></property>
<property name="target"><inject bean="Universe"/></property>
<property name="targetStartMethod">startSingleton</property>
<property name="targetStopMethod">stopSingleton</property>
</bean>
</deployment>
Основная проблема для этой реализации заключается в том, что после того, как главный узел (тот, который содержит состояние одиночного EJB-компонента) корректно завершает работу, состояние одиночного элемента теряется и сбрасывается до значения по умолчанию. Обратите внимание, что все было построено в соответствии с документами JBoss 5 Clustering, так как документов JBoss 6 на эту тему обнаружено не было. Приветствуется любая информация о том, как решить эту проблему или где найти документацию JBoss 6 по кластеризации.