通过JAVA、VB访问SAS IOM服务器

原创 2006年05月22日 16:46:00


通过IOM(“Integrated Object Model” )服务器,没有必要使SAS安装在本地系统,通过Management Console和Enterprise Guide工具可以完美的连接到远端的SAS主机上

需要注意的是IOM服务器并不是代表一个具体的服务器,在SAS IT中,有下面4中类型的IOM服务器
 Metadata 服务器 – 存储和管理元数据库,包含哪些SAS服务器、库、和存储过程可用
 工作空间服务器 – 维护SAS程序环境;
 存储过程服务器 – 运行 “canned” SAS程序
 OLAP服务器 – 驱动CUBE数据到SAS Enterprise Guide或者其它OLAP客户端

工作空间服务器有下面3中类型
 JAVA客户端连接到IOM服务器使用JAVA-IOM桥
 WIN客户端连接到IOM服务器使用COM/DCOM技术,
 WIN客户端可以连接到运行在UNXI上的IOM服务器,通过使用COM-IOM桥

对于WIN应用,IOM支持ADO通过OLEDB访问SAS数据
对应JAVA,JDBC2.0访问是被支持的

工作空间服务器包含下面接口
 工作空间Workspace – SAS会话
 语言服务Language Service –提交SAS DATA步和过程步,接收LOG和LIST输出,运行存储过程
 数据服务Data Service – 管理SAS库
 文件服务File Service – 管理文件标识
 实用工具Utilities – formats, options, result packages, host system information

存储过程服务器
 用于存放存储过程,其结果可以被WEB(Information Delivery Portal,BI WEB服务)、OFFICE(OFFICE插件)或者Enterprise Guide 3.0使用

假设在SAS服务器上存在下面文件
 C:/temp>type IOMTest.sas
 %let cond=;
 *ProcessBody;
 proc print data=sashelp.class;
 title "Test Stored Process";
 where &cond;
 run;  
 
VB例子:
 必须引用下面库
  SAS: Integrated Object Model (SAS System 9.1)
   SASWorkspaceManager 1.1 Type Library 
   
Connecting with DCOM in Visual Basic
Option Explicit
' define a global workspace
Dim obSAS As SAS.Workspace
Dim obWSMgr As New SASWorkspaceManager.WorkspaceManager
Private Sub Form_Load()
Dim xmlInfo As String
' create Workspace server
Dim obServer As New SASWorkspaceManager.ServerDef
obServer.MachineDNSName = "hunding"
Set obSAS = obWSMgr.Workspaces.CreateWorkspaceByServer _
("", VisibilityProcess, obServer, "", "", xmlInfo)
End Sub
Private Sub cmdTest1_Click()
' use LanguageService to submit code
obSAS.LanguageService.Submit _
"%include 'c:/temp/IOMTest.sas'; run;"
MsgBox obSAS.LanguageService.FlushLog(100000)
MsgBox obSAS.LanguageService.FlushList(100000)
End Sub
Private Sub cmdTest2_Click()
'run the stored SAS program
Dim obStoredProcessService As SAS.StoredProcessService
Set obStoredProcessService = _
obSAS.LanguageService.StoredProcessService
obStoredProcessService.Repository = "file:c:/temp"
obStoredProcessService.Execute "IOMtest", "cond='sex eq ""M""'"
MsgBox obSAS.LanguageService.FlushLog(100000)
MsgBox obSAS.LanguageService.FlushList(1000000)
End Sub
Private Sub Form_Unload(Cancel As Integer)
obWSMgr.Workspaces.RemoveWorkspaceByUUID _
obSAS.UniqueIdentifier
obSAS.Close
End Sub
  
VC例子
#include <iostream>
#include <stdexcept>
#include <windows.h>
using namespace std;
#import "C:/Program Files/SAS Institute/Shared Files/Integration
Technologies/sas.tlb"
#import "C:/Program Files/SAS Institute/Shared Files/Integration
Technologies/SASWMan.dll"
int main()
{
SASWorkspaceManager::IWorkspaceManager2Ptr pIWorkspaceManager;
SASWorkspaceManager::IServerDef2Ptr pIServerDef = NULL;
SAS::IWorkspacePtr pIWorkspace;
BSTR xmlInfo;
HRESULT hr = CoInitialize(NULL);
hr = pIWorkspaceManager.CreateInstance(
"SASWorkspaceManager.WorkspaceManager.1");
pIServerDef.CreateInstance("SASWorkspaceManager.ServerDef");
pIServerDef->PutMachineDNSName("hygelac");
pIServerDef->Protocol = SASWorkspaceManager::ProtocolBridge;
pIServerDef->put_Port(8591);
pIWorkspace = pIWorkspaceManager->Workspaces->CreateWorkspaceByServer(
_bstr_t(""), //workspace name
SASWorkspaceManager::VisibilityProcess,
pIServerDef, // server
_bstr_t("sassrv"), // login
_bstr_t("sasuser"), // password
&xmlInfo // connection log
);
pIWorkspace->LanguageService->Submit(
"%include '/home/sasadm/IOMTest.sas'; run;");
MessageBox(NULL,
pIWorkspace->LanguageService->FlushLog(10000),
"SAS Log",
MB_OK
);
MessageBox(NULL,
pIWorkspace->LanguageService->FlushList(10000),
"List Output",
MB_OK
);
pIWorkspace->Close();
return(0);
}
JAVA客户端

 编译时使用下面命令
 javac -classpath ".:C:/Program Files/SAS/SAS 9.1/core/sasmisc/sas.svc.connection.jar" IOMTest.java
 sas.svc.connection.jar文件位于 C:/Program Files/SAS/SAS 9.1/core/sasmisc 下
 
 例子代码如下:
import com.sas.services.connection.Server;
import com.sas.services.connection.BridgeServer;
import com.sas.services.connection.ConnectionFactoryConfiguration;
import com.sas.services.connection.ConnectionFactoryManager;
import com.sas.services.connection.ConnectionFactoryInterface;
import com.sas.services.connection.ConnectionFactoryException;
import com.sas.services.connection.ConnectionInterface;
import com.sas.services.connection.ManualConnectionFactoryConfiguration;
import com.sas.iom.SAS.IWorkspace;
import com.sas.iom.SAS.IWorkspaceHelper;
import com.sas.iom.SAS.ILanguageService;
import com.sas.iom.SAS.ILanguageServicePackage.CarriageControlSeqHolder;
import com.sas.iom.SAS.ILanguageServicePackage.LineTypeSeqHolder;
import com.sas.iom.SASIOMDefs.GenericError;
import com.sas.iom.SASIOMDefs.StringSeqHolder;
import javax.swing.JOptionPane;
public class IOMTest{
public IOMTest() throws ConnectionFactoryException, GenericError
{
// connection parameters
String classID = Server.CLSID_SAS;
String host = "hunding";
int port = 8591;
String userName = "sassrv";
String password = "sasuser";
// identify the IOM Bridge server (the Workspace server)
Server server = new BridgeServer(classID,host,port);
// make a manual connection factory configuration to the server
ConnectionFactoryConfiguration cxfConfig =
new ManualConnectionFactoryConfiguration(server);
// get a connection factory manager
ConnectionFactoryManager cxfManager =
new ConnectionFactoryManager();
// get a connection factory interface from the manager
ConnectionFactoryInterface cxf = cxfManager.getFactory(cxfConfig);
// get a connection from the interface
ConnectionInterface cx = cxf.getConnection(userName,password);
// create a workspace by "narrowing" the connection to the ORB
IWorkspace iWorkspace = IWorkspaceHelper.narrow( cx.getObject() );
// Submit batch SAS code
ILanguageService sasLanguage = iWorkspace.LanguageService();
sasLanguage.Submit("%include 'c://temp//IOMtest.sas'; run;");
// flush log file to string array
StringSeqHolder logHldr = new StringSeqHolder();
sasLanguage.FlushLogLines(
Integer.MAX_VALUE,
new CarriageControlSeqHolder(),
16
new LineTypeSeqHolder(),
logHldr);
// display log file
String[] logLines = logHldr.value;
JOptionPane.showMessageDialog(null, logLines);
// flush list file to string array
StringSeqHolder listHldr = new StringSeqHolder();
sasLanguage.FlushListLines(
Integer.MAX_VALUE,
new CarriageControlSeqHolder(),
new LineTypeSeqHolder(),
listHldr);
// display list file
String[] listLines = listHldr.value;
JOptionPane.showMessageDialog(null, listLines);
iWorkspace.Close();
cx.close();
}
public static void main(String args[]) {
try {
new IOMTest();
System.exit(0);
}
catch(Exception ex) {
ex.printStackTrace();
System.exit(1);
}
}
}  
  
  
详情参考下面链接

· SAS OnlineDoc (includes links to all the separate product documentation).
<http://support.sas.com/91doc/docMainpage.jsp>
· SAS Integration Technologies: Version 9 Documentation.
<http://support.sas.com/rnd/itech/library/library9.html.>
· SAS Integration Technologies: Release 8.2 Documentation.
<http://support.sas.com/rnd/itech/library/library82.html>
· SAS 9.1 Open Metadata Architecture: Best Practices Guide.
<http://support.sas.com/rnd/eai/openmeta/v9/bestpractices/>
· SAS 9.1.2 Metadata Server: Setup Guide. <http://support.sas.com/rnd/eai/openmeta/v9/setup/>  

SAS9-IT技术应用-通过JAVA访问SAS实例

在配置好SAS的IT后,其容许JAVA通过Bridge技术访问IT,下面写一个测试例子,通过JAVA执行DATA STEP,并获得返回的日志信息//Untitled1.javaimport com.s...
  • AnyJack
  • AnyJack
  • 2004年09月27日 13:46
  • 3028

SAS IT 配置指南(图文版)

  SAS IT 配置指南(图文版)初始化工作环境首先建立如下目录结构然后在计算机管理中增加2用户 itadmin ,ituser,分别用于管理和访问,密码一致为了使之正常工作,需要为上面2用户制定相...
  • AnyJack
  • AnyJack
  • 2006年11月03日 15:57
  • 10652

通过SAS connect drvier for java 来访问SAS

  通过SAS connect drvier for java 来访问SAS 通过sas share*.net可以在java中使用jdbc来访问SAS数据集,但是通过这种方式只能访问SAS数据集,而无...
  • AnyJack
  • AnyJack
  • 2007年07月27日 10:09
  • 6716

Java学习之道:SAS学习笔记(一)

概念的理解: 1.逻辑库  由一组SAS文件组成,即类似一个储物箱,包括临时库和永久库。 (1)临时库:启动时存在,关了就删除了 (2)永久库:关了SAS也还是存在 2.数据集...
  • u011511429
  • u011511429
  • 2013年08月03日 23:50
  • 1070

龙芯3A使用qemu运行MegaCli配置raid卡

raid卡功能配置(完善中) 问题如下: 在龙芯3a双路板子上无法支持raid卡的配置,即无法在开机启动的...
  • yarsen
  • yarsen
  • 2011年12月05日 14:39
  • 2003

Sas应用之统计多个数据集重复数据量

我的简书:http://www.jianshu.com/p/1f81f76464ef
  • linuxpassion
  • linuxpassion
  • 2016年07月24日 22:43
  • 1486

JAVA通过JDBC访问SAS数据(通过IOM接口)

通过IOM访问SAS数据是有别于通过sas share访问SAS数据,在这种方式下,用法无需在SAS后台安装SAS SHARE服务器,只需要用户在后台安装好基本的SAS IT SERVER(即包含ME...
  • AnyJack
  • AnyJack
  • 2011年01月24日 20:46
  • 5955

SAS9新体验-在DATA STEP中使用JAVA对象

简介DSCI提供建立和处理组件对象在DATA STEP程序中,JAVAOBJ就是这样的一个对象,其提供类似JNI的机制,可实例化JAVA 类,访问对象属性和方法定义JAVA对象其由DECLARE语法支...
  • AnyJack
  • AnyJack
  • 2004年09月27日 17:11
  • 1874

传说中的800句记7000词

登录 | 注册 ZHB_McCoy的专栏 目录视图摘要视图订阅 一...
  • hang__xiu2016acm
  • hang__xiu2016acm
  • 2016年09月11日 10:43
  • 8061

使用UDEV绑定磁盘FOR ASM

环境:rhel5.3 1:绑定的磁盘需要分区和格式化吗? 需要分区,但不需要格式。 2:为什么要使用asm绑定磁盘 对于Oracle自动存储管理(ASM)所使用的磁...
  • a58457432
  • a58457432
  • 2013年11月28日 15:32
  • 940
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:通过JAVA、VB访问SAS IOM服务器
举报原因:
原因补充:

(最多只允许输入30个字)