Wednesday 29 July 2009

Package deploy on different pathcode

ever been up late at night… Waiting for that damn UBE to finish so you could deploy a package… Maybe I’ve got good news for you… Maybe after reading this, you’ll get more sleep at night, just maybe…

Did you know that if the UBE is running in a pathcode that you are not deploying the package for, it will not prevent the package build from completing properly? Did you? Seriously? Did you know that for 100% certainty… Nah, I thought so… Well now you do.

Enjoy you deployments…

***News flash, this is not the case for AS/400's. It seems that they need full access.***

Monday 27 July 2009

Installing 8.98 on existing unix server

I’m installing 8.98.1.1 via SM to a unix server that has 8.96 on it.

It’s happened twice now, so I know that it’s not just me… 

the JDE.INI file will be written with a dodgy [JDEIPC]

startIPCKeyValue=

setting.  It’s been set to blank twice for me (AIX).  You need to change this to 4000 or something.  Note that you’ll also need to run ipcs (at unix command line as jde user that runs services) to see if jde812 still owns and share resources.  You might then have to delete any dodgy ones with ipcrm –m XXXXXX

I find that if you try to start JDE without first locating this section, it will create shared memory that will prevent services starting.  You need to get rid of this with ipcrm

You also remember to run the following is you are installing one of the newest tools releases.

$SYSTEM/bin32/E812ToolsEnvSetup.sh

Friday 24 July 2009

WAS61 dmgr won’t start

Lets say that maybe I put the wrong value into the Java process definition for the dmgr profile…  and now I can’t do anything because the CellManager won’t start – awesome!

never fear…  Time to edit the server.xml file that is written to

D:\IBM\WebSphere61\AppServer\profiles\Dmgr01\config\cells\nsgshsjdnwb03Cell01\nodes\nsgshsjdnwb03CellManager01\servers\dmgr

or equivilent dir…

There will be a setting in the <processDefinitions and <jvmEntries for the amount of memory that you configured.  Delete the variable name and the = and the data “512” from the text, save the file and start the service again…  Woo hoo, back in business!

Monday 20 July 2009

Pop quiz

Web users are getting heaps of:

“An exception has been caught by the Web client. Please contact your system administrator. See log for details. Exception id =Exception_2009-07-20 13:18:20.465_WARRENG   There was a problem with the sever while running the business function F06116EndDoc.\nThe server may still be available, but because of state information, the entire unit of work must be resubmitted.\nPlease exit the application and restart it.\nPost Button Clicked Line number 0\nP051121_W051121C com.jdedwards.runtime.base.SystemException: There was a problem with the sever while running the business function F06116EndDoc.\nThe server may still be available, but because of state information, the entire unit of work must be resubmitted.\nPlease exit the application and restart it.\nPost Button Clicked Line number 0\nP051121_W051121C”

Application server is saying nothing…

What is it going to be…  Obvious, timeouts…  Remember that a call object kernel is not going to complain that it takes too long to perform an action, it’ll keep trying…  Meanwhile, the web will have given up a long time ago.

Note that if there are not ERRORs causing the timeout, the log server logs will reveal nothing!

In the above situation, enabling logging revealed the following:

Jul 20 13:30:00.521003 - 1008/6140 WRK:JDE_08090008_P051121              SELECT  *  FROM JDE_PROD.PRODCTL.F0002  (UPDLOCK)  WHERE  ( NNSY = '06' )  ORDER BY NNSY ASC FOR UPDATE OF NNN001, NNN002, NNN003, NNN004, NNN005, NNN006, NNN007, NNN008, NNN009, NNN010
Jul 20 13:30:00.521004 - 1008/6140 WRK:JDE_08090008_P051121              Entering DBPerformRequest
Jul 20 13:30:00.521005 - 1008/6140 WRK:JDE_08090008_P051121              ODBC:S DBPerformRequest req=08FC3B40 con=07F0A5E8 env=00A614E8 dbc=00A74640 spid=718 JDEDATA A (JDE@Control Tables - Prod)
Jul 20 13:30:00.521006 - 1008/6140 WRK:JDE_08090008_P051121              Exiting DBPerformRequest
Jul 20 13:30:14.897000 - 1008/4600 SYS:Dispatch                          About to call dispatch function, flags=0x0, Type=916
Jul 20 13:30:14.897001 - 1008/4600 SYS:Dispatch                          ADD TO POOL type: 916, 172.19.1.65_5796_m283302
Jul 20 13:30:14.897002 - 1008/4600 SYS:Dispatch                          PSTHREAD_TPJ: Entering psthread_pool_job_createEx()
Jul 20 13:30:14.897003 - 1008/4600 SYS:Dispatch                          PSTHREAD_TPJ: psthread_pool_job_createEx(): Exiting
Jul 20 13:30:14.897004 - 1008/4600 SYS:Dispatch                          PSTHREAD_TPL: Entering: psthread_pool_add_job()
Jul 20 13:30:14.897005 - 1008/4600 SYS:Dispatch                          PSTHREAD_TPL: threads: total (5) idle (3) waiting (3) jobs: queued (0)
Jul 20 13:30:14.897006 - 1008/4600 SYS:Dispatch                          PSTHREAD_BLQ: ps_blocking_queue_enqueue(WRK:Queue): Entering
Jul 20 13:30:14.897007 - 1008/4600 SYS:Dispatch                          PSTHREAD_BLQ: ps_blocking_queue_enqueue(WRK:Queue): Exiting
Jul 20 13:30:14.897008 - 1008/4600 SYS:Dispatch                          PSTHREAD_TPL: psthread_pool_add_job(): Exiting
Jul 20 13:30:14.897009 - 1008/5956 WRK:Idle Worker                       PSTHREAD_BLQ: ps_blocking_queue_dequeue(WRK:Queue): Exiting
Jul 20 13:30:14.897010 - 1008/5956 WRK:Active Worker                     START SYSTEM JOB type 916, 172.19.1.65_5796_m283302
Jul 20 13:30:14.897011 - 1008/5956 WRK:Get User List                     END SYSTEM JOB   type 916, 172.19.1.65_5796_m283302
Jul 20 13:30:14.897012 - 1008/5956 WRK:Idle Worker                       PSTHREAD_BLQ: ps_blocking_queue_dequeue(WRK:Queue): Entering
Jul 20 13:30:29.899000 - 1008/4600 SYS:Dispatch                          ADD TO POOL type: 10, 0.0.0.0_0_m0
Jul 20 13:30:29.899001 - 1008/4600 SYS:Dispatch                          PSTHREAD_TPJ: Entering psthread_pool_job_createEx()
Jul 20 13:30:29.899002 - 1008/4600 SYS:Dispatch                          PSTHREAD_TPJ: psthread_pool_job_createEx(): Exiting
Jul 20 13:30:29.899003 - 1008/4600 SYS:Dispatch                          PSTHREAD_TPL: Entering: psthread_pool_add_job()
Jul 20 13:30:29.899004 - 1008/4600 SYS:Dispatch                          PSTHREAD_TPL: threads: total (5) idle (3) waiting (3) jobs: queued (0)
Jul 20 13:30:29.899005 - 1008/4600 SYS:Dispatch                          PSTHREAD_BLQ: ps_blocking_queue_enqueue(WRK:Queue): Entering
Jul 20 13:30:29.899006 - 1008/4600 SYS:Dispatch                          PSTHREAD_BLQ: ps_blocking_queue_enqueue(WRK:Queue): Exiting
Jul 20 13:30:29.899007 - 1008/4600 SYS:Dispatch                          PSTHREAD_TPL: psthread_pool_add_job(): Exiting
Jul 20 13:30:29.899008 - 1008/3068 WRK:Idle Worker                       PSTHREAD_BLQ: ps_blocking_queue_dequeue(WRK:Queue): Exiting
Jul 20 13:30:29.899009 - 1008/3068 WRK:Active Worker                     START SYSTEM JOB type 10, 0.0.0.0_0_m0
Jul 20 13:30:29.899010 - 1008/3068 WRK:eNetKernelIdle                    END SYSTEM JOB   type 10, 0.0.0.0_0_m0
Jul 20 13:30:29.899011 - 1008/3068 WRK:Idle Worker                       PSTHREAD_BLQ: ps_blocking_queue_dequeue(WRK:Queue): Entering
Jul 20 13:30:35.977000 - 1008/4600 SYS:Dispatch                          About to call dispatch function, flags=0x0, Type=916
Jul 20 13:30:35.977001 - 1008/4600 SYS:Dispatch                          ADD TO POOL type: 916, 172.19.1.65_5796_m283571
Jul 20 13:30:35.977002 - 1008/4600 SYS:Dispatch                          PSTHREAD_TPJ: Entering psthread_pool_job_createEx()
Jul 20 13:30:35.977003 - 1008/4600 SYS:Dispatch                          PSTHREAD_TPJ: psthread_pool_job_createEx(): Exiting
Jul 20 13:30:35.977004 - 1008/4600 SYS:Dispatch                          PSTHREAD_TPL: Entering: psthread_pool_add_job()
Jul 20 13:30:35.977005 - 1008/4600 SYS:Dispatch                          PSTHREAD_TPL: threads: total (5) idle (3) waiting (3) jobs: queued (0)
Jul 20 13:30:35.977006 - 1008/4600 SYS:Dispatch                          PSTHREAD_BLQ: ps_blocking_queue_enqueue(WRK:Queue): Entering

Note that there is a bunch of timeouts for the SQL operation…  Hmm, me thinks that when there is a problem with the F002 – it’s locking.   A hunting we will go.

Run the following queries to find the locks:  Note that the database is SQLServer 2005

sp_lock ;
--Gives a very terse list of locks.

--This was the winning query below:

SELECT tl.request_session_id, wt.blocking_session_id, DB_NAME(tl.resource_database_id) AS DatabaseName, tl.resource_type, tl.request_mode, tl.resource_associated_entity_id
FROM sys.dm_tran_locks as tl
INNER JOIN sys.dm_os_waiting_tasks as wt
ON tl.lock_owner_address = wt.resource_address;
GO

-- Query for specific lock types
SELECT resource_type, request_session_id, resource_database_id, resource_associated_entity_id, resource_subtype, resource_description, request_status, request_owner_type, request_mode
FROM sys.dm_tran_locks
WHERE resource_type IN ('PAGE', 'KEY', 'EXTENT', 'RID');
GO

I then opened the instance activity monitor and saw the blocked process and killed it!

Job done!

Server manager viewing large files

Did you know that the server manager uses the operating system TEMP / TMP dir to write temp files to when you choose to view a large log file…  It’s been reported that C: drives are being filled by users trying to view 6GB log files…

I’m not advocating the viewing of 6GB log files, but good to know where to look if the C: of your server manager console machine is filling up!

Thanks to Nigel for that one!

Simple, disable oracle trigger

ALTER TRIGGER orders_before_insert DISABLE;

That’s it really…

Friday 17 July 2009

Copying a pathcode? OL made easy

--  Copy pathcode 1 records to pathcode 2

accept PATHCODE_TO_REPLACE TEXT PROMPT 'Enter the pathcode you are replacing -> '
accept PATHCODE_TO_DUPLICATE TEXT PROMPT 'Enter the pathcode you are duplicating –> '

accept OLOWNER TEXT PROMPT 'Enter the pathcode you are duplicating -> '

create table f9861_temp as select * from &&OLOWNER..f9861 where sipathcd = '&PATHCODE_TO_DUPLICATE';

delete from f9861_temp where SISTCE != '1'

commit;

update f9861_temp set sipathcd = '&PATHCODE_TO_REPLACE';

commit;

delete from &&OLOWNER..f9861 where sipathcd = '&PATHCODE_TO_REPLACE';

commit;

insert into &&OLOWNER..f9861 select * from f9861_temp;

commit;

drop table f9861_temp;

Compare column count with central objects for tables

Note that this also show correct usage of PROMPT and ACCEPT in SQL scripts.

--  Note that this script will create a temp table to
--  make the execution quicker

-- drop this table
PROMPT
PROMPT You're about to determine the differences in column counts between
PROMPT central objects and you're data data source
PROMPT
ACCEPT data_owner CHAR PROMPT 'Enter the OneWorld Data owner name - in caps -> '
ACCEPT pathcode_owner CHAR PROMPT 'Enter the OneWorld pathcode owner  -> '

set pagesize 50

drop table temp_table_count;

create table temp_table_count
(table_name varchar(50) not null,
spec_column_count integer not null,
relational_column_count integer not null)
;

-- insert the relational column counts
--
insert into temp_table_count
select table_name, 0, count(1)
from all_tab_columns
where owner = '&data_owner'
group by table_name
order by table_name ;

commit;

-- get the spec table counts from the F98711
--
update temp_table_count
set spec_column_count = (
select count(1)
from &pathcode_owner..f98711
where  ltrim(rtrim(tdobnm)) = table_name);

commit;

-- Compare and display the differences
--
select table_name || ' ' || spec_column_count || ' ' || relational_column_count
from temp_table_count
where spec_column_count != relational_column_count;

Thursday 16 July 2009

Add a web server to WAS post install

http://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/topic/com.ibm.websphere.nd.doc/info/ae/ae/cins_webserver.html

Note that you cannot add a webserver with the admin web interface, you need to use the command line.

Essentially this task is performed from the plugins install dir. There is a facilitating script there called configurewebserver1.bat.

The webserver might not have been installed properly because of pathing. If you install WAS and then reboot and then do HTTP server and plugins it might work.

This script calls a couple of files that might need to have a path modified. Please see my edits below:

D:\IBM\WebSphere\AppServer\profiles\AppSrv01\bin\wsadmin.bat -f D:\IBM\WebSphere\AppServer\bin\configureWebserverDefinition.jacl webserver1 IHS "D:\\IBM\\IBMHTTPServer" "D:\\IBM\\IBMHTTPServer\\conf\\httpd.conf" 80 MAP_ALL "D:\\IBM\\WebSphere\\Plugins" unmanaged nsgshsjdnsp02u.XXXX.local nsgshsjdnsp02u.XXXX.local windows

From above, I had to path the wsadmin.bat file and the configureWebServerDefinition.jacl file.
Note that this is a 25K file, you don't wanna create one of these yourself!!

Output of the script looks like the following:

Start computing the cell Type.
StandAlone profile found.

Input parameters:

Web server name - webserver1
Web server type - IHS
Web server install location - D:\IBM\IBMHTTPServer
Web server config location - D:\IBM\IBMHTTPServer\conf\httpd.conf
Web server port - 80
Map Applications - MAP_ALL
Plugin install location - D:\IBM\WebSphere\Plugins
Web server node type - unmanaged
Web server node name - webserver1_node
Web server host name - nsgshsjdnsp02u.XXX.local
Web server operating system - windows

Creating the unmanaged node webserver1_node .
Unmanged node webserver1_node is created.

Creating the web server definition for webserver1.
Parameters for administering IHS web server should be updated using wsadmin scri
pt or admin console.
Web server definition for webserver1 is created.

Start computing the plugin properties ID.
Plugin properties ID is computed.

Start updating the plugin install location.
Plugin install location is updated.

Start updating the plugin log file location.
Plugin log file location is updated.

Start saving the configuration.

Configuration save is complete.

Computed the list of installed applications.

Processing the application DefaultApplication.
Get the current target mapping for the applictaion DefaultApplication.


Computed the current target mapping for the application DefaultApplication.
Start updating the target mappings for the application DefaultApplication.
Target mapping is updated for the application DefaultApplication.

Processing the application ivtApp.
Get the current target mapping for the applictaion ivtApp.


Computed the current target mapping for the application ivtApp.
Start updating the target mappings for the application ivtApp.
Target mapping is updated for the application ivtApp.

Processing the application query.
Get the current target mapping for the applictaion query.
Computed the current target mapping for the application query.
Start updating the target mappings for the application query.
Target mapping is updated for the application query.

Start saving the configuration.

Configuration save is complete.

D:\IBM\WebSphere\Plugins\bin>

Tuesday 14 July 2009

More speed captain

Want some more system speed?  I’ve got a plan, it’s sneeky and cheeky. 

Do what many people do, let users generate all of the objects for the PD environment with web JITI.  This will populate the F989999 with all of the WBOID’s.  Extract a unique list of APPL and UBE objects and paste them into a GeneratorList.txt file (just like the ones that are in the work dir of the update package build on the deployment server.

Contents of the GeneratorList.txt

  • MAGIC_NUMBER=0x00C0FFEE
  • #Do Not modify the Magic Number or its position in any case!
  • #This file contains the objects that will be generated  when
  • #this file is chosen and menu Item BulkGen is clicked
  • #Add the desired objects in the proper section
  • #Invalid object names or objects in incorrect section can
  • #not be generated.
  • #Applications
  • APP:P00950
  • #Reports
  • REPORT:R009505
  • #Ners (NERs are case-sensitive)
  • NER:IsDataSelectionSecurityPresent
  • #BSFN (BSFNs are case-sensitive)
  • BSFN:BuildPackage
  • #DSTR
  • DSTR:D00950N
  • #DSTR
  • DSTR:T009505

So basically, you need to use the template above and generate the contents with SQL.

This is oracle syntax…

select distinct 'APP:' || substr(wboid,5,instr(wboid,'-',4,2)-5) from pd812.f989999 where wboid like 'APP-%'

select distinct 'REPORT:' || substr(wboid,12, length(ltrim(rtrim(wboid)))-11) from pd812.f989999 where wboid like ‘REPORTINF%’

Note that in oracle you should put “set pagesize 0” you could also spool the output to a file.

Appending these two statements will create a GeneratorList.txt file that will generate all of the APPS and UBEs that have been used since the last full deployment.

This is much quicker than a full build and much more efficient!

Friday 3 July 2009

transaction server in 8.98.1.1

The install was nice once I have a stand-alone WAS61 installation.  Not problems.  Almost worked out of the box – amazed yes.

I did try and copy my old 8.96 config files over the top of the existing ones, that WAS a mistake.  Just fix the ones that are shipped.

It probably worked this way in the old release, but the e1transvr makes extensive use of the internal WebSphere queueing mechanisms for reliable delivery.

The messages are stored in the F98710 table until a transaction server is available to receive all of the messages.  Once the transaction server is started, it lists the subscribers that are subscribing to it for messages. (This is really nice and can be seen in server manager).  This is also really nice because it shows you how many messages are queues to each of the subscribers.

You need to count the rows in the F90710 to see how many messages are yet to make it to the transaction server.

image This is the view from SM of some subscribers.

If you had a situation like me with 16500 queued messages, you might need to clear the cache – but OF COURSE this does not work in the current 8.98.1.1 tools release.  So, a sneaky way I found was the following:

image

Find the dir that has the filestore for the logs and pending transactions and delete the files.

Viola, you no longer have 16500 messages queued to be delivered.