HHH-5993 Add SessionFactoryObserver configuration option to HEM
This commit is contained in:
parent
f3bab56382
commit
12bd0f24c0
|
@ -242,6 +242,11 @@ public class AvailableSettings {
|
|||
*/
|
||||
public static final String SESSION_INTERCEPTOR = "hibernate.ejb.interceptor.session_scoped";
|
||||
|
||||
/**
|
||||
* SessionFactoryObserver class name, the class must have a no-arg constructor
|
||||
*/
|
||||
public static final String SESSION_FACTORY_OBSERVER = "hibernate.ejb.session_factory_observer";
|
||||
|
||||
/**
|
||||
* Naming strategy class name, the class has to have a no-arg constructor
|
||||
*/
|
||||
|
|
|
@ -69,6 +69,7 @@ import org.hibernate.Interceptor;
|
|||
import org.hibernate.MappingException;
|
||||
import org.hibernate.MappingNotFoundException;
|
||||
import org.hibernate.SessionFactory;
|
||||
import org.hibernate.SessionFactoryObserver;
|
||||
import org.hibernate.cfg.Configuration;
|
||||
import org.hibernate.cfg.Environment;
|
||||
import org.hibernate.cfg.NamingStrategy;
|
||||
|
@ -1048,6 +1049,18 @@ public class Ejb3Configuration implements Serializable, Referenceable {
|
|||
cfg.setNamingStrategy( namingStrategy );
|
||||
}
|
||||
|
||||
final SessionFactoryObserver observer = instantiateCustomClassFromConfiguration(
|
||||
preparedProperties,
|
||||
null,
|
||||
cfg.getSessionFactoryObserver(),
|
||||
AvailableSettings.SESSION_FACTORY_OBSERVER,
|
||||
"SessionFactory observer",
|
||||
SessionFactoryObserver.class
|
||||
);
|
||||
if ( observer != null ) {
|
||||
cfg.setSessionFactoryObserver( observer );
|
||||
}
|
||||
|
||||
if ( jaccKeys.size() > 0 ) {
|
||||
addSecurity( jaccKeys, preparedProperties, workingVars );
|
||||
}
|
||||
|
@ -1549,6 +1562,11 @@ public class Ejb3Configuration implements Serializable, Referenceable {
|
|||
return this;
|
||||
}
|
||||
|
||||
public Ejb3Configuration setSessionFactoryObserver(SessionFactoryObserver observer) {
|
||||
cfg.setSessionFactoryObserver( observer );
|
||||
return this;
|
||||
}
|
||||
|
||||
public void setListeners(String type, String[] listenerClasses) {
|
||||
cfg.setListeners( type, listenerClasses );
|
||||
}
|
||||
|
|
|
@ -0,0 +1,61 @@
|
|||
/*
|
||||
* Hibernate, Relational Persistence for Idiomatic Java
|
||||
*
|
||||
* JBoss, Home of Professional Open Source
|
||||
* Copyright 2011 Red Hat Inc. and/or its affiliates and other contributors
|
||||
* as indicated by the @authors tag. All rights reserved.
|
||||
* See the copyright.txt in the distribution for a
|
||||
* full listing of individual contributors.
|
||||
*
|
||||
* This copyrighted material is made available to anyone wishing to use,
|
||||
* modify, copy, or redistribute it subject to the terms and conditions
|
||||
* of the GNU Lesser General Public License, v. 2.1.
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT A
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
* You should have received a copy of the GNU Lesser General Public License,
|
||||
* v.2.1 along with this distribution; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
*/
|
||||
package org.hibernate.ejb.test.ejb3configuration;
|
||||
|
||||
import javax.persistence.EntityManagerFactory;
|
||||
|
||||
import org.hibernate.SessionFactory;
|
||||
import org.hibernate.SessionFactoryObserver;
|
||||
import org.hibernate.ejb.AvailableSettings;
|
||||
import org.hibernate.ejb.Ejb3Configuration;
|
||||
|
||||
/**
|
||||
* @author Emmanuel Bernard <emmanuel@hibernate.org>
|
||||
*/
|
||||
public class SessionFactoryObserverTest extends junit.framework.TestCase {
|
||||
public void testSessionFactoryObserverProperty() {
|
||||
Ejb3Configuration conf = new Ejb3Configuration();
|
||||
conf.setProperty( AvailableSettings.SESSION_FACTORY_OBSERVER, GoofySessionFactoryObserver.class.getName() );
|
||||
conf.addAnnotatedClass( Bell.class );
|
||||
try {
|
||||
final EntityManagerFactory entityManagerFactory = conf.buildEntityManagerFactory();
|
||||
entityManagerFactory.close();
|
||||
fail( "GoofyException should have been thrown" );
|
||||
}
|
||||
catch ( GoofyException e ) {
|
||||
//success
|
||||
}
|
||||
}
|
||||
|
||||
public static class GoofySessionFactoryObserver implements SessionFactoryObserver {
|
||||
|
||||
public void sessionFactoryCreated(SessionFactory factory) {
|
||||
}
|
||||
|
||||
public void sessionFactoryClosed(SessionFactory factory) {
|
||||
throw new GoofyException();
|
||||
}
|
||||
}
|
||||
|
||||
public static class GoofyException extends RuntimeException {
|
||||
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue