On 24-Sep-2015 11:52 -0600, Peter Dow wrote:
I have a program that uses HSSFR4 to open a template spreadsheet,
add data to it, and write it out as a different spreadsheet.
It works fine under my profile, and that of a colleague, but when
the user tries it, it fails with the MCH6801.
Said user's profile has no special authorities, and has limit
capabilities *YES.
In the SQLRPGLE program it successfully does:
 1277.00 rc = hssf_begin_object_group(200);
 ...
 1285.00 book = HSSF_open('/home/Coop/CO0300 template.xls');
 ...
 1296.00 sheet = HSSFWorkbook_getSheetAt(book: tx);
 ...
 1298.00 row = HSSFSheet_getRow(sheet: 0);
And fails on
 1299.00 hssf_text(row: 3: TITLE);
Message ID . . . . . . : MCH6801 Severity . . . . . . . : 40
Message type . . . . . : Escape
Date sent . . . . . . : 09/24/15 Time sent . . . . . . : 11:14:17
Message . . . . : Object domain or storage protection error for
 offset X'0000000080000000' in object COOP_RPT_1USERID1 576813.
Cause . . . . . : A program tried to use a blocked instruction,
access a system domain object, or make invalid use of a protected
page. The violation type is 3.
The violation type indicates the type of error:
 1-Object domain violation.
 2-Test Pointer Target Addressability (TESTPTA) violation.
 3-Read protection error.
 4-Write protection error.
The space class is X'08'. The space class designates the type
of space for a storage protection error or TESTPTA violation for
a space pointer:
 ...
 08-teraspace for OS/400 PASE memory address X'0000000080000000'.
X'40000000000000009F9DD58090000000' is a pointer to the storage for
a protection error or TESTPTA violation for a space pointer. Some
violations may be suppressed at low system security levels.
  The full details of F6=Print or the full details from a spooled 
joblog taken with LOG(4 0 *SECLVL) shows additional context; context 
that was not collected\provided in what was chosen via the copy\paste 
snippet included above.  The joblog including messaging since the 
request until the completion of the logging of the failure of that 
request [everything up until the next request] could provide an 
indication of possible additional actions that can be performed to 
effect even more logging [for the next occurrence] or an indication if 
such additional logging is already in effect.
Job: COOP_RPT_1 User: USERID1 Number: 576813 Thread: 00000186
 Type Program                Statement Procedure
    1 QCMD       QSYS        /01C7
      CO0300R    ARLIB                _QRNP_PEP_CO0300R
      CO0300R    ARLIB       26700     CO0300R
      CO0300R    ARLIB       129900    OPENSPREADSHEET
      HSSFR4     UTLIB       24800     HSSF_TEXT
      HSSFR4     UTLIB       23400     SS_TEXT
      QRNXUTIL   QSYS        132      _QRNX_JNI_ONE_CALL
      QRNXUTIL   QSYS        80       _QRNX_JNI_CHK_EXCP
      QXJ9VM     QJVM6032    14        FindClass__FP7JNIEnv_PCc
      QRNXIE     QSYS        1        _QRNX_CALL_FC_H
      QRNXIE     QSYS        2        _QRNX_DFT_ERROR
      QRNXIE     QSYS        17       _QRNX_INQ
      QRNXIE     QSYS        5         InqMsg
Googling found something for violation type 4 (write protection
error) having to do with the Java caches when swapping profiles
(which the calling CL program does), but this is a type 3 (read
protection error).
Any clues as to what is causing this?
  I expect the only difference between RC4 and RC3 [possibly 
alternatively known as ET4 and ET3 or VT4 and VT3] is the effective 
_method_ that was utilized for referencing the storage; i.e. effective 
write to the storage is manifest as RC4 and effective read[-only] of the 
storage is manifest as RC3.
  I suppose if the [pointer to the] IBM i PASE memory storage address 
may have been obtained while swapped, and later referenced while running 
with a different [the original lower\limited-authority] user profile, 
then perhaps that can give rise to the "protection violation".  I get 
the impression however, that the "protection violation" is reference to 
a /protected page/ which seems more akin to a "domain violation" than an 
"authority violation".
  A seeming oddity, is the FindClass between the JNI Check Exception 
and the RPG Runtime Call Function Check Handler; a LIC process dump at 
the point of the violation probably would be more informative.
  Nonetheless, I believe the TechNote document N1012715 [presumably 
already found in the alluded searching] may explain the issue, 
regardless the example shown being for the write [vs read] violation 
type.  That document includes the full context from the spooled joblog 
[but missing from the above quoted OP], which can be rewritten as the 
symptom string msgMCH6801 RC4 F/tia_fault T/QP2USER2 TM/QP2API 
TP/runpase_common stmt/2.  That doc is found here; a snippet is included:
[
http://www.ibm.com/support/docview.wss?uid=nas8N1012715]
Title: Message MCH6801 is Thrown when Attempting to Start an IBM 
Technology for Java Virtual Machine Instance
Reference #: N1012715  Historical Number 537964645
"...
Symptom
The following message is thrown when attempting to create an instance of 
the IBM Technology for Java Virtual Machine in IBM i 5.4 and later. The 
issue was originally reported in a WebSphere Application Server (WAS) 
Network Deployment (ND) environment where the DMGR and nodeagent 
application servers were configured to run as QEJBSVR user profile. ...
Java Core and Snap dumps are then created.
Cause
The main cause of the MCH6801 message and JVM creation failure is due to 
the lack of permission by the current user profile to the shared class 
cache the JVM is configured to use.
Here is the scenario that will cause this issue to occur.
There are three profiles each containing their own JVM, a WebSphere 
Deployment Manager (DMGR), nodeagent, and application server. The DMGR 
and nodeagent JVM are configured to run as the QEJBSVR user profile and 
have a shared class configuration of 
"-Xshareclasses:name=webspherev61,groupAccess,nonFatal -Xscmx50m". The 
application server is configured to run as a separate profile, USERPROF 
for example, and has a shared class configuration of 
"-Xshareclasses:name=webspherev61,groupAccess,nonFatal -Xscmx50m". 
Notice that all three JVMs are configured to use the same shared class 
cache name. Typically in this configuration, the DMGR profile will be 
started first. Thus, it will create the shared class cache used by all 
three application servers. Because of this, the owner of the shared 
class cache will be the QEJBSVR user profile and the group profile will 
be *NONE. The permissions on the shared class cache give read and write 
permission to the owner and the group categories, and there are no 
permissions for the other category. Because the application server runs 
under a separate user profile that is a member of the QEJBSVR group 
profile, it falls under the other category for permission to the shared 
class cache. And since the other category does not have permission to 
the shared class cache, the custom user profile does not have 
permission. Thus, the shared class cache is opened as read-only and the 
MCH6801 is thrown because the JVM is unable to write to the cache.
Resolving the problem
If the JVM receiving the MCH6801 is configured to share a class cache 
with other JVMs that run under a different user profile, the JVM running 
under the user profile that does not own the shared class cache must be 
configured to use a different shared class cache. It would be a security 
risk for IBM to set the shared class cache permissions for the other 
category to read and write.
To configure the JVM to use a different shared class cache, set the 
following generic JVM argument:
-Xshareclasses:name=newName,groupAccess,nonFatal -Xscmx50m
In the case of WebSphere Application Server, you have the following options.
 ..."
As an Amazon Associate we earn from qualifying purchases.