Author: iocanel
Date: Tue Jul 26 19:53:02 2011
New Revision: 1151222
URL: http://svn.apache.org/viewvc?rev=1151222&view=rev
Log:
[KARAF-642] Merge cloud discovery module to cellar-2.2.x
Added:
karaf/cellar/branches/cellar-2.2.x/cloud/
- copied from r1149693, karaf/cellar/trunk/cloud/
karaf/cellar/branches/cellar-2.2.x/cloud/pom.xml
- copied, changed from r1149693, karaf/cellar/trunk/cloud/pom.xml
karaf/cellar/branches/cellar-2.2.x/cloud/src/
- copied from r1149693, karaf/cellar/trunk/cloud/src/
karaf/cellar/branches/cellar-2.2.x/cloud/src/main/
- copied from r1149693, karaf/cellar/trunk/cloud/src/main/
karaf/cellar/branches/cellar-2.2.x/cloud/src/main/java/
- copied from r1149693, karaf/cellar/trunk/cloud/src/main/java/
karaf/cellar/branches/cellar-2.2.x/cloud/src/main/java/org/
- copied from r1149693, karaf/cellar/trunk/cloud/src/main/java/org/
karaf/cellar/branches/cellar-2.2.x/cloud/src/main/java/org/apache/
- copied from r1149693, karaf/cellar/trunk/cloud/src/main/java/org/apache/
karaf/cellar/branches/cellar-2.2.x/cloud/src/main/java/org/apache/karaf/
- copied from r1149693,
karaf/cellar/trunk/cloud/src/main/java/org/apache/karaf/
karaf/cellar/branches/cellar-2.2.x/cloud/src/main/java/org/apache/karaf/cellar/
- copied from r1149693,
karaf/cellar/trunk/cloud/src/main/java/org/apache/karaf/cellar/
karaf/cellar/branches/cellar-2.2.x/cloud/src/main/java/org/apache/karaf/cellar/cloud/
- copied from r1149693,
karaf/cellar/trunk/cloud/src/main/java/org/apache/karaf/cellar/cloud/
karaf/cellar/branches/cellar-2.2.x/cloud/src/main/java/org/apache/karaf/cellar/cloud/Activator.java
- copied unchanged from r1149693,
karaf/cellar/trunk/cloud/src/main/java/org/apache/karaf/cellar/cloud/Activator.java
karaf/cellar/branches/cellar-2.2.x/cloud/src/main/java/org/apache/karaf/cellar/cloud/BlobStoreDiscoveryService.java
- copied unchanged from r1149693,
karaf/cellar/trunk/cloud/src/main/java/org/apache/karaf/cellar/cloud/BlobStoreDiscoveryService.java
karaf/cellar/branches/cellar-2.2.x/cloud/src/main/java/org/apache/karaf/cellar/cloud/BlobStoreDiscoveryServiceFactory.java
- copied unchanged from r1149693,
karaf/cellar/trunk/cloud/src/main/java/org/apache/karaf/cellar/cloud/BlobStoreDiscoveryServiceFactory.java
karaf/cellar/branches/cellar-2.2.x/cloud/src/main/resources/
- copied from r1149693, karaf/cellar/trunk/cloud/src/main/resources/
karaf/cellar/branches/cellar-2.2.x/cloud/src/test/
- copied from r1149693, karaf/cellar/trunk/cloud/src/test/
karaf/cellar/branches/cellar-2.2.x/cloud/src/test/java/
- copied from r1149693, karaf/cellar/trunk/cloud/src/test/java/
karaf/cellar/branches/cellar-2.2.x/core/src/main/java/org/apache/karaf/cellar/core/discovery/
- copied from r1149693,
karaf/cellar/trunk/core/src/main/java/org/apache/karaf/cellar/core/discovery/
karaf/cellar/branches/cellar-2.2.x/core/src/main/java/org/apache/karaf/cellar/core/discovery/Discovery.java
- copied unchanged from r1149693,
karaf/cellar/trunk/core/src/main/java/org/apache/karaf/cellar/core/discovery/Discovery.java
karaf/cellar/branches/cellar-2.2.x/core/src/main/java/org/apache/karaf/cellar/core/discovery/DiscoveryService.java
- copied unchanged from r1149693,
karaf/cellar/trunk/core/src/main/java/org/apache/karaf/cellar/core/discovery/DiscoveryService.java
karaf/cellar/branches/cellar-2.2.x/core/src/main/java/org/apache/karaf/cellar/core/discovery/DiscoveryTask.java
- copied unchanged from r1149693,
karaf/cellar/trunk/core/src/main/java/org/apache/karaf/cellar/core/discovery/DiscoveryTask.java
karaf/cellar/branches/cellar-2.2.x/core/src/test/
- copied from r1149693, karaf/cellar/trunk/core/src/test/
karaf/cellar/branches/cellar-2.2.x/manual/src/main/webapp/user-guide/cloud.conf
- copied unchanged from r1150108,
karaf/cellar/trunk/manual/src/main/webapp/user-guide/cloud.conf
Removed:
karaf/cellar/branches/cellar-2.2.x/core/src/main/test/
Modified:
karaf/cellar/branches/cellar-2.2.x/ (props changed)
karaf/cellar/branches/cellar-2.2.x/assembly/src/main/resources/features.xml
karaf/cellar/branches/cellar-2.2.x/assembly/src/main/resources/instance.cfg
karaf/cellar/branches/cellar-2.2.x/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
karaf/cellar/branches/cellar-2.2.x/hazelcast/pom.xml
karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/CellarMembershipListener.java
karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastClusterManager.java
karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastGroupManager.java
karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastNode.java
karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/factory/HazelcastServiceFactory.java
karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/resources/META-INF/spring/beans.xml
karaf/cellar/branches/cellar-2.2.x/manual/src/main/webapp/user-guide/index.conf
karaf/cellar/branches/cellar-2.2.x/pom.xml
Propchange: karaf/cellar/branches/cellar-2.2.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Jul 26 19:53:02 2011
@@ -1 +1 @@
-/karaf/cellar/trunk:1101991,1103447,1103456,1125012,1125040,1131478,1142446
+/karaf/cellar/trunk:1101991,1103447,1103456,1125012,1125040,1131478,1142446,1149693,1150108
Modified:
karaf/cellar/branches/cellar-2.2.x/assembly/src/main/resources/features.xml
URL:
http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/assembly/src/main/resources/features.xml?rev=1151222&r1=1151221&r2=1151222&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/assembly/src/main/resources/features.xml
(original)
+++ karaf/cellar/branches/cellar-2.2.x/assembly/src/main/resources/features.xml
Tue Jul 26 19:53:02 2011
@@ -15,6 +15,8 @@
-->
<features xmlns="http://karaf.apache.org/xmlns/features/v1.0.0">
+ <repository>mvn:org.jclouds.karaf/feature/1.0.0/xml/features</repository>
+
<feature name='hazelcast' description='In memory data grid'
version='${hazelcast.version}' resolver='(obr)'>
<bundle>mvn:com.hazelcast/hazelcast/${hazelcast.version}</bundle>
</feature>
@@ -27,7 +29,11 @@
<feature name='cellar' description='Karaf clustering'
version='${project.version}' resolver='(obr)'>
<feature version='${hazelcast.version}'>hazelcast</feature>
+ <feature version="${jclouds.version}">jclouds</feature>
<feature>spring-dm</feature>
+
+ <bundle
dependency='true'>mvn:joda-time/joda-time/${joda-time.version}</bundle>
+
<bundle>mvn:org.apache.karaf.cellar/org.apache.karaf.cellar.core/${project.version}</bundle>
<bundle>mvn:org.apache.karaf.cellar/org.apache.karaf.cellar.config/${project.version}</bundle>
<bundle>mvn:org.apache.karaf.cellar/org.apache.karaf.cellar.features/${project.version}</bundle>
@@ -46,8 +52,17 @@
</configfile>
</feature>
+ <feature name='cellar-cloud' description='Karaf Cellar Cloud Feature'
version='${project.version}' resolver='(obr)'>
+ <feature>cellar</feature>
+ <feature>jclouds</feature>
+ <!-- Adding S3 as the default Blobstore -->
+ <feature>jclouds-aws-s3</feature>
+
<bundle>mvn:org.apache.karaf.cellar/org.apache.karaf.cellar.cloud/${project.version}</bundle>
+ </feature>
+
<feature name='cellar-webconsole' description='Karaf Cellar Webconsole
Plugin' version='${project.version}'
resolver='(obr)'>
+ <feature>cellar</feature>
<feature>webconsole</feature>
<bundle>mvn:org.apache.karaf.cellar/org.apache.karaf.cellar.webconsole/${project.version}</bundle>
</feature>
Modified:
karaf/cellar/branches/cellar-2.2.x/assembly/src/main/resources/instance.cfg
URL:
http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/assembly/src/main/resources/instance.cfg?rev=1151222&r1=1151221&r2=1151222&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/assembly/src/main/resources/instance.cfg
(original)
+++ karaf/cellar/branches/cellar-2.2.x/assembly/src/main/resources/instance.cfg
Tue Jul 26 19:53:02 2011
@@ -6,5 +6,5 @@ multicastGroup=224.2.2.3
multicastPort=54327
multicastTimeoutSeconds=2
-tcpIpEnabled=false
+tcpIpEnabled=true
tcpIpMembers=
\ No newline at end of file
Copied: karaf/cellar/branches/cellar-2.2.x/cloud/pom.xml (from r1149693,
karaf/cellar/trunk/cloud/pom.xml)
URL:
http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/cloud/pom.xml?p2=karaf/cellar/branches/cellar-2.2.x/cloud/pom.xml&p1=karaf/cellar/trunk/cloud/pom.xml&r1=1149693&r2=1151222&rev=1151222&view=diff
==============================================================================
--- karaf/cellar/trunk/cloud/pom.xml (original)
+++ karaf/cellar/branches/cellar-2.2.x/cloud/pom.xml Tue Jul 26 19:53:02 2011
@@ -19,7 +19,7 @@
<parent>
<groupId>org.apache.karaf</groupId>
<artifactId>cellar</artifactId>
- <version>3.0.0-SNAPSHOT</version>
+ <version>2.2.2-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
Modified:
karaf/cellar/branches/cellar-2.2.x/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
URL:
http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml?rev=1151222&r1=1151221&r2=1151222&view=diff
==============================================================================
---
karaf/cellar/branches/cellar-2.2.x/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
(original)
+++
karaf/cellar/branches/cellar-2.2.x/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
Tue Jul 26 19:53:02 2011
@@ -19,6 +19,7 @@
<property name="bundleContext" ref="blueprintBundleContext"/>
</bean>
+ <!-- Service Registrations -->
<service ref="registry"
interface="org.apache.karaf.cellar.core.event.EventHandlerRegistry"/>
</blueprint>
Modified: karaf/cellar/branches/cellar-2.2.x/hazelcast/pom.xml
URL:
http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/hazelcast/pom.xml?rev=1151222&r1=1151221&r2=1151222&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/hazelcast/pom.xml (original)
+++ karaf/cellar/branches/cellar-2.2.x/hazelcast/pom.xml Tue Jul 26 19:53:02
2011
@@ -74,5 +74,4 @@
<artifactId>slf4j-api</artifactId>
</dependency>
</dependencies>
-
</project>
Modified:
karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/CellarMembershipListener.java
URL:
http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/CellarMembershipListener.java?rev=1151222&r1=1151221&r2=1151222&view=diff
==============================================================================
---
karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/CellarMembershipListener.java
(original)
+++
karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/CellarMembershipListener.java
Tue Jul 26 19:53:02 2011
@@ -20,6 +20,8 @@ import com.hazelcast.core.MembershipList
import org.apache.karaf.cellar.core.Group;
import org.apache.karaf.cellar.core.GroupManager;
import org.apache.karaf.cellar.core.Synchronizer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.util.List;
import java.util.Set;
@@ -27,10 +29,10 @@ import java.util.Set;
/**
* Cellar membership listener.
*/
-public class CellarMembershipListener implements MembershipListener {
+public class CellarMembershipListener extends HazelcastInstanceAware
implements MembershipListener {
+ private static final transient Logger LOGGER =
LoggerFactory.getLogger(CellarMembershipListener.class);
private GroupManager groupManager;
- private HazelcastInstance instance;
private List<? extends Synchronizer> synchronizers;
public CellarMembershipListener(HazelcastInstance instance) {
@@ -40,22 +42,26 @@ public class CellarMembershipListener im
public void memberAdded(MembershipEvent membershipEvent) {
Member member = membershipEvent.getMember();
- Member local = instance.getCluster().getLocalMember();
+ try {
+ Member local = instance.getCluster().getLocalMember();
- if (local.equals(member)) {
- if (synchronizers != null && !synchronizers.isEmpty()) {
- Set<Group> groups = groupManager.listLocalGroups();
- if (groups != null && !groups.isEmpty()) {
- for (Group group : groups) {
- for (Synchronizer synchronizer : synchronizers) {
- if (synchronizer.isSyncEnabled(group)) {
- synchronizer.pull(group);
- synchronizer.push(group);
+ if (local.equals(member)) {
+ if (synchronizers != null && !synchronizers.isEmpty()) {
+ Set<Group> groups = groupManager.listLocalGroups();
+ if (groups != null && !groups.isEmpty()) {
+ for (Group group : groups) {
+ for (Synchronizer synchronizer : synchronizers) {
+ if (synchronizer.isSyncEnabled(group)) {
+ synchronizer.pull(group);
+ synchronizer.push(group);
+ }
}
}
}
}
}
+ } catch (Exception e) {
+ LOGGER.warn("Error while calling memberAdded", e);
}
}
Modified:
karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastClusterManager.java
URL:
http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastClusterManager.java?rev=1151222&r1=1151221&r2=1151222&view=diff
==============================================================================
---
karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastClusterManager.java
(original)
+++
karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastClusterManager.java
Tue Jul 26 19:53:02 2011
@@ -104,7 +104,9 @@ public class HazelcastClusterManager ext
Member member = cluster.getLocalMember();
HazelcastNode node = new
HazelcastNode(member.getInetSocketAddress().getHostName(),
member.getInetSocketAddress().getPort());
return node;
- } else return null;
+ } else {
+ return null;
+ }
}
/**
Modified:
karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastGroupManager.java
URL:
http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastGroupManager.java?rev=1151222&r1=1151221&r2=1151222&view=diff
==============================================================================
---
karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastGroupManager.java
(original)
+++
karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastGroupManager.java
Tue Jul 26 19:53:02 2011
@@ -92,8 +92,9 @@ public class HazelcastGroupManager imple
public Group createGroup(String groupName) {
Group group = listGroups().get(groupName);
- if (group == null)
+ if (group == null) {
group = new Group(groupName);
+ }
if (!listGroups().containsKey(groupName)) {
copyGroupConfiguration(Configurations.DEFAULT_GROUP_NAME,
groupName);
listGroups().put(groupName, group);
@@ -105,8 +106,9 @@ public class HazelcastGroupManager imple
ClassLoader originalClassLoader =
Thread.currentThread().getContextClassLoader();
try {
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
- if (!groupName.equals(Configurations.DEFAULT_GROUP_NAME))
+ if (!groupName.equals(Configurations.DEFAULT_GROUP_NAME)) {
listGroups().remove(groupName);
+ }
} finally {
Thread.currentThread().setContextClassLoader(originalClassLoader);
}
@@ -162,8 +164,9 @@ public class HazelcastGroupManager imple
Collection<Group> groupCollection = groupMap.values();
if (groupCollection != null && !groupCollection.isEmpty()) {
for (Group group : groupCollection) {
- if (group.getMembers().contains(node))
+ if (group.getMembers().contains(node)) {
result.add(group);
+ }
}
}
return result;
@@ -278,8 +281,9 @@ public class HazelcastGroupManager imple
public void registerGroup(String groupName) {
Group group = listGroups().get(groupName);
- if (group == null)
+ if (group == null) {
group = new Group(groupName);
+ }
registerGroup(group);
}
@@ -370,15 +374,16 @@ public class HazelcastGroupManager imple
* @return
*/
protected String convertSetToString(Set<String> set) {
- String result = "";
+ StringBuffer result = new StringBuffer();
Iterator<String> groupIterator = set.iterator();
while (groupIterator.hasNext()) {
String name = groupIterator.next();
- result = result + name;
- if (groupIterator.hasNext())
- result = result + ",";
+ result.append(name);
+ if (groupIterator.hasNext()) {
+ result.append(",");
+ }
}
- return result;
+ return result.toString();
}
/**
@@ -395,7 +400,9 @@ public class HazelcastGroupManager imple
for (String name : groupNames) {
result.add(name);
}
- } else result.add(string);
+ } else {
+ result.add(string);
+ }
return result;
}
Modified:
karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastNode.java
URL:
http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastNode.java?rev=1151222&r1=1151221&r2=1151222&view=diff
==============================================================================
---
karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastNode.java
(original)
+++
karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastNode.java
Tue Jul 26 19:53:02 2011
@@ -60,12 +60,18 @@ public class HazelcastNode implements No
@Override
public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
HazelcastNode that = (HazelcastNode) o;
- if (id != null ? !id.equals(that.id) : that.id != null) return false;
+ if (id != null ? !id.equals(that.id) : that.id != null) {
+ return false;
+ }
return true;
}
Modified:
karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/factory/HazelcastServiceFactory.java
URL:
http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/factory/HazelcastServiceFactory.java?rev=1151222&r1=1151221&r2=1151222&view=diff
==============================================================================
---
karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/factory/HazelcastServiceFactory.java
(original)
+++
karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/factory/HazelcastServiceFactory.java
Tue Jul 26 19:53:02 2011
@@ -1,29 +1,15 @@
/*
* Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
*
- * http://www.apache.org/licenses/LICENSE-2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
*
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*/
package org.apache.karaf.cellar.hazelcast.factory;
@@ -34,6 +20,7 @@ import com.hazelcast.config.TcpIpConfig;
import com.hazelcast.config.XmlConfigBuilder;
import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
+import org.apache.karaf.cellar.core.discovery.DiscoveryTask;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.slf4j.Logger;
@@ -41,9 +28,14 @@ import org.slf4j.LoggerFactory;
import org.springframework.osgi.context.BundleContextAware;
import java.util.ArrayList;
-import java.util.List;
+import java.util.Collection;
+import java.util.LinkedHashSet;
import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.Semaphore;
+import java.util.concurrent.TimeUnit;
/**
* A factory for a Hazelcast Instance, which integration with OSGi Service
Registry and Config Admin.
@@ -60,12 +52,15 @@ public class HazelcastServiceFactory imp
private int multicastPort = MulticastConfig.DEFAULT_MULTICAST_PORT;
private int multicastTimeoutSeconds =
MulticastConfig.DEFAULT_MULTICAST_TIMEOUT_SECONDS;
- private boolean tcpIpEnabled = false;
+ private boolean tcpIpEnabled = true;
private String tcpIpMembers = "";
- private List<String> tcpIpMemberList = new ArrayList<String>();
+ private Set<String> tcpIpMemberSet = new LinkedHashSet<String>();
private BundleContext bundleContext;
+ private ScheduledExecutorService scheduler =
Executors.newSingleThreadScheduledExecutor();
+ private DiscoveryTask discoveryTask;
+
private Semaphore semaphore = new Semaphore(1);
/**
@@ -80,6 +75,14 @@ public class HazelcastServiceFactory imp
}
}
+ public void init() {
+ scheduler.scheduleAtFixedRate(discoveryTask, 0, 10, TimeUnit.SECONDS);
+ }
+
+ public void destroy() {
+ scheduler.shutdown();
+ }
+
/**
* Creates or Updates HazelcastInstace.
*
@@ -91,71 +94,71 @@ public class HazelcastServiceFactory imp
//We need it to properly instantiate Hazelcast.
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
if (properties != null) {
- String newUsername = (String) properties.get("username");
- if (username != null && !username.endsWith(newUsername)) {
- this.username = newUsername;
- updated = Boolean.TRUE;
- }
+ String newUsername = (String) properties.get("username");
+ if (username != null && !username.endsWith(newUsername)) {
+ this.username = newUsername;
+ updated = Boolean.TRUE;
+ }
- String newPassword = (String) properties.get("password");
- if (password != null && !password.equals(newPassword)) {
- this.password = newPassword;
- }
+ String newPassword = (String) properties.get("password");
+ if (password != null && !password.equals(newPassword)) {
+ this.password = newPassword;
+ }
- Boolean newMulticastEnabled = Boolean.parseBoolean((String)
properties.get("multicastEnabled"));
- if (multicastEnabled != newMulticastEnabled) {
- this.multicastEnabled = newMulticastEnabled;
- updated = Boolean.TRUE;
- }
+ Boolean newMulticastEnabled = Boolean.parseBoolean((String)
properties.get("multicastEnabled"));
+ if (multicastEnabled != newMulticastEnabled) {
+ this.multicastEnabled = newMulticastEnabled;
+ updated = Boolean.TRUE;
+ }
- String newMulticastGroup = (String)
properties.get("multicastGroup");
- if (multicastGroup != null &&
!multicastGroup.endsWith(newMulticastGroup)) {
- this.multicastGroup = newMulticastGroup;
- updated = Boolean.TRUE;
- }
+ String newMulticastGroup = (String)
properties.get("multicastGroup");
+ if (multicastGroup != null &&
!multicastGroup.endsWith(newMulticastGroup)) {
+ this.multicastGroup = newMulticastGroup;
+ updated = Boolean.TRUE;
+ }
- int multicastPort = Integer.parseInt((String)
properties.get("multicastPort"));
- if (multicastPort != 0) {
- this.multicastPort = multicastPort;
- updated = Boolean.TRUE;
- }
+ int multicastPort = Integer.parseInt((String)
properties.get("multicastPort"));
+ if (multicastPort != 0) {
+ this.multicastPort = multicastPort;
+ updated = Boolean.TRUE;
+ }
- int newMulticastTimeoutSeconds = Integer.parseInt((String)
properties.get("multicastTimeoutSeconds"));
- if (multicastTimeoutSeconds != 0 && multicastTimeoutSeconds !=
newMulticastTimeoutSeconds) {
- this.multicastTimeoutSeconds = newMulticastTimeoutSeconds;
- updated = Boolean.TRUE;
- }
+ int newMulticastTimeoutSeconds = Integer.parseInt((String)
properties.get("multicastTimeoutSeconds"));
+ if (multicastTimeoutSeconds != 0 && multicastTimeoutSeconds !=
newMulticastTimeoutSeconds) {
+ this.multicastTimeoutSeconds = newMulticastTimeoutSeconds;
+ updated = Boolean.TRUE;
+ }
- Boolean newTcpIpEnabled = Boolean.parseBoolean((String)
properties.get("tcpIpEnabled"));
- if (tcpIpEnabled != newTcpIpEnabled) {
- this.tcpIpEnabled = newTcpIpEnabled;
- updated = Boolean.TRUE;
- }
+ Boolean newTcpIpEnabled = Boolean.parseBoolean((String)
properties.get("tcpIpEnabled"));
+ if (tcpIpEnabled != newTcpIpEnabled) {
+ this.tcpIpEnabled = newTcpIpEnabled;
+ updated = Boolean.TRUE;
+ }
- String newTcpIpMembers = (String) properties.get("tcpIpMembers");
- if (tcpIpMembers != null &&
!tcpIpMembers.endsWith(newTcpIpMembers)) {
- updated = Boolean.TRUE;
-
- String[] members = tcpIpMembers.split(",");
- if (members != null && members.length > 0) {
- tcpIpMemberList = new ArrayList<String>();
- for (String member : members) {
- tcpIpMemberList.add(member);
+ String newTcpIpMembers = (String)
properties.get("tcpIpMembers");
+ if (tcpIpMembers != null &&
!tcpIpMembers.endsWith(newTcpIpMembers)) {
+ updated = Boolean.TRUE;
+
+ String[] members = tcpIpMembers.split(",");
+ if (members != null && members.length > 0) {
+ tcpIpMemberSet = new LinkedHashSet<String>();
+ for (String member : members) {
+ tcpIpMemberSet.add(member);
+ }
}
}
- }
- }
- if (updated) {
- HazelcastInstance instance = lookupInstance();
- if (instance != null) {
- try {
-
instance.getConfig().setGroupConfig(buildGroupConfig());
-
instance.getConfig().getNetworkConfig().getJoin().setMulticastConfig(buildMulticastConfig());
-
instance.getConfig().getNetworkConfig().getJoin().setTcpIpConfig(buildTcpIpConfig());
- instance.getLifecycleService().restart();
- } catch (Exception ex) {
- LOGGER.error("Error while restarting Hazelcast
instance.", ex);
+ if (updated) {
+ HazelcastInstance instance = lookupInstance();
+ if (instance != null) {
+ try {
+
instance.getConfig().setGroupConfig(buildGroupConfig());
+
instance.getConfig().getNetworkConfig().getJoin().setMulticastConfig(buildMulticastConfig());
+
instance.getConfig().getNetworkConfig().getJoin().setTcpIpConfig(buildTcpIpConfig());
+ instance.getLifecycleService().restart();
+ } catch (Exception ex) {
+ LOGGER.error("Error while restarting Hazelcast
instance.", ex);
+ }
}
}
}
@@ -168,7 +171,19 @@ public class HazelcastServiceFactory imp
}
}
- public void destroy() {
+
+ public void updateMemberList() {
+ HazelcastInstance instance = lookupInstance();
+ if (instance != null) {
+ try {
+ instance.getConfig().setGroupConfig(buildGroupConfig());
+
instance.getConfig().getNetworkConfig().getJoin().setMulticastConfig(buildMulticastConfig());
+
instance.getConfig().getNetworkConfig().getJoin().setTcpIpConfig(buildTcpIpConfig());
+ instance.getLifecycleService().restart();
+ } catch (Exception ex) {
+ LOGGER.error("Error while restarting Hazelcast instance.", ex);
+ }
+ }
}
@@ -257,10 +272,65 @@ public class HazelcastServiceFactory imp
public TcpIpConfig buildTcpIpConfig() {
TcpIpConfig tcpIpConfig = new TcpIpConfig();
tcpIpConfig.setEnabled(tcpIpEnabled);
- tcpIpConfig.setMembers(tcpIpMemberList);
+ tcpIpConfig.setMembers(new ArrayList(tcpIpMemberSet));
return tcpIpConfig;
}
+ /**
+ * Converts a comma delimited String to a Set of Strings.
+ *
+ * @param text
+ * @return
+ */
+ private Set<String> createSetFromString(String text) {
+ Set<String> result = new LinkedHashSet<String>();
+ if (text != null) {
+ String[] items = text.split(",");
+ if (items != null && items.length > 0) {
+
+ for (String item : items) {
+ result.add(item);
+ }
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Returns true if both {@link Collection}s contain exactly the same items
(order doesn't matter).
+ *
+ * @param col1
+ * @param col2
+ * @return
+ */
+ private boolean collectionEquals(Collection col1, Collection col2) {
+ return collectionSubset(col1, col2) && collectionSubset(col2, col1);
+ }
+
+ /**
+ * Returns true if one {@link Collection} contains all items of the others
+ *
+ * @param source
+ * @param target
+ * @return
+ */
+ private boolean collectionSubset(Collection source, Collection target) {
+ if (source == null && target == null) {
+ return true;
+ } else if (source == null || target == null) {
+ return false;
+ } else if (source.isEmpty() && target.isEmpty()) {
+ return true;
+ } else {
+ for (Object item : source) {
+ if (!target.contains(item)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ }
+
public String getUsername() {
return username;
@@ -326,4 +396,11 @@ public class HazelcastServiceFactory imp
this.bundleContext = bundleContext;
}
+ public DiscoveryTask getDiscoveryTask() {
+ return discoveryTask;
+ }
+
+ public void setDiscoveryTask(DiscoveryTask discoveryTask) {
+ this.discoveryTask = discoveryTask;
+ }
}
Modified:
karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/resources/META-INF/spring/beans.xml
URL:
http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/resources/META-INF/spring/beans.xml?rev=1151222&r1=1151221&r2=1151222&view=diff
==============================================================================
---
karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/resources/META-INF/spring/beans.xml
(original)
+++
karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/resources/META-INF/spring/beans.xml
Tue Jul 26 19:53:02 2011
@@ -28,11 +28,18 @@
<bean id="instanceFactory"
class="org.apache.karaf.cellar.hazelcast.factory.HazelcastServiceFactory"
- destroy-method="destroy">
+ init-method="init" destroy-method="destroy">
+ <property name="discoveryTask" ref="discoveryTask"/>
<osgix:managed-properties
persistent-id="org.apache.karaf.cellar.instance" update-strategy="bean-managed"
update-method="createOrUpdate"/>
</bean>
+ <!-- Discovery Task -->
+ <bean id="discoveryTask"
class="org.apache.karaf.cellar.core.discovery.DiscoveryTask">
+ <property name="discoveryServices" ref="discoveryServices"/>
+ <property name="configurationAdmin" ref="configurationAdmin"/>
+ </bean>
+
<bean id="membershipListener"
class="org.apache.karaf.cellar.hazelcast.CellarMembershipListener">
<constructor-arg index="0" ref="hazelcast"/>
@@ -151,6 +158,9 @@
<osgi:reference id="registry"
interface="org.apache.karaf.cellar.core.event.EventHandlerRegistry"/>
<osgi:reference id="configurationAdmin"
interface="org.osgi.service.cm.ConfigurationAdmin"/>
+ <osgi:list id="discoveryServices" cardinality="0..N"
+
interface="org.apache.karaf.cellar.core.discovery.DiscoveryService"/>
+
<!-- Group Consumer & Producer Serices -->
<osgi:list id="groupEventProducers" cardinality="0..N"
interface="org.apache.karaf.cellar.core.event.EventProducer"
filter="(type = group)"/>
Modified:
karaf/cellar/branches/cellar-2.2.x/manual/src/main/webapp/user-guide/index.conf
URL:
http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/manual/src/main/webapp/user-guide/index.conf?rev=1151222&r1=1151221&r2=1151222&view=diff
==============================================================================
---
karaf/cellar/branches/cellar-2.2.x/manual/src/main/webapp/user-guide/index.conf
(original)
+++
karaf/cellar/branches/cellar-2.2.x/manual/src/main/webapp/user-guide/index.conf
Tue Jul 26 19:53:02 2011
@@ -4,3 +4,4 @@ h1. Karaf Cellar User Guide
* [Start Karaf Cellar|/user-guide/deploy.conf]
* [Nodes in Karaf Cellar|/user-guide/nodes]
* [Groups in Karaf Cellar|/user-guide/groups]
+* [Cellar Cloud Discovery|/user-guide/cloud]
\ No newline at end of file
Modified: karaf/cellar/branches/cellar-2.2.x/pom.xml
URL:
http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/pom.xml?rev=1151222&r1=1151221&r2=1151222&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/pom.xml (original)
+++ karaf/cellar/branches/cellar-2.2.x/pom.xml Tue Jul 26 19:53:02 2011
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!--
@@ -45,6 +44,8 @@
<servlet.api.version>2.5</servlet.api.version>
<slf4j.version>1.6.1</slf4j.version>
<spring.osgi.version>1.2.1</spring.osgi.version>
+ <jclouds.version>1.0.0</jclouds.version>
+ <joda-time.version>1.6.2</joda-time.version>
</properties>
<modules>
@@ -55,6 +56,7 @@
<module>shell</module>
<module>hazelcast</module>
<module>utils</module>
+ <module>cloud</module>
<module>webconsole</module>
<module>assembly</module>
</modules>
@@ -134,6 +136,11 @@
</dependency>
<dependency>
<groupId>org.apache.karaf.cellar</groupId>
+ <artifactId>org.apache.karaf.cellar.cloud</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.karaf.cellar</groupId>
<artifactId>org.apache.karaf.cellar.manual</artifactId>
<type>html</type>
<version>${project.version}</version>
@@ -232,6 +239,27 @@
<version>${spring.osgi.version}</version>
</dependency>
+
+ <!-- JClouds -->
+ <dependency>
+ <groupId>org.jclouds</groupId>
+ <artifactId>jclouds-blobstore</artifactId>
+ <version>${jclouds.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jclouds</groupId>
+ <artifactId>jclouds-allblobstore</artifactId>
+ <version>${jclouds.version}</version>
+ </dependency>
+
+ <!-- Joda Time -->
+ <dependency>
+ <groupId>joda-time</groupId>
+ <artifactId>joda-time</artifactId>
+ <version>${joda-time.version}</version>
+ </dependency>
+
<!-- OSGi -->
<dependency>
<groupId>org.osgi</groupId>
@@ -401,6 +429,7 @@
<instructions>
<Bundle-Name>${project.name}</Bundle-Name>
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
+
<Bundle-Activator>${osgi.bundle.activator}</Bundle-Activator>
<Export-Package>${osgi.export}</Export-Package>
<Import-Package>${osgi.import}</Import-Package>
<DynamicImport-Package>${osgi.dynamic.import}</DynamicImport-Package>