osgi 环境下 hibernate 4 配置

本文探讨了在将公司应用迁移至OSGI Karaf平台过程中遇到的主要问题——类加载问题,尤其是与Hibernate的整合。详细介绍了通过创建服务注册表和配置文件,实现Hibernate4上的类加载代理的方法。强调了Hibernate3不适用于此场景,除非进行源码修改。分享了解决此类问题的经验和技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

准备将公司的老应用迁移到OSGI karaf平台上。很吐血的一点就是hibernate。 这玩意,真是超级麻烦的一个工程。
classload是最头痛的一个问题。在Hibernate4上利用注册服务的方式 实现了 classloader的代理。
顺便提一句想用Hibernate3做reloadclass的同学们别妄想了。
除非是改源码。

01 /**
02      * Rebuild hibernate session factory
03      *
04      */
05     public static void rebuildSessionFactory() {
06         try {
07             // create a BootstarpRegistry
08             BootstrapServiceRegistry bootstrapServiceRegistry = new BootstrapServiceRegistryBuilder()
09             // pass in a class-loader Hibernate should use to load application
10             // classes
11                     .withApplicationClassLoader(org.postgresql.Driver.class.getClassLoader())
12                     // pass in a class-loader Hibernate should use to load
13                     // resources
14                     .withResourceClassLoader(HibernateSessionFactory.class.getClassLoader()).build();
15  
16             // create a ServiceRegistry
17             ServiceRegistryBuilder registryBuilder = new ServiceRegistryBuilder(bootstrapServiceRegistry);
18  
19             // clear
20             configuration = new Configuration();
21             // read config
22             URL u = HibernateSessionFactory.class.getClassLoader().getResource(configFile);
23             configuration.configure(u);
24             registryBuilder.applySettings(configuration.getProperties());
25             // build ServiceRegistry
26             ServiceRegistry serviceRegistry = registryBuilder.buildServiceRegistry();
27  
28             // create SessionFactory
29             sessionFactory = configuration.buildSessionFactory(serviceRegistry);
30         catch (Exception e) {
31             System.err.println("%%%% Error Creating SessionFactory %%%%");
32             e.printStackTrace();
33         }
34     }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值