2013-04-05 27 views
2

給定一個來自JTOpen的DecimalDataArea,當讀取和寫入數據區域時,AS400上的對象是否被鎖定,防止從AS400上的其他應用程序同時寫入該對象?使用JTOpen從AS400的數據區讀取數據區對象是否被鎖定?

這是如何讀/寫的Javadoc示例代碼等

// Prepare to work with the system named "My400". 
AS400 system = new AS400("My400"); 

// Create a DecimalDataArea object. 
QSYSObjectPathName path = new QSYSObjectPathName("MYLIB", "MYDATA", "DTAARA"); 
DecimalDataArea dataArea = new DecimalDataArea(system, path.getPath()); 

// Create the decimal data area on the system using default values. 
dataArea.create(); 

// Clear the data area. 
dataArea.clear(); 

// Write to the data area. 
dataArea.write(new BigDecimal("1.2")); 

// Read from the data area. 
BigDecimal data = dataArea.read(); 

// Delete the data area from the system. 
dataArea.delete(); 

http://javadoc.midrange.com/jtopen/com/ibm/as400/access/DecimalDataArea.html

+0

如果您需要鎖定數據區域的能力,您可以編寫一個簡單的RPG程序來鎖定數據區域,更新它然後解鎖它 - 將更新的值傳回給您的Java程序(或任何您嘗試的去做)。 – 2013-04-05 21:16:12

+0

我不知道RPG,我通常會向我的RPG程序員傾訴,哈哈。我正在用Java編寫一個應用程序,它將與現有的RPG應用程序集成在一起,該應用程序使用數據區來存儲記錄的上次使用的ID。我的RPG程序員在需要獲取下一個值時執行此操作的方式是,它們鎖定RPG中的數據區域,將新值寫入它,然後解鎖它。 – 2013-04-06 20:18:29

回答

3

不......數據區操作是原子的,所以沒有發生閉鎖,除非你自己做。

在內部,實現實際上使用CHGDTAARA來更新數據區域。

雖然不會是一個不好的增強。

+1

術語說明:通常* atomic *用於指可以保證完全發生或根本不發生的事務(可能涉及多個低級操作);因此不需要(顯式)鎖定。我明白你在這裏想說什麼,但在這種情況下使用術語* atomic *可能沒有意義,甚至可能有點誤導。 – 2013-04-06 16:18:27

+0

謝謝,我會牢記這一點。 – 2013-04-06 20:18:57

+0

@JohnY澄清理解......謝謝。 – 2013-08-09 14:14:24

0

如果您使用SQL CREATE SEQUENCE語句創建數據,則可以通過JDBC使用NEXT VALUE。您可以在SQL語句(如SELECT,INSERT,UPDATE等)中使用NEXT VALUE表達式。它將讀取值,增加值,更新SEQUENCE並將新值返回給您,並可在承諾控制下完成。在當前會話期間,PREVIOUS VALUE表達式將返回該SEQUENCE的NEXT VALUE表達式生成的最後一個值。

通常數字數據區域用於管理生成一系列數字。如果是這種情況,那麼使用SEQUENCE會更好。

+0

我實際上正在讀/寫已經存在的數據區。它被我們的i系列的RPG程序使用。 – 2013-04-06 20:19:42