歡迎您光臨本站 註冊首頁

通過JAVA、VB訪問SAS IOM伺服器

←手機掃碼閱讀     火星人 @ 2014-03-10 , reply:0

添加SAS JAR.RAR中的JAR包.

運行以下代碼:

文件: SAS jar.rar
大小: 1581KB
下載: 點擊

import java.rmi.RemoteException;
import java.sql.ResultSet;
import java.util.Properties;

import com.sas.iom.WorkspaceFactory;
import com.sas.iom.SAS.IDataService;

import com.sas.iom.SAS.ILanguageService;
import com.sas.iom.SAS.IWorkspace;
import com.sas.rio.MVAConnection;




public class CreditServiceImpl implements java.rmi.Remote
{

private String HOST = "localhost";
private String PORT = "8591";
private String JDBS_DRIVER_NAME = "com.sas.rio.MVADriver";
private String JDBS_DATEBASE_URL = "jdbc:sasiom://localhost:8591";
private String SAS_USER = "sasadm";
private String SAS_PWD = "sas123?";


public ResultSet getCreditLimit(String libnamestr,String sql )throws java.rmi.RemoteException
{


java.sql.Connection connection = null;
java.sql.Statement statement = null;
java.sql.ResultSet rs = null;
IWorkspace iWorkspace = null;
WorkspaceFactory wsf = null;

try
{
wsf = new WorkspaceFactory();

Properties serverInfo = new Properties();

serverInfo.put("host", HOST);
serverInfo.put("port", PORT);
serverInfo.put("userName", SAS_USER);
serverInfo.put("password", SAS_PWD);

iWorkspace = wsf.createWorkspaceByServer(serverInfo);


ILanguageService iLang = iWorkspace.LanguageService();

//String libnamecm = "libname libstg 'e:\data';";



ILanguageService sasLanguage = iWorkspace.LanguageService();

sasLanguage.Submit(libnamestr);

String log = iLang.FlushLog(50000);

System.out.println(log);

/* Read the result via an MVAConnection */
IDataService iDataService = iWorkspace.DataService();

connection = new MVAConnection(iDataService, new Properties());
statement = connection.createStatement();
//String sql = "Select * from libstg.userinfo";



System.out.println("Curr Libname Command: " libnamestr);
System.out.println("");
System.out.println("Curr Running SQL :" sql);


rs = statement.executeQuery(sql);

// if( rs.next() )

// {

// String UserName = rs.getString("userName");

// System.out.println(UserName);

// }

}
catch( Throwable t )
{
t.printStackTrace();
java.rmi.RemoteException ex = new java.rmi.RemoteException("Error getting credit limit", t);
throw ex;
}
finally {
try{
/* Close JDBC connection if open */
if(connection != null)
{
if(!connection.isClosed())
connection.close();
}


/* Close iWorkspace */
if(iWorkspace != null)
iWorkspace.Close();

/* Shutdown WorkspaceFactory */
if(wsf != null)
wsf.shutdown();
} catch(Throwable t) {
//t.printStackTrace();

}
}
return rs;
}




/**
* @param args
*/

public static void main(String[] args) {
// TODO 自動生成方法存根



CreditServiceImpl csi = new CreditServiceImpl();
String sql = "Select * from libstg.userinfo";
String libnamecm = "libname libstg 'e:\data';";
try {
csi.getCreditLimit(libnamecm,sql);
} catch (RemoteException e) {
// TODO 自動生成 catch 塊

e.printStackTrace();
}

}

}

通過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:tempIOMTest.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

VB例子:

#include <iostream>
#include <stdexcept>
#include <Windows.h>
using namespace std;
#import
"C:Program FilesSAS InstituteShared FilesIntegration
Technologiessas.tlb"

#import
"C:Program FilesSAS InstituteShared FilesIntegration
TechnologiesSASWMan.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 FilesSASSAS 9.1coresasmisc 下

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;
public class IOMTest
{

public IOMTest() throws ConnectionFactoryException, GenericError
{
String classID = Server.CLSID_SAS;
String host = "localhost";
int port = 8591;

String userName = "sasadm";
String password = "sas123?";
Server server = new BridgeServer(classID, host, port);
ConnectionFactoryConfiguration cxfConfig = new ManualConnectionFactoryConfiguration(
server);
ConnectionFactoryManager cxfManager = new ConnectionFactoryManager();
ConnectionFactoryInterface cxf = cxfManager.getFactory(cxfConfig);
ConnectionInterface cx = cxf.getConnection(userName, password);
IWorkspace iWorkspace = IWorkspaceHelper.narrow(cx.getObject());
ILanguageService sasLanguage = iWorkspace.LanguageService();
sasLanguage.Submit("%include 'd:\auto.sas'; run;");

StringSeqHolder logHldr = new StringSeqHolder();
sasLanguage.FlushLogLines(Integer.MAX_VALUE,
new CarriageControlSeqHolder(), new LineTypeSeqHolder(),
logHldr);
String[] logLines = logHldr.value;
StringSeqHolder listHldr = new StringSeqHolder();
sasLanguage.FlushListLines(Integer.MAX_VALUE,
new CarriageControlSeqHolder(), new LineTypeSeqHolder(),
listHldr);

String[] listLines = listHldr.value;
iWorkspace.Close();
cx.close();
}
public static void main(String args[]) {
try {
new IOMTest();
System.exit(0);
} catch (Exception ex) {
ex.printStackTrace();
System.exit(1);

}
}
}


[火星人 ] 通過JAVA、VB訪問SAS IOM伺服器已經有451次圍觀

http://coctec.com/docs/java/show-post-61922.html