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

本文介绍了一种将数据库调用方式从DB服务器迁移到Web服务器的方法。通过编写shell脚本并调用Java类来实现数据库操作,同时解决了JNDI不可用的问题,采用SIMPLE方式配置数据源。

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

最近在做一个项目中,需要将原来在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);

后续会附上代码。

           


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值