1 /*
2  * Copyright 2002-2011 the original author or authors.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package org.springframework.orm.hibernate3;
18 
19 import java.io.File;
20 import java.io.IOException;
21 import java.io.InputStream;
22 import java.util.ArrayList;
23 import java.util.Arrays;
24 import java.util.HashMap;
25 import java.util.HashSet;
26 import java.util.LinkedList;
27 import java.util.List;
28 import java.util.Map;
29 import java.util.Properties;
30 import java.util.Set;
31 import javax.transaction.TransactionManager;
32 
33 import junit.framework.TestCase;
34 import org.easymock.MockControl;
35 import org.hibernate.HibernateException;
36 import org.hibernate.Interceptor;
37 import org.hibernate.SessionFactory;
38 import org.hibernate.cache.CacheProvider;
39 import org.hibernate.cache.NoCacheProvider;
40 import org.hibernate.cache.RegionFactory;
41 import org.hibernate.cache.impl.NoCachingRegionFactory;
42 import org.hibernate.cfg.Configuration;
43 import org.hibernate.cfg.Environment;
44 import org.hibernate.cfg.ImprovedNamingStrategy;
45 import org.hibernate.cfg.Mappings;
46 import org.hibernate.cfg.NamingStrategy;
47 import org.hibernate.connection.UserSuppliedConnectionProvider;
48 import org.hibernate.engine.FilterDefinition;
49 import org.hibernate.event.MergeEvent;
50 import org.hibernate.event.MergeEventListener;
51 import org.hibernate.mapping.TypeDef;
52 
53 import org.springframework.beans.factory.xml.XmlBeanFactory;
54 import org.springframework.core.io.ClassPathResource;
55 import org.springframework.core.io.FileSystemResource;
56 import org.springframework.core.io.Resource;
57 import org.springframework.jdbc.datasource.DriverManagerDataSource;
58 
59 /**
60  * @author Juergen Hoeller
61  * @since 05.03.2005
62  */
63 public class LocalSessionFactoryBeanTests extends TestCase {
64 
testLocalSessionFactoryBeanWithDataSource()65 	public void testLocalSessionFactoryBeanWithDataSource() throws Exception {
66 		final DriverManagerDataSource ds = new DriverManagerDataSource();
67 		final List invocations = new ArrayList();
68 		LocalSessionFactoryBean sfb = new LocalSessionFactoryBean() {
69 			protected Configuration newConfiguration() {
70 				return new Configuration() {
71 					public Configuration addInputStream(InputStream is) {
72 						try {
73 							is.close();
74 						}
75 						catch (IOException ex) {
76 						}
77 						invocations.add("addResource");
78 						return this;
79 					}
80 				};
81 			}
82 			protected SessionFactory newSessionFactory(Configuration config) {
83 				assertEquals(LocalDataSourceConnectionProvider.class.getName(),
84 						config.getProperty(Environment.CONNECTION_PROVIDER));
85 				assertEquals(ds, LocalSessionFactoryBean.getConfigTimeDataSource());
86 				invocations.add("newSessionFactory");
87 				return null;
88 			}
89 		};
90 		sfb.setDataSource(ds);
91 		sfb.afterPropertiesSet();
92 		assertTrue(sfb.getConfiguration() != null);
93 		assertEquals("newSessionFactory", invocations.get(0));
94 	}
95 
testLocalSessionFactoryBeanWithCacheRegionFactory()96 	public void testLocalSessionFactoryBeanWithCacheRegionFactory() throws Exception {
97 		final RegionFactory regionFactory = new NoCachingRegionFactory(null);
98 		final List invocations = new ArrayList();
99 		LocalSessionFactoryBean sfb = new LocalSessionFactoryBean() {
100 			protected Configuration newConfiguration() {
101 				return new Configuration() {
102 					public Configuration addInputStream(InputStream is) {
103 						try {
104 							is.close();
105 						}
106 						catch (IOException ex) {
107 						}
108 						invocations.add("addResource");
109 						return this;
110 					}
111 				};
112 			}
113 			protected SessionFactory newSessionFactory(Configuration config) {
114 				assertEquals(LocalRegionFactoryProxy.class.getName(),
115 						config.getProperty(Environment.CACHE_REGION_FACTORY));
116 				assertSame(regionFactory, LocalSessionFactoryBean.getConfigTimeRegionFactory());
117 				invocations.add("newSessionFactory");
118 				return null;
119 			}
120 		};
121 		sfb.setCacheRegionFactory(regionFactory);
122 		sfb.afterPropertiesSet();
123 		assertTrue(sfb.getConfiguration() != null);
124 		assertEquals("newSessionFactory", invocations.get(0));
125 	}
126 
testLocalSessionFactoryBeanWithCacheProvider()127 	public void testLocalSessionFactoryBeanWithCacheProvider() throws Exception {
128 		final CacheProvider cacheProvider = new NoCacheProvider();
129 		final List invocations = new ArrayList();
130 		LocalSessionFactoryBean sfb = new LocalSessionFactoryBean() {
131 			protected Configuration newConfiguration() {
132 				return new Configuration() {
133 					public Configuration addInputStream(InputStream is) {
134 						try {
135 							is.close();
136 						}
137 						catch (IOException ex) {
138 						}
139 						invocations.add("addResource");
140 						return this;
141 					}
142 				};
143 			}
144 
145 			protected SessionFactory newSessionFactory(Configuration config) {
146 				assertEquals(LocalCacheProviderProxy.class.getName(),
147 						config.getProperty(Environment.CACHE_PROVIDER));
148 				assertSame(cacheProvider, LocalSessionFactoryBean.getConfigTimeCacheProvider());
149 				invocations.add("newSessionFactory");
150 				return null;
151 			}
152 		};
153 		sfb.setCacheProvider(cacheProvider);
154 		sfb.afterPropertiesSet();
155 		assertTrue(sfb.getConfiguration() != null);
156 		assertEquals("newSessionFactory", invocations.get(0));
157 	}
158 
testLocalSessionFactoryBeanWithTransactionAwareDataSource()159 	public void testLocalSessionFactoryBeanWithTransactionAwareDataSource() throws Exception {
160 		final DriverManagerDataSource ds = new DriverManagerDataSource();
161 		final List invocations = new ArrayList();
162 		LocalSessionFactoryBean sfb = new LocalSessionFactoryBean() {
163 			protected Configuration newConfiguration() {
164 				return new Configuration() {
165 					public Configuration addInputStream(InputStream is) {
166 						try {
167 							is.close();
168 						}
169 						catch (IOException ex) {
170 						}
171 						invocations.add("addResource");
172 						return this;
173 					}
174 				};
175 			}
176 
177 			protected SessionFactory newSessionFactory(Configuration config) {
178 				assertEquals(TransactionAwareDataSourceConnectionProvider.class.getName(),
179 						config.getProperty(Environment.CONNECTION_PROVIDER));
180 				assertEquals(ds, LocalSessionFactoryBean.getConfigTimeDataSource());
181 				invocations.add("newSessionFactory");
182 				return null;
183 			}
184 		};
185 		sfb.setDataSource(ds);
186 		sfb.setUseTransactionAwareDataSource(true);
187 		sfb.afterPropertiesSet();
188 		assertTrue(sfb.getConfiguration() != null);
189 		assertEquals("newSessionFactory", invocations.get(0));
190 	}
191 
testLocalSessionFactoryBeanWithDataSourceAndMappingResources()192 	public void testLocalSessionFactoryBeanWithDataSourceAndMappingResources() throws Exception {
193 		final DriverManagerDataSource ds = new DriverManagerDataSource();
194 		MockControl tmControl = MockControl.createControl(TransactionManager.class);
195 		final TransactionManager tm = (TransactionManager) tmControl.getMock();
196 		final List invocations = new ArrayList();
197 		LocalSessionFactoryBean sfb = new LocalSessionFactoryBean() {
198 			protected Configuration newConfiguration() {
199 				return new Configuration() {
200 					public Configuration addInputStream(InputStream is) {
201 						try {
202 							is.close();
203 						}
204 						catch (IOException ex) {
205 						}
206 						invocations.add("addResource");
207 						return this;
208 					}
209 				};
210 			}
211 
212 			protected SessionFactory newSessionFactory(Configuration config) {
213 				assertEquals(LocalJtaDataSourceConnectionProvider.class.getName(),
214 						config.getProperty(Environment.CONNECTION_PROVIDER));
215 				assertEquals(ds, LocalSessionFactoryBean.getConfigTimeDataSource());
216 				assertEquals(LocalTransactionManagerLookup.class.getName(),
217 						config.getProperty(Environment.TRANSACTION_MANAGER_STRATEGY));
218 				assertEquals(tm, LocalSessionFactoryBean.getConfigTimeTransactionManager());
219 				invocations.add("newSessionFactory");
220 				return null;
221 			}
222 		};
223 		sfb.setMappingResources(new String[]{
224 				"/org/springframework/beans/factory/xml/test.xml",
225 				"/org/springframework/beans/factory/xml/child.xml"});
226 		sfb.setDataSource(ds);
227 		sfb.setJtaTransactionManager(tm);
228 		sfb.afterPropertiesSet();
229 		assertTrue(sfb.getConfiguration() != null);
230 		assertEquals("addResource", invocations.get(0));
231 		assertEquals("addResource", invocations.get(1));
232 		assertEquals("newSessionFactory", invocations.get(2));
233 	}
234 
testLocalSessionFactoryBeanWithDataSourceAndMappingJarLocations()235 	public void testLocalSessionFactoryBeanWithDataSourceAndMappingJarLocations() throws Exception {
236 		final DriverManagerDataSource ds = new DriverManagerDataSource();
237 		final Set invocations = new HashSet();
238 		LocalSessionFactoryBean sfb = new LocalSessionFactoryBean() {
239 			protected Configuration newConfiguration() {
240 				return new Configuration() {
241 					public Configuration addJar(File file) {
242 						invocations.add("addResource " + file.getPath());
243 						return this;
244 					}
245 				};
246 			}
247 
248 			protected SessionFactory newSessionFactory(Configuration config) {
249 				assertEquals(LocalDataSourceConnectionProvider.class.getName(),
250 						config.getProperty(Environment.CONNECTION_PROVIDER));
251 				assertEquals(ds, LocalSessionFactoryBean.getConfigTimeDataSource());
252 				invocations.add("newSessionFactory");
253 				return null;
254 			}
255 		};
256 		sfb.setMappingJarLocations(new Resource[]{
257 				new FileSystemResource("mapping.hbm.jar"), new FileSystemResource("mapping2.hbm.jar")});
258 		sfb.setDataSource(ds);
259 		sfb.afterPropertiesSet();
260 		assertTrue(sfb.getConfiguration() != null);
261 		assertTrue(invocations.contains("addResource mapping.hbm.jar"));
262 		assertTrue(invocations.contains("addResource mapping2.hbm.jar"));
263 		assertTrue(invocations.contains("newSessionFactory"));
264 	}
265 
testLocalSessionFactoryBeanWithDataSourceAndProperties()266 	public void testLocalSessionFactoryBeanWithDataSourceAndProperties() throws Exception {
267 		final DriverManagerDataSource ds = new DriverManagerDataSource();
268 		final Set invocations = new HashSet();
269 		LocalSessionFactoryBean sfb = new LocalSessionFactoryBean() {
270 			protected Configuration newConfiguration() {
271 				return new Configuration() {
272 					public Configuration addInputStream(InputStream is) {
273 						try {
274 							is.close();
275 						}
276 						catch (IOException ex) {
277 						}
278 						invocations.add("addResource");
279 						return this;
280 					}
281 				};
282 			}
283 
284 			protected SessionFactory newSessionFactory(Configuration config) {
285 				assertEquals(LocalDataSourceConnectionProvider.class.getName(),
286 						config.getProperty(Environment.CONNECTION_PROVIDER));
287 				assertEquals(ds, LocalSessionFactoryBean.getConfigTimeDataSource());
288 				assertEquals("myValue", config.getProperty("myProperty"));
289 				invocations.add("newSessionFactory");
290 				return null;
291 			}
292 		};
293 		sfb.setMappingLocations(new Resource[]{
294 				new ClassPathResource("/org/springframework/beans/factory/xml/test.xml")});
295 		sfb.setDataSource(ds);
296 		Properties prop = new Properties();
297 		prop.setProperty(Environment.CONNECTION_PROVIDER, "myClass");
298 		prop.setProperty("myProperty", "myValue");
299 		sfb.setHibernateProperties(prop);
300 		sfb.afterPropertiesSet();
301 		assertTrue(sfb.getConfiguration() != null);
302 		assertTrue(invocations.contains("addResource"));
303 		assertTrue(invocations.contains("newSessionFactory"));
304 	}
305 
testLocalSessionFactoryBeanWithValidProperties()306 	public void testLocalSessionFactoryBeanWithValidProperties() throws Exception {
307 		final Set invocations = new HashSet();
308 		LocalSessionFactoryBean sfb = new LocalSessionFactoryBean() {
309 			protected SessionFactory newSessionFactory(Configuration config) {
310 				assertEquals(UserSuppliedConnectionProvider.class.getName(),
311 						config.getProperty(Environment.CONNECTION_PROVIDER));
312 				assertEquals("myValue", config.getProperty("myProperty"));
313 				invocations.add("newSessionFactory");
314 				return null;
315 			}
316 		};
317 		Properties prop = new Properties();
318 		prop.setProperty(Environment.CONNECTION_PROVIDER, UserSuppliedConnectionProvider.class.getName());
319 		prop.setProperty("myProperty", "myValue");
320 		sfb.setHibernateProperties(prop);
321 		sfb.afterPropertiesSet();
322 		assertTrue(sfb.getConfiguration() != null);
323 		assertTrue(invocations.contains("newSessionFactory"));
324 	}
325 
testLocalSessionFactoryBeanWithInvalidProperties()326 	public void testLocalSessionFactoryBeanWithInvalidProperties() throws Exception {
327 		LocalSessionFactoryBean sfb = new LocalSessionFactoryBean();
328 		sfb.setMappingResources(new String[0]);
329 		Properties prop = new Properties();
330 		prop.setProperty(Environment.CONNECTION_PROVIDER, "myClass");
331 		sfb.setHibernateProperties(prop);
332 		try {
333 			sfb.afterPropertiesSet();
334 		}
335 		catch (HibernateException ex) {
336 			// expected, provider class not found
337 		}
338 	}
339 
testLocalSessionFactoryBeanWithInvalidMappings()340 	public void testLocalSessionFactoryBeanWithInvalidMappings() throws Exception {
341 		LocalSessionFactoryBean sfb = new LocalSessionFactoryBean();
342 		sfb.setMappingResources(new String[]{"mapping.hbm.xml"});
343 		try {
344 			sfb.afterPropertiesSet();
345 		}
346 		catch (IOException ex) {
347 			// expected, mapping resource not found
348 		}
349 	}
350 
testLocalSessionFactoryBeanWithCustomSessionFactory()351 	public void testLocalSessionFactoryBeanWithCustomSessionFactory() throws Exception {
352 		MockControl factoryControl = MockControl.createControl(SessionFactory.class);
353 		final SessionFactory sessionFactory = (SessionFactory) factoryControl.getMock();
354 		sessionFactory.close();
355 		factoryControl.setVoidCallable(1);
356 		factoryControl.replay();
357 		LocalSessionFactoryBean sfb = new LocalSessionFactoryBean() {
358 			protected SessionFactory newSessionFactory(Configuration config) {
359 				return sessionFactory;
360 			}
361 		};
362 		sfb.setMappingResources(new String[0]);
363 		sfb.setDataSource(new DriverManagerDataSource());
364 		sfb.setExposeTransactionAwareSessionFactory(false);
365 		sfb.afterPropertiesSet();
366 		assertTrue(sessionFactory == sfb.getObject());
367 		sfb.destroy();
368 		factoryControl.verify();
369 	}
370 
testLocalSessionFactoryBeanWithEntityInterceptor()371 	public void testLocalSessionFactoryBeanWithEntityInterceptor() throws Exception {
372 		LocalSessionFactoryBean sfb = new LocalSessionFactoryBean() {
373 			protected Configuration newConfiguration() {
374 				return new Configuration() {
375 					public Configuration setInterceptor(Interceptor interceptor) {
376 						throw new IllegalArgumentException(interceptor.toString());
377 					}
378 				};
379 			}
380 		};
381 		sfb.setMappingResources(new String[0]);
382 		sfb.setDataSource(new DriverManagerDataSource());
383 		MockControl interceptorControl = MockControl.createControl(Interceptor.class);
384 		Interceptor entityInterceptor = (Interceptor) interceptorControl.getMock();
385 		interceptorControl.replay();
386 		sfb.setEntityInterceptor(entityInterceptor);
387 		try {
388 			sfb.afterPropertiesSet();
389 			fail("Should have thrown IllegalArgumentException");
390 		}
391 		catch (IllegalArgumentException ex) {
392 			// expected
393 			assertTrue("Correct exception", ex.getMessage().equals(entityInterceptor.toString()));
394 		}
395 	}
396 
testLocalSessionFactoryBeanWithNamingStrategy()397 	public void testLocalSessionFactoryBeanWithNamingStrategy() throws Exception {
398 		LocalSessionFactoryBean sfb = new LocalSessionFactoryBean() {
399 			protected Configuration newConfiguration() {
400 				return new Configuration() {
401 					public Configuration setNamingStrategy(NamingStrategy namingStrategy) {
402 						throw new IllegalArgumentException(namingStrategy.toString());
403 					}
404 				};
405 			}
406 		};
407 		sfb.setMappingResources(new String[0]);
408 		sfb.setDataSource(new DriverManagerDataSource());
409 		sfb.setNamingStrategy(ImprovedNamingStrategy.INSTANCE);
410 		try {
411 			sfb.afterPropertiesSet();
412 			fail("Should have thrown IllegalArgumentException");
413 		}
414 		catch (IllegalArgumentException ex) {
415 			// expected
416 			assertTrue("Correct exception", ex.getMessage().equals(ImprovedNamingStrategy.INSTANCE.toString()));
417 		}
418 	}
419 
testLocalSessionFactoryBeanWithCacheStrategies()420 	public void testLocalSessionFactoryBeanWithCacheStrategies() throws Exception {
421 		final Properties registeredClassCache = new Properties();
422 		final Properties registeredCollectionCache = new Properties();
423 		LocalSessionFactoryBean sfb = new LocalSessionFactoryBean() {
424 			protected Configuration newConfiguration() {
425 				return new Configuration() {
426 					public Configuration setCacheConcurrencyStrategy(String clazz, String concurrencyStrategy) {
427 						registeredClassCache.setProperty(clazz, concurrencyStrategy);
428 						return this;
429 					}
430 					public Configuration setCollectionCacheConcurrencyStrategy(String collectionRole, String concurrencyStrategy) {
431 						registeredCollectionCache.setProperty(collectionRole, concurrencyStrategy);
432 						return this;
433 					}
434 				};
435 			}
436 			protected SessionFactory newSessionFactory(Configuration config) {
437 				return null;
438 			}
439 		};
440 
441 		sfb.setMappingResources(new String[0]);
442 		sfb.setDataSource(new DriverManagerDataSource());
443 		Properties classCache = new Properties();
444 		classCache.setProperty("org.springframework.beans.TestBean", "read-write");
445 		sfb.setEntityCacheStrategies(classCache);
446 		Properties collectionCache = new Properties();
447 		collectionCache.setProperty("org.springframework.beans.TestBean.friends", "read-only");
448 		sfb.setCollectionCacheStrategies(collectionCache);
449 		sfb.afterPropertiesSet();
450 
451 		assertEquals(classCache, registeredClassCache);
452 		assertEquals(collectionCache, registeredCollectionCache);
453 	}
454 
testLocalSessionFactoryBeanWithCacheStrategiesAndRegions()455 	public void testLocalSessionFactoryBeanWithCacheStrategiesAndRegions() throws Exception {
456 		final Properties registeredClassCache = new Properties();
457 		final Properties registeredCollectionCache = new Properties();
458 		LocalSessionFactoryBean sfb = new LocalSessionFactoryBean() {
459 			protected Configuration newConfiguration() {
460 				return new Configuration() {
461 					// changed from return type 'void' to 'Configuration' in Hibernate 3.6
462 					public void setCacheConcurrencyStrategy(String clazz, String concurrencyStrategy, String regionName) {
463 						registeredClassCache.setProperty(clazz, concurrencyStrategy + "," + regionName);
464 					}
465 					public void setCollectionCacheConcurrencyStrategy(String collectionRole, String concurrencyStrategy, String regionName) {
466 						registeredCollectionCache.setProperty(collectionRole, concurrencyStrategy + "," + regionName);
467 					}
468 				};
469 			}
470 			protected SessionFactory newSessionFactory(Configuration config) {
471 				return null;
472 			}
473 		};
474 
475 		sfb.setMappingResources(new String[0]);
476 		sfb.setDataSource(new DriverManagerDataSource());
477 		Properties classCache = new Properties();
478 		classCache.setProperty("org.springframework.beans.TestBean", "read-write,myRegion");
479 		sfb.setEntityCacheStrategies(classCache);
480 		Properties collectionCache = new Properties();
481 		collectionCache.setProperty("org.springframework.beans.TestBean.friends", "read-only,myRegion");
482 		sfb.setCollectionCacheStrategies(collectionCache);
483 		sfb.afterPropertiesSet();
484 
485 		assertEquals(classCache, registeredClassCache);
486 		assertEquals(collectionCache, registeredCollectionCache);
487 	}
488 
testLocalSessionFactoryBeanWithEventListeners()489 	public void testLocalSessionFactoryBeanWithEventListeners() throws Exception {
490 		final Map registeredListeners = new HashMap();
491 		LocalSessionFactoryBean sfb = new LocalSessionFactoryBean() {
492 			protected Configuration newConfiguration() {
493 				return new Configuration() {
494 					public void setListener(String type, Object listener) {
495 						registeredListeners.put(type, listener);
496 					}
497 				};
498 			}
499 			protected SessionFactory newSessionFactory(Configuration config) {
500 				return null;
501 			}
502 		};
503 		sfb.setMappingResources(new String[0]);
504 		sfb.setDataSource(new DriverManagerDataSource());
505 		Map listeners = new HashMap();
506 		listeners.put("flush", "myListener");
507 		listeners.put("create", "yourListener");
508 		sfb.setEventListeners(listeners);
509 		sfb.afterPropertiesSet();
510 		assertEquals(listeners, registeredListeners);
511 	}
512 
testLocalSessionFactoryBeanWithEventListenerSet()513 	public void testLocalSessionFactoryBeanWithEventListenerSet() throws Exception {
514 		final Map registeredListeners = new HashMap();
515 		LocalSessionFactoryBean sfb = new LocalSessionFactoryBean() {
516 			protected Configuration newConfiguration() {
517 				return new Configuration() {
518 					public void setListeners(String type, Object[] listeners) {
519 						assertTrue(listeners instanceof MergeEventListener[]);
520 						registeredListeners.put(type, new HashSet(Arrays.asList(listeners)));
521 					}
522 				};
523 			}
524 			protected SessionFactory newSessionFactory(Configuration config) {
525 				return null;
526 			}
527 		};
528 		sfb.setMappingResources(new String[0]);
529 		sfb.setDataSource(new DriverManagerDataSource());
530 		Map listeners = new HashMap();
531 		Set mergeSet = new HashSet();
532 		mergeSet.add(new DummyMergeEventListener());
533 		mergeSet.add(new DummyMergeEventListener());
534 		listeners.put("merge", mergeSet);
535 		sfb.setEventListeners(listeners);
536 		sfb.afterPropertiesSet();
537 		assertEquals(listeners, registeredListeners);
538 	}
539 
540 	/*
541 	public void testLocalSessionFactoryBeanWithFilterDefinitions() throws Exception {
542 		XmlBeanFactory xbf = new XmlBeanFactory(new ClassPathResource("filterDefinitions.xml", getClass()));
543 		FilterTestLocalSessionFactoryBean sf = (FilterTestLocalSessionFactoryBean) xbf.getBean("&sessionFactory");
544 		assertEquals(2, sf.registeredFilterDefinitions.size());
545 		FilterDefinition filter1 = (FilterDefinition) sf.registeredFilterDefinitions.get(0);
546 		FilterDefinition filter2 = (FilterDefinition) sf.registeredFilterDefinitions.get(1);
547 
548 		assertEquals("filter1", filter1.getFilterName());
549 		assertEquals(2, filter1.getParameterNames().size());
550 		assertEquals(Hibernate.STRING, filter1.getParameterType("param1"));
551 		assertEquals(Hibernate.LONG, filter1.getParameterType("otherParam"));
552 		assertEquals("someCondition", filter1.getDefaultFilterCondition());
553 
554 		assertEquals("filter2", filter2.getFilterName());
555 		assertEquals(1, filter2.getParameterNames().size());
556 		assertEquals(Hibernate.INTEGER, filter2.getParameterType("myParam"));
557 	}
558 	*/
559 
testLocalSessionFactoryBeanWithTypeDefinitions()560 	public void testLocalSessionFactoryBeanWithTypeDefinitions() throws Exception {
561 		XmlBeanFactory xbf = new XmlBeanFactory(new ClassPathResource("typeDefinitions.xml", getClass()));
562 		TypeTestLocalSessionFactoryBean sf = (TypeTestLocalSessionFactoryBean) xbf.getBean("&sessionFactory");
563 		// Requires re-compilation when switching to Hibernate 3.5/3.6
564 		// since Mappings changed from a class to an interface
565 		TypeDef type1 = sf.mappings.getTypeDef("type1");
566 		TypeDef type2 = sf.mappings.getTypeDef("type2");
567 
568 		assertEquals("mypackage.MyTypeClass", type1.getTypeClass());
569 		assertEquals(2, type1.getParameters().size());
570 		assertEquals("value1", type1.getParameters().getProperty("param1"));
571 		assertEquals("othervalue", type1.getParameters().getProperty("otherParam"));
572 
573 		assertEquals("mypackage.MyOtherTypeClass", type2.getTypeClass());
574 		assertEquals(1, type2.getParameters().size());
575 		assertEquals("myvalue", type2.getParameters().getProperty("myParam"));
576 	}
577 
578 
579 	public static class FilterTestLocalSessionFactoryBean extends LocalSessionFactoryBean {
580 
581 		public List registeredFilterDefinitions = new LinkedList();
582 
newConfiguration()583 		protected Configuration newConfiguration() throws HibernateException {
584 			return new Configuration() {
585 				public void addFilterDefinition(FilterDefinition definition) {
586 					registeredFilterDefinitions.add(definition);
587 				}
588 			};
589 		}
590 
newSessionFactory(Configuration config)591 		protected SessionFactory newSessionFactory(Configuration config) {
592 			return null;
593 		}
594 	}
595 
596 
597 	public static class TypeTestLocalSessionFactoryBean extends LocalSessionFactoryBean {
598 
599 		public Mappings mappings;
600 
601 		protected SessionFactory newSessionFactory(Configuration config) {
602 			this.mappings = config.createMappings();
603 			return null;
604 		}
605 	}
606 
607 
608 	public static class DummyMergeEventListener implements MergeEventListener {
609 
610 		public void onMerge(MergeEvent event) throws HibernateException {
611 		}
612 
613 		public void onMerge(MergeEvent event, Map copiedAlready) throws HibernateException {
614 		}
615 	}
616 
617 }
618