博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在插件里应用hsqldb和hibernate
阅读量:5110 次
发布时间:2019-06-13

本文共 3787 字,大约阅读时间需要 12 分钟。

最近计划用插件化的hibernate和嵌入式数据库来完成一些功能,目前使用的数据库是HsqlDB和Derby。

hibernate独立一个插件出来,mapping信息在本插件内维护,数据库的cfg信息则由数据库插件维护。

要解决的事情很多,比如hibernate的在插件里的寻址问题和数据库的配置问题。

 

刚刚开始这些工作,写一些心得体会。

先说HsqlDB在插件里的配置方法:

需要一个hsqldb包,我使用的版本是hsqldb-1.8.0.1.jar,把该jar包放置在插件的lib文件夹下,然后在Manifest.MF文件->Runtime->ClassPath处导入,之后Exported Packages处暴露出org.hsqldb(这是为了能让引用本插件的插件能够找到数据库驱动)

 

我们可以看看hsqldb的说明文档,可以得知org.hsqldb.Server是数据库的启动位置,它包含一个main方法,如下:

View Code
/**     * Creates and starts a new Server.  

* * Allows starting a Server via the command line interface.

* * @param args the command line arguments for the Server instance */ public static void main(String[] args) { String propsPath = FileUtil.canonicalOrAbsolutePath("server"); HsqlProperties fileProps = ServerConfiguration.getPropertiesFromFile(propsPath); HsqlProperties props = fileProps == null ? new HsqlProperties() : fileProps; HsqlProperties stringProps = HsqlProperties.argArrayToProps(args, ServerConstants.SC_KEY_PREFIX); if (stringProps != null) { if (stringProps.getErrorKeys().length != 0) { printHelp("server.help"); return; } props.addProperties(stringProps); } ServerConfiguration.translateDefaultDatabaseProperty(props); // Standard behaviour when started from the command line // is to halt the VM when the server shuts down. This may, of // course, be overridden by whatever, if any, security policy // is in place. ServerConfiguration.translateDefaultNoSystemExitProperty(props); // finished setting up properties; Server server = new Server(); server.setProperties(props); // now messages go to the channel specified in properties server.print("Startup sequence initiated from main() method"); if (fileProps != null) { server.print("Loaded properties from [" + propsPath + ".properties]"); } else { server.print("Could not load properties from file"); server.print("Using cli/default properties only"); } server.start(); }

我们可以为它提供各种选项,比如-port -database.? -dbname.?等

我们可以新建一个服务类,提供出start和stop方法,在start方法中调用Server.main(XX)即可。

这样就配置好了hsqlDB

 

再来是hibernate配置,相对要复杂一点。

需要的包可以参考上一篇文章,把这些jar包放入lib文件夹内,导入它们。

提供一个继承自org.hibernate.cfg.Configuration的MyConfiguration

重写以下方法(测试用代码,仅供参考):

protected InputStream getConfigurationInputStream(String resource)            throws HibernateException {        log.info("Configuration resource: " + resource);        try {            return FileLocator.openStream(Activator.getDefault().getBundle(),                    new Path(resource), false);        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        return ConfigHelper.getResourceAsStream(resource);    }    public Configuration addResource(String resourceName)            throws MappingException {        try {            return addInputStream(FileLocator.openStream(Activator.getDefault()                    .getBundle(), new Path(resourceName), false));        } catch (MappingException me) {            throw new InvalidMappingException("resource", resourceName, me);        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }        return super.addResource(resourceName);    }

 

这样我们的.hbm.xml和.cfg.xml文件就可以放置在插件的任意位置了。

于是就完成了对hibernate的配置。

 

下一步的工作是,把.cfg.xml中数据库的配置部分转移到数据库插件去,实现随时替换数据库。

转载于:https://www.cnblogs.com/anrainie/archive/2012/05/23/2514842.html

你可能感兴趣的文章
第一个Spring冲刺周期团队进展报告
查看>>
C++函数基础知识
查看>>
红黑树 c++ 实现
查看>>
Android 获取网络链接类型
查看>>
linux中启动与终止lnmp的脚本
查看>>
gdb中信号的处理[转]
查看>>
LeetCode【709. 转换成小写字母】
查看>>
如何在Access2007中使用日期类型查询数据
查看>>
Jzoj4757 树上摩托
查看>>
CF992E Nastya and King-Shamans(线段树二分+思维)
查看>>
oracle 几个时间函数探究
查看>>
第一个Java Web程序
查看>>
树状数组_一维
查看>>
如果没有按照正常的先装iis后装.net的顺序,可以使用此命令重新注册一下:
查看>>
linux install ftp server
查看>>
嵌入式软件设计第8次实验报告
查看>>
算法和数据结构(三)
查看>>
Ubuntu下的eclipse安装subclipse遇到没有javahl的问题...(2天解决了)
查看>>
alter database databasename set single_user with rollback IMMEDIATE 不成功问题
查看>>
idea 系列破解
查看>>