public void afterPropertiesSet() throws Exception {
		
		Assert.hasText(eventTypePackageName, "eventTypePackageName is must be specified");
		Assert.notEmpty(statement, "statement is empty");
		
		configuration = new Configuration();
		configuration.addEventTypeAutoName(eventTypePackageName);
		
		_instance = EPServiceProviderManager.getDefaultProvider(configuration);
		
		for (EPStatementContext stmt : statement) {
			final String epl = stmt.epl();
			log.info("EPL: {}", epl);
			EPStatement epstmt = _instance.getEPAdministrator().createEPL(epl);
			if (null != stmt.subscriber()) {
				epstmt.setSubscriber(stmt.subscriber());
			}
			
			if ( null != stmt.listeners()) {
				for (Object listener : stmt.listeners()) {
					if ( !(listener instanceof StatementAwareUpdateListener)
						&& !(listener instanceof UpdateListener)) {
						throw new IllegalStateException("statement listener illegal");
					}
					
					if ( listener instanceof StatementAwareUpdateListener) {
						epstmt.addListener((StatementAwareUpdateListener)listener);
					}
					
					if ( listener instanceof UpdateListener) {
						epstmt.addListener((UpdateListener)listener);
					}
					
					/*
					 * TODO: support addListenerWithReply
					 */
					//epstmt.addListenerWithReplay((UpdateListener)listener);
				}
			}
		}
	}