问题: 在SAS Marketing Automatoin实施过程中,在Customer Intelligence 中使用处理节点来调用webservice,出错,在SAS9.2中单独运行soap调用,发现了出现了调用Java Proxy出错。
错误如下:
ERROR: The Java proxy is not responding.
ERROR: The Java proxy cannot allocate memory.
NOTE: PROCEDURE SOAP used (Total process time):
在SAS9.2中 进一步检查:使用 proc options option=jreoptions; run;
查看jre配置信息,运行后结果如下,必须保证JREOPTIONS=( -Dsas.jre.libjvm=C:\Program Files (x86)\Java\jre6\bin\client\jvm.dll---指向有效的jre路径
18 proc options option=jreoptions;
19 run;
SAS (r) Proprietary Software Release 9.2 TS2M3
JREOPTIONS=( -Dsas.jre.libjvm=C:\Program Files (x86)\Java\jre7\bin\client\jvm.dll
-Djava.security.policy=C:\Program Files\SAS\SASFoundation\9.2\core\sasmisc\sas.policy
-Dsas.ext.config=C:\Program Files\SAS\SASFoundation\9.2\core\sasmisc\sas.java.ext.config
-Dsas.app.class.path=C:\PROGRA~1\SAS\SASVER~1\9.2\eclipse\plugins\tkjava.jar
-DPFS_TEMPLATE=C:\Program Files\SAS\SASFoundation\9.2\core\sasmisc\qrpfstpt.xml
-Djava.class.path=C:\PROGRA~1\SAS\SASVER~1\9.2\eclipse\plugins\SASLAU~1.JAR
-Djava.system.class.loader=com.sas.app.AppClassLoader -Xmx128m -Xms128m
-Djava.security.auth.login.config=C:\Program
Files\SAS\SASFoundation\9.2\core\sasmisc\sas.login.config -Dtkj.app.launch.config=C:\Program
Files\SAS\SASFoundation\9.2\picklist )
Java Runtime Environment options
NOTE: PROCEDURE OPTIONS used (Total process time):
real time 0.00 seconds
cpu time 0.00 seconds
在SAS9.2中 检查java信息:运行 proc javainfo;run;返回结果如下:
ERROR: The Java proxy is not responding.
ERROR: The Java proxy cannot allocate memory.
NOTE: PROCEDURE SOAP used (Total process time):
说明SAS没有调用相关的jre配置,也就是说使用proc options option=jreoptions; run;得到的-Dsas.jre.libjvm=C:\Program Files (x86)\Java\jre6\bin\client\jvm.dll配置无效。
进一步到SAS官网确认SAS9.2支持的jre version,发现sas9.2不支持jre1.7。
解决方法:
停掉SAS所有服务
1 重新安装Jre
到SAS官网查看SAS9.2支持的jre版本,然后到oracle官网下载32bitjre,一般为jre1.6u23.
到windows下使用安装SAS9.2的用户来安装。(首先要停掉SAS9.2的所有服务,包括Jboss)。
记住安装的目录,一般为C:Program Files(x86)\java\jre6.
2 在SAS的主目录C:\Program Files\SAS\SASFoundation\9.2\nls\en下找到SASV9.CFG文件
在次目录下备份文件SASV9.CFG为SASV9.CFG_Original。
修改SASV9.CFG中的-JREOPTIONS=(-Dsas.jre.libjvm=C:\Program Files (x86)\Java\jre7\bin\client\jvm.dll为Dsas.jre.libjvm=C:\Program Files (x86)\Java\jre6\bin\client\jvm.dll,然后保存。
3 启动所有SAS服务,使用proc options,以及proc javainfo验证jre是否正确被调用。
如果成功,则更新成功。
参考:http://www.sascommunity.org/wiki/Java_JRE_1.5
附上SOAP调用例子,方法:
FILENAME REQUBAT 'c:\TEMP\REQUEBATCHACTLOG.XML';
FILENAME RESPBAT 'c:\TEMP\RESPBATCHACTLOG.XML';
LIBNAME CICDM ORACLE PATH=mkt SCHEMA=CIBUS USER=CIBUS PASSWORD="smart";
data work.temp;
length xmlelement $2048.;
run;
%PUT &campCODE;
%PUT &commCODE;
%LET REQUEST_BAT=REQUEST_BAT;
%LET RESPONSE_BAT=RESPONSE_BAT;
%LET GROUP_ID=0;
%LET COUNT_SUBS=0;
%LET CP_SK=0;
%LET CAMPCODE=&campCODE;
%LET EXC_DATE=;
%let comm_sk=0;
PROC SQL NOPRINT ;
select max(communication_sk)into :comm_sk
from CICDM.ci_cell_package
where communication_cd='&commCODE';
select cell_package_sk into :CP_SK
from CICDM.ci_cell_package
where communication_sk=&comm_sk;
SELECT COUNT(*) INTO:COUNT_SUBS
FROM CICDM.CI_CONTACT_HISTORY_SUBS
WHERE CELL_PACKAGE_SK=&CP_SK;
SELECT COUNT(SUBS_ID)INTO:COUNT_SUBS FROM &INTABLE;
QUIT;
data _null_;
%let exc_date=%sysfunc(putn(%eval(%sysfunc(today())),yymmddn8.));
%put &exc_date;
run;
PROC SQL;
DELETE * FROM TEMP;
INSERT INTO WORK.TEMP VALUES ('<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mkt="http://zsmart.zte.com/MKTService/">');
INSERT INTO WORK.TEMP VALUES (' <soapenv:Header/> ');
INSERT INTO WORK.TEMP VALUES (' <soapenv:Body> ');
INSERT INTO WORK.TEMP VALUES (' <mkt:SASBatchActionLog> ');
INSERT INTO WORK.TEMP VALUES (" <campaign_id>&campCODE</campaign_id> ");
INSERT INTO WORK.TEMP VALUES (" <group_id>&GROUP_ID</group_id> ");
INSERT INTO WORK.TEMP VALUES (" <exec_date>&EXC_DATE</exec_date> ");
INSERT INTO WORK.TEMP VALUES (" <count_subs>&COUNT_SUBS</count_subs> ");
INSERT INTO WORK.TEMP VALUES (' </mkt:SASBatchActionLog> ');
INSERT INTO WORK.TEMP VALUES (' </soapenv:Body> ');
INSERT INTO WORK.TEMP VALUES ('</soapenv:Envelope> ');
QUIT;
data _null_;
set work.temp;
file REQUBAT;
put xmlelement;
run;
proc soap in=REQUBAT
out=RESPBAT
url="http://192.168.73.209:8080/mkt/services/MKTServiceSOAP";
run;