web服务器中shell启动java调ibtas取数据与online的区别

来源:互联网 发布:天地传说之宝莲灯源码 编辑:程序博客网 时间:2024/05/22 06:34

最近在做一个项目中,需要将原来在DB服务器中的处理移植到online上来。

这样就导致存在一个问题:要将在DB服务器中的调用数据库方式转换成Web服务器中的调用数据库方式。


整理下思路,我想到以下的实施方法:

1,首先在Web服务器中,新写个shell程序,在shell中调用java class。

2,在java class中调用serviceFactory生产的service class,得到DB用的service类

3,得到service类就可以操作数据库,完成数据的查询更新等处理了。


下面具体来针对以上的步骤中要注意的事项说明一下:

步骤1:

.shell文件中要用setenv 命令把后面要调用的java class要使用的java包,以及class全部声明下。

.要注意如果自己要把java文件打成jar包的话,要从src目录下开始做,譬如你的代码结构是

  src

      |_com

      |_|_cn

      |      |_daig

      |_jp

那要在src目录上层,将scr目录下的代码全部打包。打包命令:jar cvf src.jar src(当前目录下)

顺便说下解压命令:jar xvf scr.jar

.最重要的JAVA_HOME 要setenv,然后使用${JAVA_HOME}/bin/java -Xms100M -Xmx1000M co.cn.daig.Test (全路径class类)


步骤二:

.我们在web服务器中使用的sqlmap.xml中使用的是jndi方式。

<transactionManager type="JDBC" ><dataSource type="JNDI"><property name="DataSource" value="java:comp/env/jdbc/jpetstore"/></dataSource></transactionManager>

但是我们从shell启动java的时候就获取不了这个jndi了,我们只能使用其他的方式,譬如SIMPLE方式。否则可能会报出如下exception:

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an 


    < transactionManager    type ="JDBC" >       < dataSource    type ="SIMPLE" >           < property    name ="JDBC.Driver"    value ="oracle.jdbc.driver.OracleDriver" />           < property    name ="JDBC.ConnectionURL"    value ="jdbc:oracle:thin@192.168.1.1:1500:testDB" />           < property    name ="JDBC.Username"    value ="user" />           < property    name ="JDBC.Password"    value ="mypass" />           < property    name ="Pool.MaximumActiveConnections"    value ="10" />           < property    name ="Pool.MaximumIdleConnections"    value ="5" />           < property    name ="Pool.MaximumCheckoutTime"    value ="120000" />           < property    name ="Pool.TimeToWait"    value ="500" />           < property    name ="Pool.PingQuery"    value ="select 1 from ACCOUNT" />           < property    name ="Pool.PingEnabled"    value ="false" />           < property    name ="Pool.PingConnectionsOlderThan"    value ="1" />           < property    name ="Pool.PingConnectionsNotUsedFor"    value ="1" />         </ dataSource >       </ transactionManager >  

还有在WEB服务器中我们online方式的时候,如果我们使用sqlMapPlugIn的方式来做DB access的初期化的话,

web服务启动的时候会加载struts-config.xml中的plug-in配置,本项目就是这种方式。

 < plug-in        className = "cn.co.ibm.x1.ko.common.plugin.SqlMapPlugIn " >         < set-property property = "daoClassName"            value = "cn.co.ibm.x1.ko.common.dao.sqlmap.oracle.OracleDaoImpl"/>     </plug-in > 
如果我们是shell其中java的话,这个plugin配置肯定是读取不到了,当然也不会自动为我们加载了。

那么就需要我们在生产serviceFactory的时候,手动给sqlMapPlugIn类设定了

SqlMapPlugIn smp = new SqlMapPlugIn();smp.setDaoClassName("cn.co.ibm.x1.ko.common.dao.sqlmap.oracle.OracleDaoImpl");smp.init(null,null);

后续会附上代码。