@Override public void customize(Session session) throws Exception { session.getEventManager().addListener(new SessionEventAdapter() { @Override public void preBeginTransaction(SessionEvent event) { try { UnitOfWork work = event.getSession().acquireUnitOfWork(); try { work.executeNonSelectingSQL("set names utf8mb4"); work.commit(); work = null; } finally { if (work != null) work.release(); } } catch (Exception ex) { log.error("UTF8MB4", ex); } } }); } }
getListeners().add(listener); while (memberSessions.hasNext()) { AbstractSession memberSession = memberSessions.next(); memberSession.getEventManager().addListener(listener); getListeners().add(listener);
/** * PUBLIC: * Return the event manager. * The event manager can be used to register for various session events. */ public SessionEventManager getEventManager() { if (eventManager == null) { synchronized (this) { if (eventManager == null) { // PERF: lazy init. eventManager = new SessionEventManager(this); } } } return eventManager; }
/** * INTERNAL: * Clone the event manager for the new session. */ public SessionEventManager clone(Session newSession) { SessionEventManager newManager = (SessionEventManager)clone(); newManager.setSession(newSession); if (this.listeners != null) { newManager.setListeners(new ArrayList<SessionEventListener>(this.listeners)); } return newManager; }
/** * INTERNAL: * Post acquire unit of work. */ public void postAcquireUnitOfWork() { if (!hasListeners()) { return; } startOperationProfile(); SessionEvent event = new SessionEvent(SessionEvent.PostAcquireUnitOfWork, getSession()); int size = this.listeners.size(); for (int index = 0; index < size; index++) { this.listeners.get(index).postAcquireUnitOfWork(event); } endOperationProfile(); }
/** * INTERNAL: * post login to the session. */ public void postLogin(Session session) { if (!hasListeners()) { return; } startOperationProfile(); SessionEvent event = new SessionEvent(SessionEvent.PostLogin, session); int size = this.listeners.size(); for (int index = 0; index < size; index++) { this.listeners.get(index).postLogin(event); } endOperationProfile(); }
/** * INTERNAL: Add and initialize a new session to the list of sessions * associated with this XMLContext. */ private void addSession(DatabaseSession sessionToAdd) { if ((sessionToAdd.getDatasourceLogin() == null) || !(sessionToAdd.getDatasourceLogin().getDatasourcePlatform() instanceof XMLPlatform)) { XMLPlatform platform = new SAXPlatform(); sessionToAdd.setLogin(new XMLLogin(platform)); } DatabaseSession session = sessionToAdd.getProject().createDatabaseSession(); if (sessionToAdd.getEventManager().hasListeners()) { List<SessionEventListener> listeners = sessionToAdd.getEventManager().getListeners(); int listenersSize = listeners.size(); for (int x = 0; x < listenersSize; x++) { session.getEventManager().addListener(listeners.get(x)); } } session.setExceptionHandler(sessionToAdd.getExceptionHandler()); session.setLogLevel(SessionLog.OFF); setupSession(session); if(null == sessions) { sessions = new ArrayList<DatabaseSession>(); } if(null != this.session) { sessions.add(this.session); } sessions.add(session); storeDescriptorsByQName(session); }
this.sessionLog = parent.getSessionLog(); if (parent.hasEventManager()) { this.eventManager = parent.getEventManager().clone(this); this.properties = properties; if (this.eventManager != null) { this.eventManager.postAcquireClientSession();
this.sessionLog = parent.sessionLog; if (parent.hasEventManager()) { this.eventManager = parent.getEventManager().clone(this); this.eventManager.postAcquireUnitOfWork();
/** * INTERNAL: * Return a copy (not using clone) of a session broker. */ protected SessionBroker copySessionBroker() { SessionBroker broker = new SessionBroker(getSessionNamesByClass()); broker.accessor = getAccessor(); broker.name = getName(); broker.sessionLog = getSessionLog(); broker.project = project; if (hasEventManager()) { broker.eventManager = getEventManager().clone(broker); } broker.shouldPropagateChanges = shouldPropagateChanges; return broker; }
session.getEventManager().noRowsModified(writeQuery, object);
/** * PUBLIC: * Add the event listener to the session. * The listener will receive all events raised by this session. * Also unit of works acquire from this session will inherit the listeners. */ public void addListener(SessionEventListener listener) { getListeners().add(listener); }
isRemoved = getListeners().remove(listener); while (memberSessions.hasNext()) { AbstractSession memberSession = memberSessions.next(); memberSession.getEventManager().removeListener(listener); getListeners().remove(listener);
/** * INTERNAL: * Start call */ protected void startOperationProfile() { if (getSession().isInProfile()) { getSession().getProfiler().startOperationProfile(SessionProfiler.SessionEvent); } }
protected Object processResultSet(ResultSet resultSet, DatabaseCall dbCall, PreparedStatement statement, DatabaseAccessor accessor, AbstractSession session) throws SQLException { Object result = null; ResultSetMetaData metaData = resultSet.getMetaData(); session.startOperationProfile(SessionProfiler.ROW_FETCH, dbCall.getQuery(), SessionProfiler.ALL); try { if (dbCall.isOneRowReturned()) { if (resultSet.next()) { result = accessor.fetchRow(dbCall.getFields(), resultSet, metaData, session); if (resultSet.next()) { // Raise more rows event, some apps may interpret as error or warning. if (session.hasEventManager()) { session.getEventManager().moreRowsDetected(dbCall); } } } else { result = null; } } else { Vector results = new Vector(20); while (resultSet.next()) { results.addElement(accessor.fetchRow(dbCall.getFields(), resultSet, metaData, session)); } result = results; } resultSet.close();// This must be closed incase the statement is cached and not closed. } finally { session.endOperationProfile(SessionProfiler.ROW_FETCH, dbCall.getQuery(), SessionProfiler.ALL); } return result; }
this.eventManager.missingDescriptor(theClass);
/** * INTERNAL: * Post commit transaction. */ public void postCommitTransaction() { if (!hasListeners()) { return; } startOperationProfile(); SessionEvent event = new SessionEvent(SessionEvent.PostCommitTransaction, getSession()); int size = this.listeners.size(); for (int index = 0; index < size; index++) { this.listeners.get(index).postCommitTransaction(event); } endOperationProfile(); }
/** * INTERNAL: Add and initialize a new session to the list of sessions * associated with this XMLContext. */ private void addSession(DatabaseSession sessionToAdd) { if ((sessionToAdd.getDatasourceLogin() == null) || !(sessionToAdd.getDatasourceLogin().getDatasourcePlatform() instanceof XMLPlatform)) { XMLPlatform platform = new SAXPlatform(); sessionToAdd.setLogin(new XMLLogin(platform)); } DatabaseSession session = sessionToAdd.getProject().createDatabaseSession(); if (sessionToAdd.getEventManager().hasListeners()) { List<SessionEventListener> listeners = sessionToAdd.getEventManager().getListeners(); int listenersSize = listeners.size(); for (int x = 0; x < listenersSize; x++) { session.getEventManager().addListener(listeners.get(x)); } } session.setExceptionHandler(sessionToAdd.getExceptionHandler()); session.setLogLevel(SessionLog.OFF); setupSession(session); if(null == sessions) { sessions = new ArrayList<DatabaseSession>(); } if(null != this.session) { sessions.add(this.session); } sessions.add(session); storeDescriptorsByQName(session); }
/** * INTERNAL: * Clone the event manager for the new session. */ public SessionEventManager clone(Session newSession) { SessionEventManager newManager = (SessionEventManager)clone(); newManager.setSession(newSession); if (this.listeners != null) { newManager.setListeners(new ArrayList<SessionEventListener>(this.listeners)); } return newManager; }
this.sessionLog = parent.getSessionLog(); if (parent.hasEventManager()) { this.eventManager = parent.getEventManager().clone(this); this.eventManager.postAcquireClientSession();