FTPC客戶端可以通過以下兩種協議與Plant Operations中間件通信:
- XML Web Services
- RMI/IIOP calls to session beans
因此通過這兩種協議,我們可以自定義開發FTPC客戶端。
在FTPC安裝路徑,如下路徑有一個PlantOpsClientSDK開發工具包,可以使用該SDK構建定製FTPC客戶端。
一、基於RMI/IIOP的EJB客戶端
- 解壓PlantOpsClientSDK。
- 新建Java Project,將PlantOpsClientSDK中的lib文件夾下的jar包和PlantOpsJavaProxies-JBoss.jar導入到項目中。
- 將samples文件夾下的類複製到項目中。
- 運行SampleEJBClient.java,在Arguments中傳入如下參數,其中第一個參數爲FTPC RMI/IIOP協議地址,第二個參數爲用戶名,第三個參數爲密碼。
- 執行後在控制檯輸出以下內容則表示成功連接FTPC服務。
備註:
- samples文件夾中的SampleEJBClient.java爲基於EJB的客戶端
- SampleWebServiceClient.java爲基於WebService的客戶端
- FilteringExample.java爲同時支持RMI/IIOP和WebService的客戶端,但默認會使用RMI/IIOP協議,如果RMI/IIOP連接不成功纔會切換使用WebService協議。詳情參見:https://blog.csdn.net/panjin72/article/details/80340137
二、基於WebService的客戶端
同EJB客戶端類似,可參考samples中的SampleWebServiceClient.java
三、說明
1.定製FTPC客戶端通過ProxyFactory代理工廠創建、關閉連接。
- 創建RMI/IIOP協議連接:ProxyFactory proxyFactory = ProxyFactory.createProxyFactory(serverURL, ProxyFactory.PROTOCOL_IIOP);
- 創建WebService協議連接:ProxyFactory proxyFactory = ProxyFactory.createProxyFactory(serverURL, ProxyFactory.PROTOCOL_HTTP);
- 創建RMI/IIOP和WebService協議連接:ProxyFactory proxyFactory = ProxyFactory.createProxyFactory(iiopURL, httpURL);
2.登錄FTPC
proxyFactory.login(userName, password);
3.從數據庫檢索對象
ObjectRetrieval objectRetrievalService = proxyFactory.getObjectRetrievalProxy();
DUser user = objectRetrievalService.getUserByName(userName, null);
4.創建對象
ObjectStorage objectStorageService = proxyFactory.getObjectStorageProxy();
DWorkInstruction testIns = new DWorkInstruction();
String name = "test_" + java.lang.System.currentTimeMillis();
testIns.setName(name);
testIns.setModificationFlag(IModificationFlags.NEW);
long key = objectStorageService.saveWorkInstruction(testIns, null, "test-proxy", null);
5.通過Filter從數據庫檢索對象
ObjectRetrieval objectRetrievalService = proxyFactory.getObjectRetrievalProxy();
DFilter filter = new DFilter();
filter.setObjectType(IObjectTypes.TYPE_ACCOUNT);
filter.setObjectSource(IObjectSource.ACTIVE);
DFilterSearchConstraint cont0 = new DFilterSearchConstraint();
cont0.setAttribute(IAccountFilterAttributes.LASTMODIFIEDTIME);
cont0.setComparisonOperator(IFilterComparisonOperators.LESS_THAN);
cont0.setValues(DataConverter.fromCalendarArray(new Calendar[] { new GregorianCalendar()}));
filter.setSearchConstraints(new DFilterSearchConstraint[] { cont0 });
DAccount[] objs = objectRetrievalService.getAccounts(filter, null);