Author: [email protected]
Date: Thu Jan 26 10:37:24 2012
New Revision: 2001
Log:
Cleanup; improve readabiliy.
Modified:
trunk/amdatu-core/tenant-adaptor/src/main/java/org/amdatu/core/tenant/adaptor/MultiTenantBundleActivator.java
trunk/amdatu-core/tenant-adaptor/src/main/java/org/amdatu/core/tenant/adaptor/TenantAdapter.java
Modified:
trunk/amdatu-core/tenant-adaptor/src/main/java/org/amdatu/core/tenant/adaptor/MultiTenantBundleActivator.java
==============================================================================
---
trunk/amdatu-core/tenant-adaptor/src/main/java/org/amdatu/core/tenant/adaptor/MultiTenantBundleActivator.java
(original)
+++
trunk/amdatu-core/tenant-adaptor/src/main/java/org/amdatu/core/tenant/adaptor/MultiTenantBundleActivator.java
Thu Jan 26 10:37:24 2012
@@ -15,6 +15,8 @@
*/
package org.amdatu.core.tenant.adaptor;
+import static org.amdatu.core.tenant.Tenant.*;
+import static org.amdatu.core.tenant.TenantConstants.*;
import java.util.Properties;
import org.amdatu.core.tenant.Tenant;
@@ -46,38 +48,28 @@
public void init(BundleContext context, DependencyManager manager) throws
Exception {
m_context = context;
- // determine scope
- String scope = (String)
context.getBundle().getHeaders().get(TenantConstants.MULTITENANT_SCOPE_KEY);
- if (scope == null ||
(!scope.equals(TenantConstants.MULTITENANT_SCOPE_VALUE_PLATFORM)
- && !scope.equals(TenantConstants.MULTITENANT_SCOPE_VALUE_BOTH))) {
- // default to tenants
- scope = TenantConstants.MULTITENANT_SCOPE_VALUE_TENANTS;
- }
+ String scope = determineScope();
- // create platform instance
- if (!scope.equals(TenantConstants.MULTITENANT_SCOPE_VALUE_TENANTS)) {
- log(LogService.LOG_DEBUG, "[" +
TenantConstants.MULTITENANT_SCOPE_PLATFORM_TENANTID + "] Starting "
- + (String)
m_context.getBundle().getHeaders().get(Constants.BUNDLE_NAME), null);
+ if (createPlatformInstance(scope)) {
+ log(LogService.LOG_DEBUG, "[" +
MULTITENANT_SCOPE_PLATFORM_TENANTID + "] Starting "
+ + getBundleHeader(Constants.BUNDLE_NAME), null);
+
+ m_bundleActivatorClass =
getBundleHeader(MULTITENANT_BUNDLE_ACTIVATOR_KEY);
+ if (m_bundleActivatorClass == null) {
+ log(LogService.LOG_ERROR, "Missing manifest header " +
MULTITENANT_BUNDLE_ACTIVATOR_KEY, null);
+ return;
+ }
+
try {
- m_bundleActivatorClass =
- (String)
context.getBundle().getHeaders().get(TenantConstants.MULTITENANT_BUNDLE_ACTIVATOR_KEY);
- if (m_bundleActivatorClass == null) {
- log(LogService.LOG_ERROR, "Missing manifest header "
- + TenantConstants.MULTITENANT_BUNDLE_ACTIVATOR_KEY,
null);
- return;
- }
m_tenantBundleActivator =
(BundleActivator)
context.getBundle().loadClass(m_bundleActivatorClass).newInstance();
Properties props = new Properties();
- props.put(Tenant.TENANT_ID_SERVICEPROPERTY,
TenantConstants.MULTITENANT_SCOPE_PLATFORM_TENANTID);
+ props.put(TENANT_ID_SERVICEPROPERTY,
MULTITENANT_SCOPE_PLATFORM_TENANTID);
m_tenantAwareBundleContext =
- new TenantAwareBundleContext(context,
TenantConstants.MULTITENANT_SCOPE_PLATFORM_TENANTID, props,
- "(|("
- + Tenant.TENANT_ID_SERVICEPROPERTY + "="
- +
TenantConstants.MULTITENANT_SCOPE_PLATFORM_TENANTID + ")(!("
- + Tenant.TENANT_ID_SERVICEPROPERTY + "=*)))");
+ new TenantAwareBundleContext(context,
MULTITENANT_SCOPE_PLATFORM_TENANTID, props, getPlatformTenantFilter());
+
m_tenantBundleActivator.start(m_tenantAwareBundleContext);
}
catch (Exception e) {
@@ -85,8 +77,7 @@
}
}
- // create tenant adaptor
- if (!scope.equals(TenantConstants.MULTITENANT_SCOPE_VALUE_PLATFORM)) {
+ if (createTenantAdapter(scope)) {
manager.add(createAdapterService(Tenant.class, null)
.setImplementation(TenantAdapter.class)
.add(createServiceDependency()
@@ -101,6 +92,50 @@
public void destroy(BundleContext context, DependencyManager manager)
throws Exception {
}
+ /**
+ * @return
+ */
+ private String getPlatformTenantFilter() {
+ return String.format("(|(%1$s=%2$s)(!(%1$s=*)))",
TENANT_ID_SERVICEPROPERTY, MULTITENANT_SCOPE_PLATFORM_TENANTID);
+ }
+
+ /**
+ * @param scope
+ * @return
+ */
+ private boolean createPlatformInstance(String scope) {
+ return !MULTITENANT_SCOPE_VALUE_TENANTS.equals(scope);
+ }
+
+ /**
+ * @param scope
+ * @return
+ */
+ private boolean createTenantAdapter(String scope) {
+ return !MULTITENANT_SCOPE_VALUE_PLATFORM.equals(scope);
+ }
+
+ /**
+ * @return
+ */
+ private String determineScope() {
+ String scope = getBundleHeader(MULTITENANT_SCOPE_KEY);
+ if (scope == null
+ || (createTenantAdapter(scope) &&
!MULTITENANT_SCOPE_VALUE_BOTH.equals(scope))) {
+ // default to tenants
+ scope = MULTITENANT_SCOPE_VALUE_TENANTS;
+ }
+ return scope;
+ }
+
+ /**
+ * @param m_context
+ * @return
+ */
+ private String getBundleHeader(String key) {
+ return (String) m_context.getBundle().getHeaders().get(key);
+ }
+
private void log(int level, String message, Throwable exception) {
final ServiceReference ref =
m_context.getServiceReference(LogService.class.getName());
if (ref != null) {
Modified:
trunk/amdatu-core/tenant-adaptor/src/main/java/org/amdatu/core/tenant/adaptor/TenantAdapter.java
==============================================================================
---
trunk/amdatu-core/tenant-adaptor/src/main/java/org/amdatu/core/tenant/adaptor/TenantAdapter.java
(original)
+++
trunk/amdatu-core/tenant-adaptor/src/main/java/org/amdatu/core/tenant/adaptor/TenantAdapter.java
Thu Jan 26 10:37:24 2012
@@ -15,10 +15,12 @@
*/
package org.amdatu.core.tenant.adaptor;
+import static org.amdatu.core.tenant.Tenant.*;
+import static
org.amdatu.core.tenant.TenantConstants.MULTITENANT_BUNDLE_ACTIVATOR_KEY;
+
import java.util.Properties;
import org.amdatu.core.tenant.Tenant;
-import org.amdatu.core.tenant.TenantConstants;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.Constants;
@@ -35,34 +37,32 @@
private volatile BundleContext m_context;
private volatile Tenant m_tenant;
private volatile LogService m_log;
+
private String m_bundleActivatorClass;
private BundleActivator m_tenantBundleActivator;
private TenantAwareBundleContext m_tenantAwareBundleContext;
+ /**
+ * Called by Felix dependency manager when this service adapter is started.
+ */
public void start() {
- m_log.log(LogService.LOG_DEBUG, "[" + m_tenant.getId() + "] Starting "
- + (String)
m_context.getBundle().getHeaders().get(Constants.BUNDLE_NAME));
+ m_log.log(LogService.LOG_DEBUG, "[" + m_tenant.getId() + "] Starting "
+ getBundleHeader(Constants.BUNDLE_NAME));
+
+ m_bundleActivatorClass =
getBundleHeader(MULTITENANT_BUNDLE_ACTIVATOR_KEY);
+ if (m_bundleActivatorClass == null) {
+ m_log.log(LogService.LOG_ERROR, "Missing manifest header " +
MULTITENANT_BUNDLE_ACTIVATOR_KEY);
+ return;
+ }
+
try {
- m_bundleActivatorClass =
- (String)
m_context.getBundle().getHeaders().get(TenantConstants.MULTITENANT_BUNDLE_ACTIVATOR_KEY);
- if (m_bundleActivatorClass == null) {
- m_log.log(LogService.LOG_ERROR, "Missing manifest header "
- + TenantConstants.MULTITENANT_BUNDLE_ACTIVATOR_KEY);
- return;
- }
- m_tenantBundleActivator =
- (BundleActivator)
m_context.getBundle().loadClass(m_bundleActivatorClass).newInstance();
+ m_tenantBundleActivator = (BundleActivator)
m_context.getBundle().loadClass(m_bundleActivatorClass).newInstance();
Properties props = new Properties();
- props.put(Tenant.TENANT_ID_SERVICEPROPERTY, m_tenant.getId());
+ props.put(TENANT_ID_SERVICEPROPERTY, m_tenant.getId());
+ props.put(TENANT_NAME_SERVICEPROPERTY, m_tenant.getName());
+
+ m_tenantAwareBundleContext = new
TenantAwareBundleContext(m_context, m_tenant.getId(), props, getTenantFilter());
- m_tenantAwareBundleContext =
- new TenantAwareBundleContext(m_context, m_tenant.getId(),
props,
- "(|(objectClass=org.amdatu.web.rest.jaxrs.JaxRsSpi)"
- + "(objectClass=org.osgi.service.log.LogService)("
- + Tenant.TENANT_ID_SERVICEPROPERTY + "="
- + m_tenant.getId() + "))");
-
m_tenantBundleActivator.start(m_tenantAwareBundleContext);
}
catch (Exception e) {
@@ -70,17 +70,41 @@
}
}
+ /**
+ * Called by Felix dependency manager when this service adapter is stopped.
+ */
public void stop() {
- m_log.log(LogService.LOG_DEBUG, "[" + m_tenant.getId() + "] Stopping "
- + (String)
m_context.getBundle().getHeaders().get(Constants.BUNDLE_NAME));
+ m_log.log(LogService.LOG_DEBUG, "[" + m_tenant.getId() + "] Stopping "
+ getBundleHeader(Constants.BUNDLE_NAME));
+
try {
if (m_tenantBundleActivator != null) {
m_tenantBundleActivator.stop(m_tenantAwareBundleContext);
- m_tenantAwareBundleContext.unregisterServices();
}
}
catch (Exception e) {
m_log.log(LogService.LOG_ERROR, "Could not stop activator for
tenant " + m_tenant.getId(), e);
}
+ finally {
+ m_tenantAwareBundleContext.unregisterServices();
+ }
+ }
+
+ /**
+ * @return
+ */
+ private String getTenantFilter() {
+ return "(|(objectClass=org.amdatu.web.rest.jaxrs.JaxRsSpi)"
+ + "(objectClass=org.osgi.service.log.LogService)("
+ + TENANT_ID_SERVICEPROPERTY + "="
+ + m_tenant.getId() + "))";
}
+
+ /**
+ * @param m_context
+ * @return
+ */
+ private String getBundleHeader(String key) {
+ return (String) m_context.getBundle().getHeaders().get(key);
+ }
+
}
_______________________________________________
Amdatu-commits mailing list
[email protected]
http://lists.amdatu.org/mailman/listinfo/amdatu-commits