mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Messenger facade: MessengerFactory.createMessenger() now takes app-region as parameter
* Allows single factory to be specified and individual consumers to use it to create appropriate application-region-scoped messengers. * New interface more appropriate for where non-DI use will be required, e.g. Ehcache peer providers. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@33846 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -179,6 +179,10 @@
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<bean id="messengerFactory"
|
||||
class="org.alfresco.repo.cluster.JGroupsMessengerFactory"
|
||||
depends-on="jgroupsChannelFactory"/>
|
||||
|
||||
<bean id="encryptionChecker" class="org.alfresco.encryption.EncryptionChecker">
|
||||
<property name="transactionService" ref="transactionService"/>
|
||||
<property name="keyStoreChecker" ref="keyStoreChecker"/>
|
||||
|
@@ -69,15 +69,14 @@ public class HazelcastMessenger<T extends Serializable> implements Messenger<T>,
|
||||
receiverDelegate.onReceive(message);
|
||||
}
|
||||
|
||||
protected String getTopicName()
|
||||
{
|
||||
return topic.getName();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean isConnected()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
protected ITopic<T> getTopic()
|
||||
{
|
||||
return topic;
|
||||
}
|
||||
}
|
||||
|
@@ -21,38 +21,32 @@ package org.alfresco.repo.cluster;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import org.alfresco.util.PropertyCheck;
|
||||
|
||||
import com.hazelcast.core.HazelcastInstance;
|
||||
import com.hazelcast.core.ITopic;
|
||||
|
||||
/**
|
||||
* Hazelcast-based implementation of the {@link MessengerFactory} interface.
|
||||
* The factory must be configured with an {@link ITopic} - which
|
||||
* should be configured with a topic name that corresponds to an application
|
||||
* region.
|
||||
* The factory must be configured with a {@link HazelcastInstance} - which
|
||||
* is the underlying factory for {@link ITopic} creation.
|
||||
*
|
||||
* @author Matt Ward
|
||||
*/
|
||||
public class HazelcastMessengerFactory implements MessengerFactory
|
||||
{
|
||||
private ITopic<Object> topic;
|
||||
private HazelcastInstance hazelcast;
|
||||
|
||||
@Override
|
||||
public <T extends Serializable> Messenger<T> createMessenger(String appRegion)
|
||||
{
|
||||
ITopic<T> topic = hazelcast.getTopic(appRegion);
|
||||
return new HazelcastMessenger<T>(topic);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param topic the topic to set
|
||||
* @param hazelcast the hazelcast to set
|
||||
*/
|
||||
public void setTopic(ITopic<Object> topic)
|
||||
public void setHazelcast(HazelcastInstance hazelcast)
|
||||
{
|
||||
this.topic = topic;
|
||||
}
|
||||
|
||||
/*
|
||||
* @see org.alfresco.repo.cluster.MessengerFactory#createMessenger()
|
||||
*/
|
||||
@Override
|
||||
public <T extends Serializable> Messenger<T> createMessenger()
|
||||
{
|
||||
PropertyCheck.mandatory(this, "topic", topic);
|
||||
return new HazelcastMessenger(topic);
|
||||
this.hazelcast = hazelcast;
|
||||
}
|
||||
}
|
||||
|
@@ -19,14 +19,16 @@
|
||||
|
||||
package org.alfresco.repo.cluster;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.junit.Assert.assertSame;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.runners.MockitoJUnitRunner;
|
||||
|
||||
import com.hazelcast.core.HazelcastInstance;
|
||||
import com.hazelcast.core.ITopic;
|
||||
|
||||
|
||||
@@ -39,20 +41,23 @@ import com.hazelcast.core.ITopic;
|
||||
public class HazelcastMessengerFactoryTest
|
||||
{
|
||||
private HazelcastMessengerFactory factory;
|
||||
private @Mock ITopic<Object> topic;
|
||||
private @Mock HazelcastInstance hazelcast;
|
||||
private @Mock ITopic<String> topic;
|
||||
|
||||
@Before
|
||||
public void setUp()
|
||||
{
|
||||
factory = new HazelcastMessengerFactory();
|
||||
factory.setTopic(topic);
|
||||
factory.setHazelcast(hazelcast);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void topicWrappedInMessenger()
|
||||
{
|
||||
when(topic.getName()).thenReturn("app-region");
|
||||
HazelcastMessenger messenger = (HazelcastMessenger) factory.createMessenger();
|
||||
assertEquals("app-region", messenger.getTopicName());
|
||||
when(hazelcast.<String>getTopic("app-region")).thenReturn(topic);
|
||||
|
||||
Messenger<String> messenger = factory.createMessenger("app-region");
|
||||
|
||||
assertSame(topic, ((HazelcastMessenger<String>) messenger).getTopic());
|
||||
}
|
||||
}
|
||||
|
@@ -80,7 +80,7 @@ public class HazelcastTest implements MessageListener<String>
|
||||
topic.addMessageListener(this);
|
||||
|
||||
MessengerFactory messengerFactory = (MessengerFactory) ctx.getBean("messengerFactory");
|
||||
Messenger<String> messenger = messengerFactory.createMessenger();
|
||||
Messenger<String> messenger = messengerFactory.createMessenger("testregion");
|
||||
messenger.send("Full test including spring.");
|
||||
|
||||
helper.checkMessageReceivedWas("Full test including spring.");
|
||||
|
@@ -22,9 +22,8 @@ package org.alfresco.repo.cluster;
|
||||
import java.io.Serializable;
|
||||
|
||||
import org.alfresco.repo.jgroups.AlfrescoJGroupsChannelFactory;
|
||||
import org.alfresco.util.PropertyCheck;
|
||||
import org.alfresco.util.ParameterCheck;
|
||||
import org.jgroups.Channel;
|
||||
import org.springframework.beans.factory.annotation.Required;
|
||||
|
||||
/**
|
||||
* JGroups implementation of the {@link MessengerFactory} interface.
|
||||
@@ -33,20 +32,11 @@ import org.springframework.beans.factory.annotation.Required;
|
||||
*/
|
||||
public class JGroupsMessengerFactory implements MessengerFactory
|
||||
{
|
||||
private String appRegion;
|
||||
|
||||
|
||||
@Override
|
||||
public <T extends Serializable> Messenger<T> createMessenger()
|
||||
public <T extends Serializable> Messenger<T> createMessenger(String appRegion)
|
||||
{
|
||||
PropertyCheck.mandatory(this, "appRegion", appRegion);
|
||||
ParameterCheck.mandatory("appRegion", appRegion);
|
||||
Channel channel = AlfrescoJGroupsChannelFactory.getChannel(appRegion);
|
||||
return new JGroupsMessenger<T>(channel);
|
||||
}
|
||||
|
||||
@Required
|
||||
public void setAppRegion(String appRegion)
|
||||
{
|
||||
this.appRegion = appRegion;
|
||||
}
|
||||
}
|
||||
|
@@ -78,7 +78,7 @@ public class JGroupsTest extends ReceiverAdapter
|
||||
ch.setReceiver(this);
|
||||
|
||||
MessengerFactory messengerFactory = (MessengerFactory) ctx.getBean("messengerFactory");
|
||||
Messenger<String> messenger = messengerFactory.createMessenger();
|
||||
Messenger<String> messenger = messengerFactory.createMessenger("testregion");
|
||||
messenger.send("Full test including spring.");
|
||||
|
||||
helper.checkMessageReceivedWas("Full test including spring.");
|
||||
@@ -97,8 +97,8 @@ public class JGroupsTest extends ReceiverAdapter
|
||||
AlfrescoJGroupsChannelFactory.rebuildChannels();
|
||||
|
||||
JGroupsMessengerFactory messengerFactory = new JGroupsMessengerFactory();
|
||||
messengerFactory.setAppRegion("testregion");
|
||||
Messenger<String> messenger = messengerFactory.createMessenger();
|
||||
|
||||
Messenger<String> messenger = messengerFactory.createMessenger("testregion");
|
||||
messenger.send("This is a test payload.");
|
||||
|
||||
helper.checkMessageReceivedWas("This is a test payload.");
|
||||
|
@@ -28,5 +28,5 @@ import java.io.Serializable;
|
||||
*/
|
||||
public interface MessengerFactory
|
||||
{
|
||||
<T extends Serializable> Messenger<T> createMessenger();
|
||||
<T extends Serializable> Messenger<T> createMessenger(String appRegion);
|
||||
}
|
||||
|
@@ -4,7 +4,7 @@
|
||||
<beans>
|
||||
|
||||
<bean id="messengerFactory" class="org.alfresco.repo.cluster.HazelcastMessengerFactory">
|
||||
<property name="topic" ref="messengerTopic"/>
|
||||
<property name="hazelcast" ref="hazelcastInstance"/>
|
||||
</bean>
|
||||
|
||||
<bean id="hazelcastInstance" class="com.hazelcast.core.Hazelcast" factory-method="newHazelcastInstance">
|
||||
@@ -19,8 +19,4 @@
|
||||
</bean>
|
||||
</constructor-arg>
|
||||
</bean>
|
||||
|
||||
<bean id="messengerTopic" factory-bean="hazelcastInstance" factory-method="getTopic">
|
||||
<constructor-arg value="testregion"/>
|
||||
</bean>
|
||||
</beans>
|
||||
|
@@ -16,12 +16,7 @@
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
|
||||
<!--
|
||||
This could also be done as a spring FactoryBean, so that anything this is wired up to will
|
||||
gain a Messenger instance that it can use to send messages.
|
||||
-->
|
||||
<bean id="messengerFactory" class="org.alfresco.repo.cluster.JGroupsMessengerFactory">
|
||||
<property name="appRegion" value="testregion"/>
|
||||
</bean>
|
||||
<bean id="messengerFactory"
|
||||
class="org.alfresco.repo.cluster.JGroupsMessengerFactory"
|
||||
depends-on="jgroupsChannelFactory"/>
|
||||
</beans>
|
Reference in New Issue
Block a user