Hi Scott,
I'm glad you did suggest something obvious -- I did think of the
authority, but not the SQL server jobs' library lists being different.
The jobd specified on my user profile on boxA was different than on
boxB. I noted that on the box where it worked, my user profile jobd had
the correct library list, and that was used regardless of what my job's
library list was.
A more long-winded explanation follows: the java program SQL2JXLJ has
the following two lines:
jdbcDriver = "com.ibm.db2.jdbc.app.DB2Driver";
jdbcConnection = "jdbc:db2://localhost";
According to
http://publib.boulder.ibm.com/infocenter/iseries/v5r4/index.jsp?topic=/rzahh/page1.htm
<quote>
The simplest form of JDBC URL is a list of three values that are
separated by colons. The first value in the list represents the protocol
which is always jdbc for JDBC URLs. The second value is the subprotocol
and db2 or db2iSeries is used to specifiy the native JDBC driver. The
third value is the system name to establish the connection to a specific
system. There are two special values that can be used to connect to the
local database. They are *LOCAL and localhost (both are case
insensitive). A specific system name can also be provided
</quote>
Ok, so it's connecting to the local system. It further says
<quote>
[One] way to specify properties is to place them in a list on the URL
object itself. Each property in the list is separated by a semi-colon
and the list must be of the form property name=property value. This is
just a shortcut and does not significantly change the way processing is
performed
</quote>
A list of the properties that can be specified is here:
http://publib.boulder.ibm.com/infocenter/iseries/v5r4/topic/rzaha/conprop.htm
<quote>
libraries
A space-separated list of libraries. (A list of libraries can also
be separated by colons or commas.) This property allows a list of
libraries to be placed into the server job's library list or a specific
default library to be set.
The naming property affects how this property works. In the default
case, where naming is set to sql, JDBC works like ODBC. The library list
has no effect on how the connection processes. There is a default
library for all unqualified tables. By default, that library has the
same name as the user profile that is connected. If the libraries
property is specified, the first library in the list becomes the default
library. If a default library is specified on the connection URL (as in
jdbc:db2:*local/mylibrary), that overrides any value in this property.
In the case where naming is set system, each of the libraries
specified for this property is added to the user portion of the library
list and the library list is searched to resolve unqualified table
references.
</quote>
However, SQL2JXLJ did not specify a "libraries" property on its
connection string, which implies it would simply use the library list of
the QSQSRVR job. So it would appear that the QSQSRVR job itself sets
the library list based on the connecting user's user profile jobd.
It seems I could modify SQL2JXLJ to grab my job's current library list
and pass it as part of the connection string, but I'm not sure if that
would override the apparent behavior of the QSQSRVR job. Something else
to test in my spare time...how do I get the current library list in a
java program?
*Peter Dow* /
Dow Software Services, Inc.
909 793-9050
pdow@xxxxxxxxxxxxxxx <mailto:pdow@xxxxxxxxxxxxxxx> /
I'm pretty sure
Scott Klement wrote:
Peter Dow (ML) wrote:
ERROR: PHPLOCN in *LIBL type *FILE not found.
Java program completed with exit code 1
I hate to suggest something this obvious, but... is it possible that the
SQL server jobs on the two systems have different library lists?
Or that the user profile who is executing the SQL statement doesn't have
authority to the file on one system, but does on the other?
It seems likely that Peter has already thought of these things and tried
them -- but surely this makes more sense than checking CCSIDs and
national language versions?!
As an Amazon Associate we earn from qualifying purchases.