Java Webstart启用Hibern8IDE - 没有成功!

   |      

最近我一直在尝试向Hibern8IDE添加自定义类加载,以便它可以动态加载模型和数据库驱动类。

这使我们能够独立运行Hibern8IDE,而不是要求用户从他们的实际项目运行它(当然,这仍然可行;)

“技巧”如下

Thread thread = Thread.currentThread();
ClassLoader prevCl = thread.getContextClassLoader();
   try {
       List urls = ... // a list of paths/zips/jars for the classloader
       if(urls.size()>0) {
            URLClassLoader _newLoader = new URLClassLoader((URL[]) urls.toArray(new URL[0]), thread.getContextClassLoader());
            thread.setContextClassLoader(_newLoader);
            }                   
        // convince DriverManager that you can use our specified driver!
        String driverClass = props.getProperty("hibernate.connection.driver_class");
        if(driverClass!=null) {
        try {
            Class driverClazz = ReflectHelper.classForName(driverClass);
            DriverManager.registerDriver(new FakeDelegatingDriver((Driver) driverClazz.newInstance()));
            } catch (... e1) {               
            }
        }
        configuration = new Configuration();
        configuration = configuration.setProperties(props);
        configuration = configuration.configure(configfile);
        
        Iterator hbms = mappings.iterator();
        
        while (hbms.hasNext()) {
            hbm = (File) hbms.next();
            configuration = configuration.addFile(hbm.toString());
         }
         
         initialize(); // build sessionfactory etc.
        } catch (... e) {
       } finally {
        thread.setContextClassLoader(prevCl);
       }

代码做了两件事:在加载映射和jdbc驱动时安装Hibern8IDE自定义类加载器,以及安装一个FakeDelegatingDriver来让java.sql.DriverManager相信它可以从系统类加载器之外的其他地方加载jdbc驱动。

这确实有效,但是在尝试通过Java Webstart启用Hibern8IDE时却失败了:)

尽管JNLP文件中有标签,但Java Webstart对它的权限策略非常严格:<all-permission/>标签::

模型类和驱动程序的加载工作顺利,但一旦驱动程序试图连接到数据库,就会抛出一个安全异常,表示应用程序不允许连接到数据库机器上的端口:)

因此,目前Hibern8IDE只提供独立版本,遗憾的是,由于Java Webstart的严格性,无法通过Java Webstart提供!

欢迎提出任何有创意的想法!


返回顶部