一、前言
intra_mart框架是一种基于Java语言的企业级应用开发框架。配备有标准工作流、文档管理、企业内部门户等可开发组件,
能够融合顾客实际业务,按需求进行自定义开发,实现短期间、低成本的系统构筑。
个人感觉主要是供企业管理使用的框架,自带工作流、每个网页权限设置、用户角色权限设置等功能,层层审批方便,先搭建框架,再根据不同企业真实环境需求进一步开发。
其中,Solr
是一个开源的全文搜索服务,搜索用的;Resin
类似tomcat,容器,启动项目用的;Cassandra
是一个非关系型数据库,因为框架自带IMbox功能(聊天盒子),聊天信息非常多,存到非关系型数据库比较合适;PostgreSQL
是一个对象关系数据库,类似Mysql;Local Storage
是本地缓存,就是Session缓存之类的。
本文总结下,intra-mart配置多个PostgreSQL
数据库链接的方法。(其他数据库链接也类似)
二、PostgreSQL准备工作
1.创建用户组
首先创建一个用户组,点击Login/Group Role:
名称写test
,点击ok,就创建了一个用户组。
用户组如下:
2.创建用户
然后创建一个用户,同样点击Login/Group Role,注意:
用户名称,自定义,本人填写的是imart
:
用户密码,本人填写的也是imart
:
这里要选上可以登录,这样创建的才是用户,否则创建的还是组:
关系,选择这个用户属于test组:
点击ok,用户就创建完毕了。
3.创建数据库与表
右键database,点击创建:
数据库名输入为了imart_test
,选择所属test
组,点击ok创建:
然后创建表,右键点击table创建,测试用的表名是test
,列是id
(bigint类型,主键)与name
(character varying类型),值如下图(1a,2b,3c):
三、intra-mart代码
1.resin-web.xml
首先找到\resin-pro-4.0.66\webapps\imart\WEB-INF\resin-web.xml
文件,内容如下:
<database jndi-name="jdbc/default"><driver><type>org.postgresql.ds.PGConnectionPoolDataSource</type><url>jdbc:postgresql://localhost:5432/imart</url><user>postgres</user><password>root</password><preparedStatementCacheQueries>0</preparedStatementCacheQueries></driver><max-connections>20</max-connections><prepared-statement-cache-size>0</prepared-statement-cache-size></database><database jndi-name="jdbc/imart_test"><driver><type>org.postgresql.ds.PGConnectionPoolDataSource</type><url>jdbc:postgresql://localhost:5432/imart_test</url><user>imart</user><password>imart</password><preparedStatementCacheQueries>0</preparedStatementCacheQueries></driver><max-connections>20</max-connections><prepared-statement-cache-size>0</prepared-statement-cache-size></database>
其中,一个数据源的名字是jdbc/default
,链接的本地PostgreSQL数据库是imart
,用户名是postgres
,密码是root
;
另一个数据源的名字是jdbc/imart_test
,链接的本地PostgreSQL数据库就是新创建的imart_test
,用户名是imart
,密码是imart
。
2.data-source-mapping-config.xml
找到\resin-pro-4.0.66\webapps\imart\WEB-INF\conf\data-source-mapping-config.xml
文件,内容如下:
<system-data-source><resource-ref-name>java:comp/env/jdbc/default</resource-ref-name><!-- WebSphere<resource-ref-name>jdbc/default</resource-ref-name>--></system-data-source><shared-data-source><connect-id>imart_test</connect-id><resource-ref-name>java:comp/env/jdbc/imart_test</resource-ref-name></shared-data-source><tenant-data-source><tenant-id>default</tenant-id><resource-ref-name>java:comp/env/jdbc/default</resource-ref-name><!-- WebSphere<resource-ref-name>jdbc/default</resource-ref-name>--></tenant-data-source>
intra-mart有三种数据库链接:
system-data-source
是系统数据源,这个是框架内部使用的数据源,开发者不能使用;配置的java:comp/env/jdbc/default
末尾部分,jdbc/default
要与resin-web.xml
中的保持一致,意思就是使用这个数据库链接;
tenant-data-source
是租户数据源,用来保存租户的数据,这个官方文档写着可以配置多个,但是使用的时候本人没有找到获取方法。其中tenant-id
设置为了default
,resource-ref-name
设置为了jdbc/default
,也使用本地imart数据库;
shared-data-source
是共享数据源,用来保存系统框架外的数据(例如和外部系统连携时,保存外部系统用的数据),这个可以配置多个,使用的时候可以根据connect-id
获取到指定数据源。其中,connect-id
设置为了imart_test
,resource-ref-name
配置为了jdbc/imart_test
,使用上方创建的本地imart_test数据库。
3.test.xml
在\resin-pro-4.0.66\webapps\imart\WEB-INF\conf\routing-jssp-config
文件夹下,创建一个test.xml
文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<routing-jssp-configxmlns="http://www.intra-mart.jp/router/routing-jssp-config"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.intra-mart.jp/router/routing-jssp-config routing-jssp-config.xsd"><authz-default mapper="welcome-all" /><file-mapping path="/test/testSQL" page="test/testSQL" /></routing-jssp-config>
这个是设置路由的文件,其中<authz-default mapper="welcome-all" />
表示页面默认没有权限,都可以访问;<file-mapping path="/test/testSQL" page="test/testSQL" />
中配置了url路径为/test/testSQL
,页面位置为test文件夹下的testSQL文件(本文用到了testSQL.html和testSQL.js文件)。
4.testSQL.html
在\resin-pro-4.0.66\webapps\imart\WEB-INF\jssp\src\
下创建一个test
文件夹,在文件夹中创建一个testSQL.html
文件,内容如下:
data is <imart type="string" value=data />.
这个测试页面,会显示数据库查询到的数据,value=data
表示参数的名字是data,下方会写到。
js_148">5.testSQL.js
在testSQL.html文件相同位置,创建一个testSQL.js
文件,内容如下:
var data;function init(request) {//这个方法,获取到的是<tenant-id>default</tenant-id>的数据源//var database = new TenantDatabase();//测试了这样不行,获取到的还是<tenant-id>default</tenant-id>的数据源,获取不到<tenant-id>imart_test</tenant-id>的数据源//官网也确实没有这个写法,所以TenantDatabase只能配置1个?//var database = new TenantDatabase("imart_test");//这个方法,可以获取到<connect-id>imart_test</connect-id>数据源var database = new SharedDatabase("imart_test");var result = database.execute("select * from test limit 10");//这个是日志打印方法var logger = Logger.getLogger();logger.info('hello');logger.info('arguments=[{}]', result);logger.info('arguments=[{}]', result.data[0]);data = result.data[0].name;
}
其中,new SharedDatabase("imart_test");
就可以根据名称,获取到配置的共享数据源<connect-id>imart_test</connect-id>
,sql语句查询到多条后,使用result.data[0]
可以获取到第一条数据,再使用.name
就可以获取到name列的值。(上方创建的数据库表test的name列)
6.配置快速跳转按钮
现在,页面可以通过http://localhost:8080/imart/test/testSQL
访问到;
为了方便,也可以配置一个快速跳转按钮。
点击右边的图标-设置:
点击添加页面按钮:
输入名称,url,点击创建:
创建好后,刚才的页面就会出现按钮,点击就可以跳转到测试页面。
四、测试
页面可以通过http://localhost:8080/imart/test/testSQL
访问,或者点击跳转按钮:
其中,a就是测试数据库imart_test.test表里的name字段。
五、备注
tenant-data-source的获取方法只有new TenantDatabase();
,不管加不加入参,获取的都是default的数据库链接,所以其实tenant-data-source只能配置一个?
shared-data-source的获取方法有new SharedDatabase("imart_test");
,可以根据名称获取不同的数据源,shared-data-source可以配置多个。
官网地址:
https://document.intra-mart.jp/library/iap/public/development/script_programming_guide/texts/application/database/index.html