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