java中间件常见问题及解决方案集锦
作者:黄星

一、配置说明
短信猫配置,举例:
第一个短信猫的配置:
gateway.0=modem1, SerialModem
modem1.port=/dev/ttyUSB0
modem1.baudrate=9600
modem1.manufacturer=Wavecom
modem1.model=M1206B
modem1.protocol=PDU
modem1.pin=0000
modem1.inbound=yes
modem1.outbound=yes
modem1.smsc_number=
modem1.init_string=ATZ\rATZ\rATZ\r
第二个短信猫的配置:
gateway.1=modem2, SerialModem
modem2.port=/dev/ttyUSB1
modem2.baudrate=9600
modem2.manufacturer=Wavecom
modem2.model=M1206B
modem2.protocol=PDU modem2.pin=0000
modem2.inbound=yes
modem2.outbound=yes
modem2.smsc_number=
modem2.init_string=ATZ\rATZ\rATZ\r
其余短信猫的配置依此类推。port和baudrate需要按照实际情况来配置,注意gateway.后边的数字必须从0开始,依次增加
数据库配置,参照如下:
interface.0=db1, Database db1.type=mysql
db1.url=jdbc:mysql://localhost:3306/smsserver?useUnicode=true
&characterEncoding=gb2312
db1.driver=com.mysql.jdbc.Driver
db1.username=root
db1.password=
db1.tables.sms_in=smsserver_in
db1.tables.sms_out=smsserver_out
db1.tables.calls=smsserver_calls
db1.batch_size=50
db1.retries=2
db1.update_outbound_on_statusreport=yes
interface.0=db1, Database
db1.url=jdbc: oracle:thin: @::
db1.driver=oracle.jdbc.driver.OracleDriver
db1.username=
db1.password=
db1.type=oracle
db1.tables.sms_in=smsserver_in
db1.tables.sms_out=smsserver_out
db1.tables.calls=smsserver_call
db1.batch_size=50
db1.retries=2
db1.update_outbound_on_statusreport=no

interface.0=db1, Database
db1.url=jdbc:sqlserver://localhost:1433;SelectMethod=cursor;DatabaseName=smslib
db1.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
db1.username=smslib
db1.password=smslib
db1.type=mssql
db1.tables.sms_in=smsserver_in
db1.tables.sms_out=smsserver_out
db1.tables.calls=smsserver_out
db1.batch_size=50
db1.retries=2
db1.update_outbound_on_statusreport=no

HTTP接口配置:
interface.2=httpServer, HttpServer
httpServer.port=8080
#收短信的密码
httpServer.password.read=0000
#发短信的密码
httpServer.password.send=1111

注意在配置文件中interface.后边的编号必须从0开始依次增加。

二、Oracle数据库支持
1、在部署金笛短信java中间件时,首先您要确定金笛短信java中间件所部署的服务器与您的数据库服务器是否能够连通。windows在命令行下,Linux在终端下使用telnet指令来测试连通性。用法:telnet 数据库服务器IP oracle监听端口。
2、将访问orcale数据库的jdbc驱动包odbc14.jar(或odbc6.jar)拷贝到lib目录下。
3、在conf文件夹下找到配置文件JDSMSServer.conf,添加如下配置
#注意interface.及db后边的数字是根据你自己实际情况进行配置
interface.0=db1, Database
db1.url=jdbc: oracle:thin: @::
db1.driver=oracle.jdbc.driver.OracleDriver
db1.username=
db1.password=
db1.type=oracle
db1.tables.sms_in=smsserver_in
db1.tables.sms_out=smsserver_out
db1.tables.calls=smsserver_call
db1.batch_size=50
db1.retries=2
db1.update_outbound_on_statusreport=no
按照以上的配置金笛短信java中间件就能够使用oracle数据库了。

如果连接orcale数据库时提示找不到或无SID的异常,请修改url为
db1.url=jdbc: oracle:thin: @(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 数据库服务器IP)(PORT =端口)))(CONNECT_DATA =(SERVICE_NAME = CB)数据库服务名,即全局数据库名) )

实际上
(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 数据库服务器IP)(PORT =端口)))(CONNECT_DATA =(SERVICE_NAME = CB)数据库服务名,即全局数据库名) )
是从oracle客户端下的tnsname.ora文件中拷贝过来的。你访问的是哪个数据库就复制对应数据库的连接字符串即可

三、 运行java中间件时出现java虚拟机崩溃的解决方案 方案1、如果您的操作系统是64位的,请在中间件的启动脚本中java命令中加上参数-Dsendsms.serial.polling
方案2、在JDSMSServer.conf配置文件中将settings.delete_after_processing选项设置成yes。如下所示即可:settings.delete_after_processing=yes

四、使用java二次开发包时出现java虚拟机崩溃情况的解决方案 此种情况容易在winows
64位操作系统下进行开发时出现。解决方案,在调用Service.startService()之前加上这一句代码:System.setProperty("sendsms.serial.polling",new String());即可解决 。

五、 使用java中间件及二次开发包时提示找不到端口 情况一:在windows
64位操作系统中使用32位jdk容易出现此种情况,将jdk换成64位jdk即可

六、 no response from device异常的解决方案 二次开发包:在调用Service.startService()之前加上这一句代码:System.setProperty("sendsms.serial.polling",new String());即可解决
中间件:请在中间件的启动脚本中java命令中加上参数-Dsendsms.serial.polling

七、 linux版本常见问题一 在某些linux操作系统下,会出现这样一种情况,中间件启动起来了,但是端口好像也启动成功了,但实际上中间件并没有访问到端口。在终端下执行指令uname
-i发现得到的结果是unknow。在正常情况下,32位的操作系统应该返回的是i386,64位的操作系统支持的是x86_64。中间件启动脚本是根据uname
-i的返回值来决定是加载32位串口访问驱动,还是64位串口访问驱动。当返回unkown或其他值的时候,中间件脚本就无法加载正确的驱动,自然访问不到串口。此种情况的解决方案:编辑启动脚本start_jdsms.sh,有一行的内容为ARCH=`uname
-i`,将该行的内容修改为ARCH=i386(32位系统)或者ARCH=x86_64(64位系统)。重新启动程序即可。
备注:使用指令uname
-a来查看系统是32位还是64位。如果返回结果中带有i386字样说明操作系统是32位的,如果带有amd64,x86_64等的字样则说明是64位的操作系统。