public void fireEvent(Object event, EventTypeID eventType,
			ExternalActivityHandle activityHandle, Address address) throws NullPointerException,
			UnrecognizedActivityException, UnrecognizedEventException, ResourceException {
		if(sleeContainer == null)
		{
			throw new ResourceException("Connection is in closed state");
		}
		if(sleeContainer.getSleeState()!=SleeState.RUNNING)
		{
			throw new ResourceException("Container is not in running state.");
		}
		if (logger.isDebugEnabled()) {
			logger.debug("fireEvent(event=" + event + ",eventType=" + eventType
					+ ",activityHandle=" + activityHandle + ",address="
					+ address + ")");
		}

		if (event == null) {
			throw new NullPointerException("event is null");
		}
		if (eventType == null) {
			throw new NullPointerException("event type is null");
		}
		if (activityHandle == null) {
			throw new NullPointerException("activity handle is null");
		}

		EventTypeComponent eventTypeComponent = sleeContainer
				.getComponentRepository().getComponentByID(eventType);
		if (eventTypeComponent == null) {
			throw new UnrecognizedEventException("event type not installed");
		}

		if (!eventTypeComponent.getEventTypeClass().isAssignableFrom(event.getClass())) {
			logger.info(""+eventTypeComponent.getEventTypeClass().toString());
			logger.info(""+eventTypeComponent.getEventTypeClass().getCanonicalName());
			logger.info(""+Arrays.toString(eventTypeComponent.getEventTypeClass().getDeclaredMethods()));
			logger.info(""+eventTypeComponent.getEventTypeClass().getClass().toString());
			logger.info(""+eventTypeComponent.getEventTypeClass().getClass().getCanonicalName());
			logger.info(""+event.getClass().toString());
			logger.info(""+event.getClass().getCanonicalName());
			logger.info(""+Arrays.toString(event.getClass().getDeclaredMethods()));
			logger.info("*"+eventTypeComponent);
			logger.info("*"+eventTypeComponent.getEventTypeID());
			logger.info("*"+event);
			logger.info("&"+eventTypeComponent.getClassLoader());
			logger.info("&"+eventTypeComponent.getEventTypeClass().getClassLoader());
			logger.info("&"+event.getClass().getClassLoader());
			//throw new UnrecognizedEventException(
			//	"the class of the event object fired is not assignable to the event class of the event type.\n" +
			//	" EventClass: "+event.getClass()+", component class: "+eventTypeComponent.getEventTypeClass());

		}

		if (!(activityHandle instanceof NullActivityHandle)) {
			throw new UnrecognizedActivityException(activityHandle);
		}

		// check container state is running
		SleeContainer sleeContainer = SleeContainer.lookupFromJndi();
		if (sleeContainer.getSleeState() != SleeState.RUNNING) {
			throw new IllegalStateException("Container is not running");
		}

		SleeTransactionManager txMgr = sleeContainer.getTransactionManager();
		boolean newTx = txMgr.requireTransaction();
		boolean rollback = true;

		try {
			final NullActivityHandle nullActivityHandle = (NullActivityHandle) activityHandle;
			final ActivityContextHandle ach = nullActivityHandle.getActivityContextHandle();
			ActivityContext ac = sleeContainer.getActivityContextFactory()
					.getActivityContext(ach);
			if (ac == null) {
				sleeContainer.getNullActivityFactory().createNullActivity(
						nullActivityHandle, false);
				ac = sleeContainer.getActivityContextFactory()
						.getActivityContext(ach);
				if (ac == null) {
					throw new SLEEException(
							"unable to create null ac for external activity handle "
									+ activityHandle);
				}
			}
			ac.fireEvent(eventType, event, address, null, null,null,null);
			rollback = false;
		} catch (Throwable ex) {
			logger.error("Exception in fireEvent!", ex);
		} finally {
			if (newTx) {
				if (rollback) {
					try {
						txMgr.rollback();
					} catch (Throwable e) {
						logger.error("failed to rollback implicit tx", e);
					}
				} else {
					try {
						txMgr.commit();
					} catch (Throwable e) {
						logger.error("failed to commit implicit tx", e);
					}
				}
			}
			// else ignore, specs say there is no need to rollback a tx if event
			// queuing failed
		}
	}
public void fireEvent ( Object event , EventTypeID eventType , ExternalActivityHandle activityHandle , Address address ) throws NullPointerException , UnrecognizedActivityException , UnrecognizedEventException , ResourceException { if ( sleeContainer == null ) { throw new ResourceException ( "Connection is in closed state" ) ; } if ( sleeContainer . getSleeState ( ) != SleeState . RUNNING ) { throw new ResourceException ( "Container is not in running state." ) ; } if ( logger . isDebugEnabled ( ) ) { logger . debug ( "fireEvent(event=" + event + ",eventType=" + eventType + ",activityHandle=" + activityHandle + ",address=" + address + ")" ) ; } if ( event == null ) { throw new NullPointerException ( "event is null" ) ; } if ( eventType == null ) { throw new NullPointerException ( "event type is null" ) ; } if ( activityHandle == null ) { throw new NullPointerException ( "activity handle is null" ) ; } EventTypeComponent eventTypeComponent = sleeContainer . getComponentRepository ( ) . getComponentByID ( eventType ) ; if ( eventTypeComponent == null ) { throw new UnrecognizedEventException ( "event type not installed" ) ; } if ( ! eventTypeComponent . getEventTypeClass ( ) . isAssignableFrom ( event . getClass ( ) ) ) { logger . info ( "" + eventTypeComponent . getEventTypeClass ( ) . toString ( ) ) ; logger . info ( "" + eventTypeComponent . getEventTypeClass ( ) . getCanonicalName ( ) ) ; logger . info ( "" + Arrays . toString ( eventTypeComponent . getEventTypeClass ( ) . getDeclaredMethods ( ) ) ) ; logger . info ( "" + eventTypeComponent . getEventTypeClass ( ) . getClass ( ) . toString ( ) ) ; logger . info ( "" + eventTypeComponent . getEventTypeClass ( ) . getClass ( ) . getCanonicalName ( ) ) ; logger . info ( "" + event . getClass ( ) . toString ( ) ) ; logger . info ( "" + event . getClass ( ) . getCanonicalName ( ) ) ; logger . info ( "" + Arrays . toString ( event . getClass ( ) . getDeclaredMethods ( ) ) ) ; logger . info ( "*" + eventTypeComponent ) ; logger . info ( "*" + eventTypeComponent . getEventTypeID ( ) ) ; logger . info ( "*" + event ) ; logger . info ( "&" + eventTypeComponent . getClassLoader ( ) ) ; logger . info ( "&" + eventTypeComponent . getEventTypeClass ( ) . getClassLoader ( ) ) ; logger . info ( "&" + event . getClass ( ) . getClassLoader ( ) ) ; } if ( ! ( activityHandle instanceof NullActivityHandle ) ) { throw new UnrecognizedActivityException ( activityHandle ) ; } SleeContainer sleeContainer = SleeContainer . lookupFromJndi ( ) ; if ( sleeContainer . getSleeState ( ) != SleeState . RUNNING ) { throw new IllegalStateException ( "Container is not running" ) ; } SleeTransactionManager txMgr = sleeContainer . getTransactionManager ( ) ; boolean newTx = txMgr . requireTransaction ( ) ; boolean rollback = true ; try { final NullActivityHandle nullActivityHandle = ( NullActivityHandle ) activityHandle ; final ActivityContextHandle ach = nullActivityHandle . getActivityContextHandle ( ) ; ActivityContext ac = sleeContainer . getActivityContextFactory ( ) . getActivityContext ( ach ) ; if ( ac == null ) { sleeContainer . getNullActivityFactory ( ) . createNullActivity ( nullActivityHandle , false ) ; ac = sleeContainer . getActivityContextFactory ( ) . getActivityContext ( ach ) ; if ( ac == null ) { throw new SLEEException ( "unable to create null ac for external activity handle " + activityHandle ) ; } } ac . fireEvent ( eventType , event , address , null , null , null , null ) ; rollback = false ; } catch ( Throwable ex ) { logger . error ( "Exception in fireEvent!" , ex ) ; } finally { if ( newTx ) { if ( rollback ) { try { txMgr . rollback ( ) ; } catch ( Throwable e ) { logger . error ( "failed to rollback implicit tx" , e ) ; } } else { try { txMgr . commit ( ) ; } catch ( Throwable e ) { logger . error ( "failed to commit implicit tx" , e ) ; } } } } }
/* (non-Javadoc)
@see javax.slee.connection.SleeConnection#fireEvent(java.lang.Object, javax.slee.EventTypeID, javax.slee.connection.ExternalActivityHandle, javax.slee.Address)