You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by mu...@apache.org on 2013/01/31 15:08:38 UTC
[3/5] git commit: refs/heads/events-framework - - remove Publish,
Subscrie annotation as they are not used - merge ActionEvent callback
into ActionEventUtils - static initialize event bus from component locator
- remove Publish, Subscrie annotation as they are not used
- merge ActionEvent callback into ActionEventUtils
- static initialize event bus from component locator
Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/e439d982
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/e439d982
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/e439d982
Branch: refs/heads/events-framework
Commit: e439d9824f2068c2700636548327f80d0e39677d
Parents: 7079bc2
Author: Murali Reddy <mu...@citrix.com>
Authored: Thu Jan 31 15:54:57 2013 +0530
Committer: Murali Reddy <mu...@citrix.com>
Committed: Thu Jan 31 19:37:51 2013 +0530
----------------------------------------------------------------------
.../framework/events/EventPublishCallback.java | 102 ------
.../cloudstack/framework/events/Publish.java | 38 --
.../cloudstack/framework/events/Subscribe.java | 35 --
.../configuration/DefaultInterceptorLibrary.java | 8 +-
.../src/com/cloud/event/ActionEventCallback.java | 136 --------
server/src/com/cloud/event/ActionEventUtils.java | 271 ++++++++++-----
server/src/com/cloud/event/AlertGenerator.java | 49 ++--
server/src/com/cloud/event/UsageEventUtils.java | 38 +--
.../com/cloud/network/NetworkStateListener.java | 65 ++--
.../storage/listener/VolumeStateListener.java | 65 ++--
server/src/com/cloud/vm/UserVmStateListener.java | 71 ++--
11 files changed, 332 insertions(+), 546 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e439d982/framework/events/src/org/apache/cloudstack/framework/events/EventPublishCallback.java
----------------------------------------------------------------------
diff --git a/framework/events/src/org/apache/cloudstack/framework/events/EventPublishCallback.java b/framework/events/src/org/apache/cloudstack/framework/events/EventPublishCallback.java
deleted file mode 100644
index 81c8ac4..0000000
--- a/framework/events/src/org/apache/cloudstack/framework/events/EventPublishCallback.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-
-package org.apache.cloudstack.framework.events;
-
-import com.cloud.utils.component.Adapters;
-import com.cloud.utils.component.AnnotationInterceptor;
-import com.cloud.utils.component.ComponentLocator;
-import net.sf.cglib.proxy.Callback;
-import net.sf.cglib.proxy.MethodInterceptor;
-import net.sf.cglib.proxy.MethodProxy;
-
-import java.lang.reflect.AnnotatedElement;
-import java.lang.reflect.Method;
-import java.util.Enumeration;
-
-public class EventPublishCallback implements MethodInterceptor, AnnotationInterceptor<Publish> {
-
- private static EventBus _eventBus = null;
-
- @Override
- public Object intercept(Object object, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
- Publish event = interceptStart(method);
- boolean success = true;
- try {
- return methodProxy.invokeSuper(object, args);
- } catch (Exception e){
- success = false;
- interceptException(method, event);
- throw e;
- } finally {
- if(success){
- interceptComplete(method, event);
- }
- }
- }
-
- @Override
- public boolean needToIntercept(AnnotatedElement element) {
- if (!(element instanceof Method)) {
- return false;
-
- }
- Method method = (Method)element;
- Publish event = method.getAnnotation(Publish.class);
- if (event != null) {
- return true;
- }
- return false;
- }
-
- @Override
- public Publish interceptStart(AnnotatedElement element) {
- return null;
- }
-
- @Override
- public void interceptComplete(AnnotatedElement element, Publish event) {
- _eventBus = getEventBus();
- if (_eventBus != null) {
-
- }
- }
-
- @Override
- public void interceptException(AnnotatedElement element, Publish attach) {
- return;
- }
-
- @Override
- public Callback getCallback() {
- return this;
- }
-
- private EventBus getEventBus() {
- if (_eventBus == null) {
- ComponentLocator locator = ComponentLocator.getLocator("management-server");
- Adapters<EventBus> eventBusImpls = locator.getAdapters(EventBus.class);
- if (eventBusImpls != null) {
- Enumeration<EventBus> eventBusenum = eventBusImpls.enumeration();
- _eventBus = eventBusenum.nextElement();
- }
- }
- return _eventBus;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e439d982/framework/events/src/org/apache/cloudstack/framework/events/Publish.java
----------------------------------------------------------------------
diff --git a/framework/events/src/org/apache/cloudstack/framework/events/Publish.java b/framework/events/src/org/apache/cloudstack/framework/events/Publish.java
deleted file mode 100644
index 8f10972..0000000
--- a/framework/events/src/org/apache/cloudstack/framework/events/Publish.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-
-package org.apache.cloudstack.framework.events;
-
-import static java.lang.annotation.ElementType.METHOD;
-import static java.lang.annotation.ElementType.TYPE;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-@Target({ TYPE, METHOD })
-@Retention(RUNTIME)
-public @interface Publish {
-
- String eventCategory();
-
- String eventType();
-
- String eventDescription();
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e439d982/framework/events/src/org/apache/cloudstack/framework/events/Subscribe.java
----------------------------------------------------------------------
diff --git a/framework/events/src/org/apache/cloudstack/framework/events/Subscribe.java b/framework/events/src/org/apache/cloudstack/framework/events/Subscribe.java
deleted file mode 100644
index 74997f6..0000000
--- a/framework/events/src/org/apache/cloudstack/framework/events/Subscribe.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-
-package org.apache.cloudstack.framework.events;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import static java.lang.annotation.ElementType.METHOD;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-
-@Target({METHOD })
-@Retention(RUNTIME)
-public @interface Subscribe {
-
- String eventCategory();
-
- String eventType();
-}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e439d982/server/src/com/cloud/configuration/DefaultInterceptorLibrary.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/configuration/DefaultInterceptorLibrary.java b/server/src/com/cloud/configuration/DefaultInterceptorLibrary.java
index 380552d..6feff4c 100644
--- a/server/src/com/cloud/configuration/DefaultInterceptorLibrary.java
+++ b/server/src/com/cloud/configuration/DefaultInterceptorLibrary.java
@@ -16,20 +16,20 @@
// under the License.
package com.cloud.configuration;
-import java.util.List;
-
-import com.cloud.event.ActionEventCallback;
+import com.cloud.event.ActionEventUtils;
import com.cloud.utils.component.AnnotationInterceptor;
import com.cloud.utils.component.InterceptorLibrary;
import com.cloud.utils.db.DatabaseCallback;
import org.apache.cloudstack.framework.events.EventPublishCallback;
+import java.util.List;
+
public class DefaultInterceptorLibrary implements InterceptorLibrary {
@Override
public void addInterceptors(List<AnnotationInterceptor<?>> interceptors) {
interceptors.add(new DatabaseCallback());
- interceptors.add(new ActionEventCallback());
+ interceptors.add(new ActionEventUtils.ActionEventCallback());
interceptors.add(new EventPublishCallback());
}
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e439d982/server/src/com/cloud/event/ActionEventCallback.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/event/ActionEventCallback.java b/server/src/com/cloud/event/ActionEventCallback.java
deleted file mode 100644
index 72ce418..0000000
--- a/server/src/com/cloud/event/ActionEventCallback.java
+++ /dev/null
@@ -1,136 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you 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.
-package com.cloud.event;
-
-import com.cloud.user.UserContext;
-import com.cloud.utils.component.AnnotationInterceptor;
-import net.sf.cglib.proxy.Callback;
-import net.sf.cglib.proxy.MethodInterceptor;
-import net.sf.cglib.proxy.MethodProxy;
-import org.apache.log4j.Logger;
-
-import java.lang.reflect.AnnotatedElement;
-import java.lang.reflect.Method;
-
-public class ActionEventCallback implements MethodInterceptor, AnnotationInterceptor<EventVO> {
-
- private static final Logger s_logger = Logger.getLogger(ActionEventCallback.class);
-
- @Override
- public Object intercept(Object object, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
- EventVO event = interceptStart(method);
- boolean success = true;
- try {
- return methodProxy.invokeSuper(object, args);
- } catch (Exception e){
- success = false;
- interceptException(method, event);
- throw e;
- } finally {
- if(success){
- interceptComplete(method, event);
- }
- }
- }
-
- @Override
- public boolean needToIntercept(AnnotatedElement element) {
- if (!(element instanceof Method)) {
- return false;
-
- }
- Method method = (Method)element;
- ActionEvent actionEvent = method.getAnnotation(ActionEvent.class);
- if (actionEvent != null) {
- return true;
- }
-
- return false;
- }
-
- @Override
- public EventVO interceptStart(AnnotatedElement element) {
- EventVO event = null;
- Method method = (Method)element;
- ActionEvent actionEvent = method.getAnnotation(ActionEvent.class);
- if (actionEvent != null) {
- boolean async = actionEvent.async();
- if(async){
- UserContext ctx = UserContext.current();
- long userId = ctx.getCallerUserId();
- long accountId = ctx.getAccountId();
- long startEventId = ctx.getStartEventId();
- String eventDescription = actionEvent.eventDescription();
- if(ctx.getEventDetails() != null){
- eventDescription += ". "+ctx.getEventDetails();
- }
- ActionEventUtils.onStartedActionEvent(userId, accountId, actionEvent.eventType(), eventDescription, startEventId);
- }
- }
- return event;
- }
-
- @Override
- public void interceptComplete(AnnotatedElement element, EventVO event) {
- Method method = (Method)element;
- ActionEvent actionEvent = method.getAnnotation(ActionEvent.class);
- if (actionEvent != null) {
- UserContext ctx = UserContext.current();
- long userId = ctx.getCallerUserId();
- long accountId = ctx.getAccountId();
- long startEventId = ctx.getStartEventId();
- String eventDescription = actionEvent.eventDescription();
- if(ctx.getEventDetails() != null){
- eventDescription += ". "+ctx.getEventDetails();
- }
- if(actionEvent.create()){
- //This start event has to be used for subsequent events of this action
- startEventId = ActionEventUtils.onCreatedActionEvent(userId, accountId, EventVO.LEVEL_INFO, actionEvent.eventType(), "Successfully created entity for " + eventDescription);
- ctx.setStartEventId(startEventId);
- } else {
- ActionEventUtils.onCompletedActionEvent(userId, accountId, EventVO.LEVEL_INFO, actionEvent.eventType(), "Successfully completed " + eventDescription, startEventId);
- }
- }
- }
-
- @Override
- public void interceptException(AnnotatedElement element, EventVO event) {
- Method method = (Method)element;
- ActionEvent actionEvent = method.getAnnotation(ActionEvent.class);
- if (actionEvent != null) {
- UserContext ctx = UserContext.current();
- long userId = ctx.getCallerUserId();
- long accountId = ctx.getAccountId();
- long startEventId = ctx.getStartEventId();
- String eventDescription = actionEvent.eventDescription();
- if(ctx.getEventDetails() != null){
- eventDescription += ". "+ctx.getEventDetails();
- }
- if(actionEvent.create()){
- long eventId = ActionEventUtils.onCreatedActionEvent(userId, accountId, EventVO.LEVEL_ERROR, actionEvent.eventType(), "Error while creating entity for " + eventDescription);
- ctx.setStartEventId(eventId);
- } else {
- ActionEventUtils.onCompletedActionEvent(userId, accountId, EventVO.LEVEL_ERROR, actionEvent.eventType(), "Error while " + eventDescription, startEventId);
- }
- }
- }
-
- @Override
- public Callback getCallback() {
- return this;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e439d982/server/src/com/cloud/event/ActionEventUtils.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/event/ActionEventUtils.java b/server/src/com/cloud/event/ActionEventUtils.java
index f7157ba..744f46f 100755
--- a/server/src/com/cloud/event/ActionEventUtils.java
+++ b/server/src/com/cloud/event/ActionEventUtils.java
@@ -22,145 +22,149 @@ import com.cloud.server.ManagementServer;
import com.cloud.user.Account;
import com.cloud.user.AccountVO;
import com.cloud.user.User;
+import com.cloud.user.UserContext;
import com.cloud.user.dao.AccountDao;
import com.cloud.user.dao.UserDao;
import com.cloud.utils.component.Adapters;
+import com.cloud.utils.component.AnnotationInterceptor;
import com.cloud.utils.component.ComponentLocator;
+import net.sf.cglib.proxy.Callback;
+import net.sf.cglib.proxy.MethodInterceptor;
+import net.sf.cglib.proxy.MethodProxy;
import org.apache.cloudstack.framework.events.EventBus;
import org.apache.cloudstack.framework.events.EventBusException;
import org.apache.log4j.Logger;
+import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Method;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
public class ActionEventUtils {
+ private static EventDao _eventDao = ComponentLocator.getLocator(ManagementServer.Name).getDao(EventDao.class);
+ private static AccountDao _accountDao = ComponentLocator.getLocator(ManagementServer.Name).getDao(AccountDao.class);
+ protected static UserDao _userDao = ComponentLocator.getLocator(ManagementServer.Name).getDao(UserDao.class);
private static final Logger s_logger = Logger.getLogger(ActionEventUtils.class);
- private static EventDao _eventDao = ComponentLocator.getLocator(ManagementServer.Name).getDao(EventDao.class);
- private static AccountDao _accountDao = ComponentLocator.getLocator(ManagementServer.Name).getDao(AccountDao.class);
- protected static UserDao _userDao = ComponentLocator.getLocator(ManagementServer.Name).getDao(UserDao.class);;
+ // get the event bus provider if configured
protected static EventBus _eventBus = null;
- protected static boolean _eventBusProviderLoaded = false;
+
+ static {
+ Adapters<EventBus> eventBusImpls = ComponentLocator.getLocator(ManagementServer.Name).getAdapters(EventBus.class);
+ if (eventBusImpls != null) {
+ Enumeration<EventBus> eventBusenum = eventBusImpls.enumeration();
+ if (eventBusenum != null && eventBusenum.hasMoreElements()) {
+ _eventBus = eventBusenum.nextElement(); // configure event bus if configured
+ }
+ }
+ }
public static Long onActionEvent(Long userId, Long accountId, Long domainId, String type, String description) {
- publishActionEvent(userId, accountId, EventCategory.ACTION_EVENT.getName(),
- type, com.cloud.event.Event.State.Scheduled);
+ publishOnEventBus(userId, accountId, EventCategory.ACTION_EVENT.getName(),
+ type, com.cloud.event.Event.State.Completed);
+
+ Event event = persistActionEvent(userId, accountId, domainId, null, type, Event.State.Completed,
+ description, null);
- EventVO event = new EventVO();
- event.setUserId(userId);
- event.setAccountId(accountId);
- event.setDomainId(domainId);
- event.setType(type);
- event.setDescription(description);
- event = _eventDao.persist(event);
return event.getId();
}
-
+
/*
* Save event after scheduling an async job
*/
- public static Long onScheduledActionEvent(Long userId, Long accountId, String type, String description, long startEventId) {
+ public static Long onScheduledActionEvent(Long userId, Long accountId, String type, String description,
+ long startEventId) {
- publishActionEvent(userId, accountId, EventCategory.ACTION_EVENT.getName(), type,
+ publishOnEventBus(userId, accountId, EventCategory.ACTION_EVENT.getName(), type,
com.cloud.event.Event.State.Scheduled);
- EventVO event = new EventVO();
- event.setUserId(userId);
- event.setAccountId(accountId);
- event.setDomainId(getDomainId(accountId));
- event.setType(type);
- event.setStartId(startEventId);
- event.setState(Event.State.Scheduled);
- event.setDescription("Scheduled async job for "+description);
- event = _eventDao.persist(event);
+ Event event = persistActionEvent(userId, accountId, null, null, type, Event.State.Scheduled,
+ description, startEventId);
+
return event.getId();
}
-
+
/*
* Save event after starting execution of an async job
*/
- public static Long onStartedActionEvent(Long userId, Long accountId, String type, String description, long startEventId) {
+ public static Long onStartedActionEvent(Long userId, Long accountId, String type, String description,
+ long startEventId) {
- publishActionEvent(userId, accountId, EventCategory.ACTION_EVENT.getName(), type,
+ publishOnEventBus(userId, accountId, EventCategory.ACTION_EVENT.getName(), type,
com.cloud.event.Event.State.Started);
- EventVO event = new EventVO();
- event.setUserId(userId);
- event.setAccountId(accountId);
- event.setDomainId(getDomainId(accountId));
- event.setType(type);
- event.setState(Event.State.Started);
- event.setDescription("Starting job for "+description);
- event.setStartId(startEventId);
- event = _eventDao.persist(event);
- return event.getId();
- }
+ Event event = persistActionEvent(userId, accountId, null, null, type, Event.State.Started,
+ description, startEventId);
+ return event.getId();
+ }
- public static Long onCompletedActionEvent(Long userId, Long accountId, String level, String type, String description, long startEventId) {
+ public static Long onCompletedActionEvent(Long userId, Long accountId, String level, String type,
+ String description, long startEventId) {
- publishActionEvent(userId, accountId, EventCategory.ACTION_EVENT.getName(), type,
+ publishOnEventBus(userId, accountId, EventCategory.ACTION_EVENT.getName(), type,
com.cloud.event.Event.State.Completed);
- EventVO event = new EventVO();
- event.setUserId(userId);
- event.setAccountId(accountId);
- event.setDomainId(getDomainId(accountId));
- event.setType(type);
- event.setDescription(description);
- event.setLevel(level);
- event.setStartId(startEventId);
- event = _eventDao.persist(event);
- return (event != null ? event.getId() : null);
+ Event event = persistActionEvent(userId, accountId, null, level, type, Event.State.Completed,
+ description, startEventId);
+
+ return event.getId();
}
-
+
public static Long onCreatedActionEvent(Long userId, Long accountId, String level, String type, String description) {
- publishActionEvent(userId, accountId, EventCategory.ACTION_EVENT.getName(), type,
+ publishOnEventBus(userId, accountId, EventCategory.ACTION_EVENT.getName(), type,
com.cloud.event.Event.State.Created);
+ Event event = persistActionEvent(userId, accountId, null, level, type, Event.State.Created, description, null);
+
+ return event.getId();
+ }
+
+ private static Event persistActionEvent(Long userId, Long accountId, Long domainId, String level, String type,
+ Event.State state, String description, Long startEventId) {
EventVO event = new EventVO();
event.setUserId(userId);
event.setAccountId(accountId);
- event.setDomainId(getDomainId(accountId));
event.setType(type);
- event.setLevel(level);
- event.setState(Event.State.Created);
+ event.setState(state);
event.setDescription(description);
+ if (domainId != null) {
+ event.setDomainId(domainId);
+ } else {
+ event.setDomainId(getDomainId(accountId));
+ }
+ if (level != null && !level.isEmpty()) {
+ event.setLevel(level);
+ }
+ if (startEventId != null) {
+ event.setStartId(startEventId);
+ }
event = _eventDao.persist(event);
- return event.getId();
- }
-
- private static long getDomainId(long accountId){
- AccountVO account = _accountDao.findByIdIncludingRemoved(accountId);
- return account.getDomainId();
+ return event;
}
- public static void publishActionEvent(long userId, long accountId, String eventCategory,
+ private static void publishOnEventBus(long userId, long accountId, String eventCategory,
String eventType, Event.State state) {
-
- if (getEventBusProvider() == null) {
- return; // no provider is configured to provider events bus, so just return
+ if (_eventBus == null) {
+ return; // no provider is configured to provide events bus, so just return
}
+ org.apache.cloudstack.framework.events.Event event = new org.apache.cloudstack.framework.events.Event(
+ ManagementServer.Name,
+ eventCategory,
+ eventType,
+ EventTypes.getEntityForEvent(eventType), null);
+
Map<String, String> eventDescription = new HashMap<String, String>();
Account account = _accountDao.findById(accountId);
User user = _userDao.findById(userId);
-
eventDescription.put("user", user.getUuid());
eventDescription.put("account", account.getUuid());
eventDescription.put("event", eventType);
eventDescription.put("status", state.toString());
-
- String resourceType = EventTypes.getEntityForEvent(eventType);
-
- org.apache.cloudstack.framework.events.Event event = new org.apache.cloudstack.framework.events.Event(
- ManagementServer.Name,
- eventCategory,
- eventType,
- resourceType, null);
event.setDescription(eventDescription);
try {
@@ -170,18 +174,115 @@ public class ActionEventUtils {
}
}
- private static EventBus getEventBusProvider() {
- if (!_eventBusProviderLoaded) {
- ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name);
- Adapters<EventBus> eventBusImpls = locator.getAdapters(EventBus.class);
- if (eventBusImpls != null) {
- Enumeration<EventBus> eventBusenum = eventBusImpls.enumeration();
- if (eventBusenum != null && eventBusenum.hasMoreElements()) {
- _eventBus = eventBusenum.nextElement();
+ private static long getDomainId(long accountId){
+ AccountVO account = _accountDao.findByIdIncludingRemoved(accountId);
+ return account.getDomainId();
+ }
+
+ public static class ActionEventCallback implements MethodInterceptor, AnnotationInterceptor<EventVO> {
+
+ @Override
+ public Object intercept(Object object, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
+ EventVO event = interceptStart(method);
+ boolean success = true;
+ try {
+ return methodProxy.invokeSuper(object, args);
+ } catch (Exception e){
+ success = false;
+ interceptException(method, event);
+ throw e;
+ } finally {
+ if(success){
+ interceptComplete(method, event);
}
}
- _eventBusProviderLoaded = true;
}
- return _eventBus;
+
+ @Override
+ public boolean needToIntercept(AnnotatedElement element) {
+ if (!(element instanceof Method)) {
+ return false;
+
+ }
+ Method method = (Method)element;
+ ActionEvent actionEvent = method.getAnnotation(ActionEvent.class);
+ if (actionEvent != null) {
+ return true;
+ }
+
+ return false;
+ }
+
+ @Override
+ public EventVO interceptStart(AnnotatedElement element) {
+ EventVO event = null;
+ Method method = (Method)element;
+ ActionEvent actionEvent = method.getAnnotation(ActionEvent.class);
+ if (actionEvent != null) {
+ boolean async = actionEvent.async();
+ if(async){
+ UserContext ctx = UserContext.current();
+ long userId = ctx.getCallerUserId();
+ long accountId = ctx.getAccountId();
+ long startEventId = ctx.getStartEventId();
+ String eventDescription = actionEvent.eventDescription();
+ if(ctx.getEventDetails() != null){
+ eventDescription += ". "+ctx.getEventDetails();
+ }
+ ActionEventUtils.onStartedActionEvent(userId, accountId, actionEvent.eventType(), eventDescription, startEventId);
+ }
+ }
+ return event;
+ }
+
+ @Override
+ public void interceptComplete(AnnotatedElement element, EventVO event) {
+ Method method = (Method)element;
+ ActionEvent actionEvent = method.getAnnotation(ActionEvent.class);
+ if (actionEvent != null) {
+ UserContext ctx = UserContext.current();
+ long userId = ctx.getCallerUserId();
+ long accountId = ctx.getAccountId();
+ long startEventId = ctx.getStartEventId();
+ String eventDescription = actionEvent.eventDescription();
+ if(ctx.getEventDetails() != null){
+ eventDescription += ". "+ctx.getEventDetails();
+ }
+ if(actionEvent.create()){
+ //This start event has to be used for subsequent events of this action
+ startEventId = ActionEventUtils.onCreatedActionEvent(userId, accountId, EventVO.LEVEL_INFO, actionEvent.eventType(), "Successfully created entity for " + eventDescription);
+ ctx.setStartEventId(startEventId);
+ } else {
+ ActionEventUtils.onCompletedActionEvent(userId, accountId, EventVO.LEVEL_INFO, actionEvent.eventType(), "Successfully completed " + eventDescription, startEventId);
+ }
+ }
+ }
+
+ @Override
+ public void interceptException(AnnotatedElement element, EventVO event) {
+ Method method = (Method)element;
+ ActionEvent actionEvent = method.getAnnotation(ActionEvent.class);
+ if (actionEvent != null) {
+ UserContext ctx = UserContext.current();
+ long userId = ctx.getCallerUserId();
+ long accountId = ctx.getAccountId();
+ long startEventId = ctx.getStartEventId();
+ String eventDescription = actionEvent.eventDescription();
+ if(ctx.getEventDetails() != null){
+ eventDescription += ". "+ctx.getEventDetails();
+ }
+ if(actionEvent.create()){
+ long eventId = ActionEventUtils.onCreatedActionEvent(userId, accountId, EventVO.LEVEL_ERROR, actionEvent.eventType(), "Error while creating entity for " + eventDescription);
+ ctx.setStartEventId(eventId);
+ } else {
+ ActionEventUtils.onCompletedActionEvent(userId, accountId, EventVO.LEVEL_ERROR, actionEvent.eventType(), "Error while " + eventDescription, startEventId);
+ }
+ }
+ }
+
+ @Override
+ public Callback getCallback() {
+ return this;
+ }
}
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e439d982/server/src/com/cloud/event/AlertGenerator.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/event/AlertGenerator.java b/server/src/com/cloud/event/AlertGenerator.java
index 640f604..4286377 100644
--- a/server/src/com/cloud/event/AlertGenerator.java
+++ b/server/src/com/cloud/event/AlertGenerator.java
@@ -34,17 +34,33 @@ import java.util.Map;
public class AlertGenerator {
private static final Logger s_logger = Logger.getLogger(AlertGenerator.class);
- protected static EventBus _eventBus = null;
- protected static boolean _eventBusProviderLoaded = false;
-
private static DataCenterDao _dcDao = ComponentLocator.getLocator(ManagementServer.Name).getDao(DataCenterDao.class);
private static HostPodDao _podDao = ComponentLocator.getLocator(ManagementServer.Name).getDao(HostPodDao.class);
- public static void publishAlertOnEventBus(String alertType, long dataCenterId, Long podId, String subject, String body) {
- if (getEventBusProvider() == null) {
+ // get the event bus provider if configured
+ protected static EventBus _eventBus = null;
+ static {
+ Adapters<EventBus> eventBusImpls = ComponentLocator.getLocator(ManagementServer.Name).getAdapters(EventBus.class);
+ if (eventBusImpls != null) {
+ Enumeration<EventBus> eventBusenum = eventBusImpls.enumeration();
+ if (eventBusenum != null && eventBusenum.hasMoreElements()) {
+ _eventBus = eventBusenum.nextElement(); // configure event bus if configured
+ }
+ }
+ }
+ public static void publishAlertOnEventBus(String alertType, long dataCenterId, Long podId, String subject, String body) {
+ if (_eventBus == null) {
+ return; // no provider is configured to provider events bus, so just return
}
+ org.apache.cloudstack.framework.events.Event event =
+ new org.apache.cloudstack.framework.events.Event(ManagementServer.Name,
+ EventCategory.ALERT_EVENT.getName(),
+ alertType,
+ null,
+ null);
+
Map<String, String> eventDescription = new HashMap<String, String>();
DataCenterVO dc = _dcDao.findById(dataCenterId);
HostPodVO pod = _podDao.findById(podId);
@@ -55,38 +71,17 @@ public class AlertGenerator {
} else {
eventDescription.put("dataCenterId", null);
}
-
if (pod != null) {
eventDescription.put("podId", pod.getUuid());
} else {
eventDescription.put("podId", null);
}
- org.apache.cloudstack.framework.events.Event event =
- new org.apache.cloudstack.framework.events.Event(ManagementServer.Name,
- EventCategory.ALERT_EVENT.getName(),
- alertType,
- null,
- null);
event.setDescription(eventDescription);
+
try {
_eventBus.publish(event);
} catch (EventBusException e) {
s_logger.warn("Failed to publish alert on the the event bus.");
}
}
-
- private static EventBus getEventBusProvider() {
- if (!_eventBusProviderLoaded) {
- ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name);
- Adapters<EventBus> eventBusImpls = locator.getAdapters(EventBus.class);
- if (eventBusImpls != null) {
- Enumeration<EventBus> eventBusenum = eventBusImpls.enumeration();
- if (eventBusenum != null && eventBusenum.hasMoreElements()) {
- _eventBus = eventBusenum.nextElement();
- }
- }
- _eventBusProviderLoaded = true;
- }
- return _eventBus;
- }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e439d982/server/src/com/cloud/event/UsageEventUtils.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/event/UsageEventUtils.java b/server/src/com/cloud/event/UsageEventUtils.java
index ebe8f0c..904525e 100644
--- a/server/src/com/cloud/event/UsageEventUtils.java
+++ b/server/src/com/cloud/event/UsageEventUtils.java
@@ -22,10 +22,19 @@ public class UsageEventUtils {
private static UsageEventDao _usageEventDao = ComponentLocator.getLocator(ManagementServer.Name).getDao(UsageEventDao.class);
private static AccountDao _accountDao = ComponentLocator.getLocator(ManagementServer.Name).getDao(AccountDao.class);
private static DataCenterDao _dcDao = ComponentLocator.getLocator(ManagementServer.Name).getDao(DataCenterDao.class);
-
private static final Logger s_logger = Logger.getLogger(UsageEventUtils.class);
+
+ // get the event bus provider if configured
protected static EventBus _eventBus = null;
- protected static boolean _eventBusLoaded = false;
+ static {
+ Adapters<EventBus> eventBusImpls = ComponentLocator.getLocator(ManagementServer.Name).getAdapters(EventBus.class);
+ if (eventBusImpls != null) {
+ Enumeration<EventBus> eventBusenum = eventBusImpls.enumeration();
+ if (eventBusenum != null && eventBusenum.hasMoreElements()) {
+ _eventBus = eventBusenum.nextElement(); // configure event bus if configured
+ }
+ }
+ }
public static void publishUsageEvent(String usageType, long accountId, long zoneId,
long resourceId, String resourceName,
@@ -83,43 +92,28 @@ public class UsageEventUtils {
private static void publishUsageEvent(String usageEventType, Long accountId, Long zoneId, String resourceType, String resourceUUID) {
- if (getEventBusProvider() == null) {
+ if (_eventBus == null) {
return; // no provider is configured to provider events bus, so just return
}
Account account = _accountDao.findById(accountId);
DataCenterVO dc = _dcDao.findById(zoneId);
- Map<String, String> eventDescription = new HashMap<String, String>();
+ Event event = new Event(ManagementServer.Name, EventCategory.USAGE_EVENT.getName(), usageEventType,
+ resourceType, resourceUUID);
+ Map<String, String> eventDescription = new HashMap<String, String>();
eventDescription.put("account", account.getUuid());
eventDescription.put("zone", dc.getUuid());
eventDescription.put("event", usageEventType);
eventDescription.put("resource", resourceType);
eventDescription.put("id", resourceUUID);
-
- Event event = new Event(ManagementServer.Name, EventCategory.USAGE_EVENT.getName(), usageEventType,
- resourceType, resourceUUID);
event.setDescription(eventDescription);
+
try {
_eventBus.publish(event);
} catch (EventBusException e) {
s_logger.warn("Failed to publish usage event on the the event bus.");
}
}
-
- private static EventBus getEventBusProvider() {
- if (!_eventBusLoaded) {
- _eventBusLoaded = true;
- ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name);
- Adapters<EventBus> eventBusImpls = locator.getAdapters(EventBus.class);
- if (eventBusImpls != null) {
- Enumeration<EventBus> eventBusenum = eventBusImpls.enumeration();
- if (eventBusenum != null && eventBusenum.hasMoreElements()) {
- _eventBus = eventBusenum.nextElement();
- }
- }
- }
- return _eventBus;
- }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e439d982/server/src/com/cloud/network/NetworkStateListener.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkStateListener.java b/server/src/com/cloud/network/NetworkStateListener.java
index 7235fea..b0522b2 100644
--- a/server/src/com/cloud/network/NetworkStateListener.java
+++ b/server/src/com/cloud/network/NetworkStateListener.java
@@ -21,14 +21,24 @@ public class NetworkStateListener implements StateListener<State, Event, Network
protected UsageEventDao _usageEventDao;
protected NetworkDao _networkDao;
+
+ // get the event bus provider if configured
protected static EventBus _eventBus = null;
+ static {
+ Adapters<EventBus> eventBusImpls = ComponentLocator.getLocator(ManagementServer.Name).getAdapters(EventBus.class);
+ if (eventBusImpls != null) {
+ Enumeration<EventBus> eventBusenum = eventBusImpls.enumeration();
+ if (eventBusenum != null && eventBusenum.hasMoreElements()) {
+ _eventBus = eventBusenum.nextElement(); // configure event bus if configured
+ }
+ }
+ }
private static final Logger s_logger = Logger.getLogger(NetworkStateListener.class);
public NetworkStateListener(UsageEventDao usageEventDao, NetworkDao networkDao) {
this._usageEventDao = usageEventDao;
this._networkDao = networkDao;
- initEventBusProvider();
}
@Override
@@ -44,25 +54,28 @@ public class NetworkStateListener implements StateListener<State, Event, Network
}
private void pubishOnEventBus(String event, String status, Network vo, State oldState, State newState) {
- if (_eventBus != null) {
- String resourceName = getEntityFromClassName(Network.class.getName());
- org.apache.cloudstack.framework.events.Event eventMsg = new org.apache.cloudstack.framework.events.Event(
- ManagementServer.Name,
- EventCategory.RESOURCE_STATE_CHANGE_EVENT.getName(),
- event,
- resourceName,
- vo.getUuid());
- Map<String, String> eventDescription = new HashMap<String, String>();
- eventDescription.put("resource", resourceName);
- eventDescription.put("id", vo.getUuid());
- eventDescription.put("old-state", oldState.name());
- eventDescription.put("new-state", newState.name());
- eventMsg.setDescription(eventDescription);
- try {
- _eventBus.publish(eventMsg);
- } catch (EventBusException e) {
- s_logger.warn("Failed to publish action event on the the event bus.");
- }
+
+ if (_eventBus == null) {
+ return; // no provider is configured to provide events bus, so just return
+ }
+
+ String resourceName = getEntityFromClassName(Network.class.getName());
+ org.apache.cloudstack.framework.events.Event eventMsg = new org.apache.cloudstack.framework.events.Event(
+ ManagementServer.Name,
+ EventCategory.RESOURCE_STATE_CHANGE_EVENT.getName(),
+ event,
+ resourceName,
+ vo.getUuid());
+ Map<String, String> eventDescription = new HashMap<String, String>();
+ eventDescription.put("resource", resourceName);
+ eventDescription.put("id", vo.getUuid());
+ eventDescription.put("old-state", oldState.name());
+ eventDescription.put("new-state", newState.name());
+ eventMsg.setDescription(eventDescription);
+ try {
+ _eventBus.publish(eventMsg);
+ } catch (EventBusException e) {
+ s_logger.warn("Failed to publish action event on the the event bus.");
}
}
@@ -74,16 +87,4 @@ public class NetworkStateListener implements StateListener<State, Event, Network
}
return entityName;
}
-
- private void initEventBusProvider() {
- ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name);
- Adapters<EventBus> eventBusImpls = locator.getAdapters(EventBus.class);
- if (eventBusImpls != null) {
- Enumeration<EventBus> eventBusenum = eventBusImpls.enumeration();
- if (eventBusenum != null && eventBusenum.hasMoreElements()) {
- _eventBus = eventBusenum.nextElement();
- }
- }
- }
-
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e439d982/server/src/com/cloud/storage/listener/VolumeStateListener.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/listener/VolumeStateListener.java b/server/src/com/cloud/storage/listener/VolumeStateListener.java
index da0ed11..46e2b97 100644
--- a/server/src/com/cloud/storage/listener/VolumeStateListener.java
+++ b/server/src/com/cloud/storage/listener/VolumeStateListener.java
@@ -18,12 +18,22 @@ import java.util.Map;
public class VolumeStateListener implements StateListener<State, Event, Volume> {
+ // get the event bus provider if configured
protected static EventBus _eventBus = null;
+ static {
+ Adapters<EventBus> eventBusImpls = ComponentLocator.getLocator(ManagementServer.Name).getAdapters(EventBus.class);
+ if (eventBusImpls != null) {
+ Enumeration<EventBus> eventBusenum = eventBusImpls.enumeration();
+ if (eventBusenum != null && eventBusenum.hasMoreElements()) {
+ _eventBus = eventBusenum.nextElement(); // configure event bus if configured
+ }
+ }
+ }
private static final Logger s_logger = Logger.getLogger(VolumeStateListener.class);
public VolumeStateListener() {
- initEventBusProvider();
+
}
@Override
@@ -39,25 +49,28 @@ public class VolumeStateListener implements StateListener<State, Event, Volume>
}
private void pubishOnEventBus(String event, String status, Volume vo, State oldState, State newState) {
- if (_eventBus != null) {
- String resourceName = getEntityFromClassName(Volume.class.getName());
- org.apache.cloudstack.framework.events.Event eventMsg = new org.apache.cloudstack.framework.events.Event(
- ManagementServer.Name,
- EventCategory.RESOURCE_STATE_CHANGE_EVENT.getName(),
- event,
- resourceName,
- vo.getUuid());
- Map<String, String> eventDescription = new HashMap<String, String>();
- eventDescription.put("resource", resourceName);
- eventDescription.put("id", vo.getUuid());
- eventDescription.put("old-state", oldState.name());
- eventDescription.put("new-state", newState.name());
- eventMsg.setDescription(eventDescription);
- try {
- _eventBus.publish(eventMsg);
- } catch (EventBusException e) {
- s_logger.warn("Failed to publish action event on the the event bus.");
- }
+
+ if (_eventBus == null) {
+ return; // no provider is configured to provide events bus, so just return
+ }
+
+ String resourceName = getEntityFromClassName(Volume.class.getName());
+ org.apache.cloudstack.framework.events.Event eventMsg = new org.apache.cloudstack.framework.events.Event(
+ ManagementServer.Name,
+ EventCategory.RESOURCE_STATE_CHANGE_EVENT.getName(),
+ event,
+ resourceName,
+ vo.getUuid());
+ Map<String, String> eventDescription = new HashMap<String, String>();
+ eventDescription.put("resource", resourceName);
+ eventDescription.put("id", vo.getUuid());
+ eventDescription.put("old-state", oldState.name());
+ eventDescription.put("new-state", newState.name());
+ eventMsg.setDescription(eventDescription);
+ try {
+ _eventBus.publish(eventMsg);
+ } catch (EventBusException e) {
+ s_logger.warn("Failed to publish action event on the the event bus.");
}
}
@@ -69,16 +82,4 @@ public class VolumeStateListener implements StateListener<State, Event, Volume>
}
return entityName;
}
-
- private void initEventBusProvider() {
- ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name);
- Adapters<EventBus> eventBusImpls = locator.getAdapters(EventBus.class);
- if (eventBusImpls != null) {
- Enumeration<EventBus> eventBusenum = eventBusImpls.enumeration();
- if (eventBusenum != null && eventBusenum.hasMoreElements()) {
- _eventBus = eventBusenum.nextElement();
- }
- }
- }
-
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e439d982/server/src/com/cloud/vm/UserVmStateListener.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/UserVmStateListener.java b/server/src/com/cloud/vm/UserVmStateListener.java
index 8f8e3fe..ab6b8a9 100644
--- a/server/src/com/cloud/vm/UserVmStateListener.java
+++ b/server/src/com/cloud/vm/UserVmStateListener.java
@@ -44,14 +44,24 @@ public class UserVmStateListener implements StateListener<State, VirtualMachine.
protected UsageEventDao _usageEventDao;
protected NetworkDao _networkDao;
protected NicDao _nicDao;
- protected static EventBus _eventBus = null;
private static final Logger s_logger = Logger.getLogger(UserVmStateListener.class);
+ // get the event bus provider if configured
+ protected static EventBus _eventBus = null;
+ static {
+ Adapters<EventBus> eventBusImpls = ComponentLocator.getLocator(ManagementServer.Name).getAdapters(EventBus.class);
+ if (eventBusImpls != null) {
+ Enumeration<EventBus> eventBusenum = eventBusImpls.enumeration();
+ if (eventBusenum != null && eventBusenum.hasMoreElements()) {
+ _eventBus = eventBusenum.nextElement(); // configure event bus if configured
+ }
+ }
+ }
+
public UserVmStateListener(UsageEventDao usageEventDao, NetworkDao networkDao, NicDao nicDao) {
this._usageEventDao = usageEventDao;
this._networkDao = networkDao;
this._nicDao = nicDao;
- initEventBusProvider();
}
@Override
@@ -69,7 +79,9 @@ public class UserVmStateListener implements StateListener<State, VirtualMachine.
if(vo.getType() != VirtualMachine.Type.User){
return true;
}
-
+
+ pubishOnEventBus(event.name(), "postStateTransitionEvent", vo, oldState, newState);
+
if (VirtualMachine.State.isVmCreated(oldState, event, newState)) {
UsageEventUtils.saveUsageEvent(EventTypes.EVENT_VM_CREATE, vo.getAccountId(), vo.getDataCenterIdToDeployIn(), vo.getId(), vo.getHostName(), vo.getServiceOfferingId(),
vo.getTemplateId(), vo.getHypervisorType().toString());
@@ -91,26 +103,30 @@ public class UserVmStateListener implements StateListener<State, VirtualMachine.
}
private void pubishOnEventBus(String event, String status, VirtualMachine vo, VirtualMachine.State oldState, VirtualMachine.State newState) {
- if (_eventBus != null) {
- String resourceName = getEntityFromClassName(Network.class.getName());
- org.apache.cloudstack.framework.events.Event eventMsg = new org.apache.cloudstack.framework.events.Event(
- ManagementServer.Name,
- EventCategory.RESOURCE_STATE_CHANGE_EVENT.getName(),
- event,
- resourceName,
- vo.getUuid());
- Map<String, String> eventDescription = new HashMap<String, String>();
- eventDescription.put("resource", resourceName);
- eventDescription.put("id", vo.getUuid());
- eventDescription.put("old-state", oldState.name());
- eventDescription.put("new-state", newState.name());
- eventMsg.setDescription(eventDescription);
- try {
- _eventBus.publish(eventMsg);
- } catch (EventBusException e) {
- s_logger.warn("Failed to publish action event on the the event bus.");
- }
+
+ if (_eventBus == null) {
+ return; // no provider is configured to provide events bus, so just return
+ }
+
+ String resourceName = getEntityFromClassName(Network.class.getName());
+ org.apache.cloudstack.framework.events.Event eventMsg = new org.apache.cloudstack.framework.events.Event(
+ ManagementServer.Name,
+ EventCategory.RESOURCE_STATE_CHANGE_EVENT.getName(),
+ event,
+ resourceName,
+ vo.getUuid());
+ Map<String, String> eventDescription = new HashMap<String, String>();
+ eventDescription.put("resource", resourceName);
+ eventDescription.put("id", vo.getUuid());
+ eventDescription.put("old-state", oldState.name());
+ eventDescription.put("new-state", newState.name());
+ eventMsg.setDescription(eventDescription);
+ try {
+ _eventBus.publish(eventMsg);
+ } catch (EventBusException e) {
+ s_logger.warn("Failed to publish action event on the the event bus.");
}
+
}
private String getEntityFromClassName(String entityClassName) {
@@ -121,15 +137,4 @@ public class UserVmStateListener implements StateListener<State, VirtualMachine.
}
return entityName;
}
-
- private void initEventBusProvider() {
- ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name);
- Adapters<EventBus> eventBusImpls = locator.getAdapters(EventBus.class);
- if (eventBusImpls != null) {
- Enumeration<EventBus> eventBusenum = eventBusImpls.enumeration();
- if (eventBusenum != null && eventBusenum.hasMoreElements()) {
- _eventBus = eventBusenum.nextElement();
- }
- }
- }
}