Tuesday, 30 April 2013

WLS cache and OVR not working

I have two WLS instances.

one on port 9977 and one on 9088, not that this is relevant - it just helps me paint the picture.

I restart both of them every night, as well as all of the BIPublisher WLS that runs OVR for me.

9977 has OVR working all of the time, everytime.

9088 is constantly "hit and miss".

What am I doing wrong?

If I redeploy an old tools release, 9088 will work for a couple of sessions and then stop.

So, I'm thinking temp files and cache at this stage.  Not the SM cache, as I'm restarting the thing nightly - longer term lower level WLS cache.

The type of cache that occupies directories like:


There are files deep within this structure that are dated Dec 17 - when the instance was created!

So stop your managed instance (mine is called JDE91DV), so I run

/u01/app/oracle/Oracle/Middleware/user_projects/domains/mydomain/bin/stopManagedWebLogic.sh JDE91DV

delete the dirs
cd /u01/app/oracle/Oracle/Middleware/user_projects/domains/mydomain/servers/JDE91DV

rm -Rf ./cache
rm -Rf ./tmp

I created dirs, don't think that you have to
mkdir ./cache
mkdir ./tmp
chmod 777 ./tmp
chmod 777 ./cache

then start up
/u01/app/oracle/Oracle/Middleware/user_projects/domains/mydomain/bin/startManagedWebLogic.sh JDE91DV

Now OVR is working like a treat - but for how long?

Saturday, 27 April 2013

Oracle Application Testing Suite install errors oxe silent install

Oats install problems.

I'm struggling to install OATs on a virtual (version  I'm just installing the works burger for demo purposes and OXE is having errors installing.

setup.log contains the following


I can see that it's running the following command:
E:\OATSIN~1\\oxe\OracleXEUniv.exe /s /f1E:\OATSIN~1\\oxe\oxe_install.iss /f2F:\OracleATS\logs\oxe_install.log

from C:\Program Files\Oracle\Inventory\logs\installActions2013-04-26_05-00-52PM.log

There is 
org.xml.sax.SAXParseException: : XML-20108: (Fatal Error) Start of root element expected.

in the .err file

but this might / might not be relevant at this stage.

But, there are more logs in c:\windows in OracleDatabaseXEServerInstall.log

MSI (c) (50:B0) [07:00:45:983]: Attempting to enable all disabled priveleges before calling Install on Server
MSI (c) (50:B0) [07:00:45:983]: Connected to service.
MSI (c) (50:B0) [07:00:45:983]: MsiSourceListAddSource is returning: 0
1: User aborts the installation, ready to launch __OnAbort.
MSI (c) (50:B0) [07:00:45:983]: Destroying RemoteAPI object.
MSI (c) (50:7C) [07:00:45:983]: Custom Action Manager thread ending.

I then did the following, sorry this is not very scientific - but it worked.  I believe that the critical item may have been #3 below
  • deleted temp files (C:\Documents and Settings\Myriad\Local Settings\Temp\)
  • deleted installsheild files (C:\Program Files\InstallShield Installation Information) 
  • changed the install-from dir, because I wanted to get rid of the longdirName ~ stuff that in the installation command line.  It was c:\OATSInstall, I made it c:\OATs
  • deleted c:\program files\oracle
  • cleaned registry (program files->oracle key)
  • deleted destination dir (F:\OracleATS)
This was a very frustrating OATS install, I hope this helps you!

Friday, 26 April 2013

delete a windows service

I write this blog for me most of the time...  I can look things up that I forget all of the time, this is one of them.  Quite often I want to wipe the slate clean for some software.  I hit shift delete before finding the proper "in installers"...  I then stope services, delete registry keys - but it's hard to delete windows services.

>     sc delete

That's it.

batch approval security

I know that this might not be traditionally in the remit of the technical person, but I felt the need to blog on it.  I got asked a question that related to an error message like

Issues (click each label for more information):

An error has occurred, but it cannot be corrected from this form. Please correct any other errors and then contact your System Administrator regarding this error.
CAUSE: Batch security has been set up. User does not have authority to approve or pend a batch.
RESOLUTION: Contact your Data Processing Department to obtain authority.

ER Details:

Control Id 
Control Title 
Batch Approval
Button clicked
Line No 
Error ID 
Please look for the highlighted fields, correct the entries, and resubmit your request.

This is actually solved by accessing P00241 - batch approval security.  You can specify a user and whose batches they are able to approve.  It's pretty simple.  You also have a few tick boxes that allow you to choose whether this security is enabled for A/P, A/R or G/L - pretty neat hey!

I have a fear that I did know about this many beers ago, because the app name is fairly catchy (for a nerd) P00241 (2 for 1).

So, if you get batch approval security problems, you might be able to solve them with this snippet.

Also see you friendly oracle reference:  664703.1

SM cannot distribute software to agents

I had a funny problem, I go to distribute software to my SM agents and no agents would come up in the list.  I was distributing DAD for the first time, so there were a bunch of problems running through my mind.  

I restarted the SM console, tried looking at other software types nothing.  I did a quick KG search and found something along the lines of:

 Fully Qualified Domain Name was not correct for the SVM URL
Please follow these steps to identify and solve the distribution issue:
Open the readme.txt file in the root of the SM Console install dir (Ex: C:\jde_home\SCFMC\readme.txt

The SM Console URL in the file with the fully qualified hostname of the SM Console machine for example:
Try accessing the URL to verify if it is working.

How cools is that?  Then I notice that I'm on the deployment server and I'm using http://localhost:8999/manage. As soon as I went to the correct URL - my problems went away.

Wednesday, 24 April 2013

JDE password change and cannot apply ESUs

I did do a search on the KG and found some good information on things like [JDENET] and kernelDEfRange of 27 and things like this.  You'll find all of that yourself easily enough.

# for dispatching UBE jobs
# for dispatching callObject request

What I had not done is changed the security server setting in the JAS.INI in D:\JDEdwards\E910\SYSTEM\OC4J\j2ee\home\applications\webclient.ear\webclient\WEB-INF\classes.

DataSource=System - 910

in system\bin32 for the dep server, I was getting:  

24 Apr 2013 14:57:38,987 [SEVERE]  - [6092][JAS]             OneWorld JAS startup initiated
24 Apr 2013 14:57:38,987 [SEVERE]  - [6092][JAS]             JAS does not have Security Server defined!!
24 Apr 2013 14:57:39,706 [SEVERE]  - [6092][JAS]             OneWorld JAS startup complete
24 Apr 2013 14:57:41,987 [SEVERE]  - [6092][NET]             *ERROR* JdeConnectionPool NONE:6016 Unknown Host: NONE
24 Apr 2013 14:57:41,987 [SEVERE]  - [6092][NET]             *ERROR* JdeConnectionPool NONE:6016 Unknown Host: NONE
24 Apr 2013 14:57:41,987 [SEVERE]  - [6092][NET]             *ERROR* JdeConnectionPool NONE:6016 Unknown Host: NONE
24 Apr 2013 14:57:41,987 [SEVERE]  - [6092][JAS]             Could not reach security server , Unknown Host: NONE
24 Apr 2013 14:57:41,987 [SEVERE]  - [6092][JAS]             Attempts to all security server failed. [STD] null com.jdedwards.system.security.SecurityServerException
24 Apr 2013 14:57:41,987 [SEVERE]  - [6092][JAS]             Exception occured in the JDESignon.loadUserProfileWithToken(), An Error occured while Loading the UserProfileWithToken for User :null com.jdedwards.system.security.SecurityServerException: FAILURE: null

That java proc is doing more and more!!!

So, once I fixed the JAS.INI for the java proc, we were cooking with gas

Wednesday, 17 April 2013

OVR and 9.1.3 not being reliable, OVR stuck Loading....

I've had OVR running reliably for quite some time, but since applying 9.1.3 there have been issues.  I've been looking at many different aspects, generally technical to solve the problem.  Things like access.log for http problems.

weblogic.utils.NestedRuntimeException: Cannot parse POST parameters of request: '/jde/URLBuilderService.mafService'
        at weblogic.servlet.internal.ServletRequestImpl$RequestParameters.mergePostParams(ServletRequestImpl.java:2144)
        at weblogic.servlet.internal.ServletRequestImpl$RequestParameters.parseQueryParams(ServletRequestImpl.java:2024)
        at weblogic.servlet.internal.ServletRequestImpl$RequestParameters.getQueryParams(ServletRequestImpl.java:1918)

RENDER_MAFLET=E1Menu&cmd=getNamesMenu&e1.state=maximized&e1.mode=view HTTP/1.1" 200 41 - - [16/Apr/2013:15:54:11 +1000] "POST /jde/URLBuilderService.mafService?e1.namespace=&e1.service=URLBuilderService&RENDER_MAFLET=E1Menu&e1.state=maximized&e1.mode=view HTTP/1.1" 200 166 - - [16/Apr/2013:15:54:11 +1000] "POST /jde/WatchlistManagerService.mafService?e1.namespace=&e1.service=WatchlistManagerService&RENDER_MAFLET=E1Menu&cmd=getNamesMenu&e1.state=maximized&e1.mode=view HTTP/1.1" 200 41 - - [16/Apr/2013:15:54:25 +1000] "GET /jde/e1pages/MYREXAMPLE_55/img/lines_straight.png HTTP/1.1" 200 148 - - [16/Apr/2013:15:54:26 +1000] "POST /jde/URLBuilderService.mafService?e1.namespace=&e1.service=URLBuilderService&RENDER_MAFLET=E1Menu&e1.state=maximized&e1.mode=view HTTP/1.1" 500 2987

As you can see from the above, 500 errors are not good.  These are not reported to the browser, because I think only the OVR menu is getting them.

So I get the above, it never changes....  So, time to fix it.

I could not get a handle on what was going wrong, apart from the HTTP 500 errors.  I redeployed the web tools release (well, regressed to and it worked (OVR)).  Then I tried putting 9.1.3 on and that got it working again. This was good.  Although after the  next restart it all came back down.

I had another instance running and it worked all of the time, so it started to get very confusing.

Finally I bought myself around to looking at the JDE logs.  I found that there were errors relating to F952420 and this could be found in JM13315.  So I took the update.  I'm guessing this ESU is in relation to new functionality in 9.1.3 and OVR.

17 Apr 2013 06:37:00,115 [SEVERE]  - [GENERATOR]       JavaGen error code = METADATA_NOT_FOUND com.jdedwards.runtime.generator.JavaGenException: No Metadata for spec type table was found using the key : F952420
17 Apr 2013 06:37:00,115 [WARN  ]  - [RUNTIME]         No Metadata for spec type table was found using the key : F952420
17 Apr 2013 06:37:00,116 [WARN  ]  - [RUNTIME]         No Metadata for spec type table was found using the key : F952420 com.jdedwards.runtime.generator.JavaGenException: No Metadata for spec type table was found using the key : F952420
17 Apr 2013 06:37:00,116 [SEVERE]  - [BASE]            com.jdedwards.database.base.JDBException: [WEBJITI_ERROR] Demand generation failed for TABLE-F952420: null
As you can see.  Error is very simple.  JITI failed - well that means my package does not know about the spec.  Well, I know this is a new full package - so must be new specs for new functionality.

I ran the ASI for the ESU and also generated the F952420 to the Central Objects - DV910 data source.  Once this was done - over started working again.

I really need to pay more attention to MTRs and documentation.

Tuesday, 16 April 2013

Sign In Error: No environment assigned for User/Role

This old chestnut.  It's a ripper.  You can log into a thick client, but you cannot lot into the web client.

Frustrating isn't it.

Generally I get this after an upgrade, find the same fix every time and never document it.  So I'm going to document it.

I've checked the user, it has roles and no environments.
I've checked each of the roles and they are able to login to the environment that I'm trying to log into.
So easy ones done, keep looking...

First thing is to enable logging and see what tables the session is querying.  

And the winner is...  F00926 missing records.

Now, it's got a funny name, Anonymous User Access Table, but I see it as the role sequencing table.

After these have been populated properly, we are away.

Monday, 15 April 2013

Simple JDE BSFN to send an email with an attachment

I guess it's exactly what the title suggests, some code to help you.

It's a BSFN that takes a few parameters:

  • to
  • From
  • file to attach
  • name of attachment
  • subject
  • Body
  • CC
  • BCC

The source code can be found here.  It's actually a parfile for a project, you can use this at your site if you are 812 and above, because there is nothing hard about it.  Restore this and build CCUSTOM.dll, it will need to be a full package to work on the server.

The code is super simple, but it might help.  There does not seem to be something totally generic for sending emails with attachments from E1.


Tuesday, 9 April 2013

P93081 and AS/400 and flat file output

I’m still working on their fairly painful barcode solution, actually it’s back is broken – now making things a little nicer.  Anyway, we promoted the code to another environment and saw that the files being produced from JDE were a bunch of cr@p

äè==äàŒ=ää =äè=Ž ì =è =¢ë+ <è (+ï (èè &|+ &(+ <琌 ¢(  &ꔌ”=ëà‘• ¢íë <ê+ äñ ì!Ž=à吐åê㌙–Œ‘•ŒŽŒšššššššššššššššššššššššššššššššš+ã¦é㐌ššš+˜¦|ãŒšššššššššššššššššššŽšššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššŽšššššššš+ã¦é㐌šššŒššššššššššššššššššššššššššššššššššššššššššššššššššššššŽšš+‘ããáá‘㘐¢ãçãááñã㘑ããáñáãçãááãçãáñã㘑ã¢ãᐐ‘㘎áã㘐琑ãñ㘑㘑ããᐌšššššššššššššššššššššššššššššššš+‘ããáá‘㘐¢Žãçãááñã㘑ããáñáãçãááãçãáñã㘑ã¢ãᐐ‘㘐áã㘐琑ãñ㘑㎘‘ããáé“ã¦.㘐Œššš+‘ããáá‘㘐¢ãçãááñã㘑ããáñáãçãááãçã᎐ñã㘑ã¢ãᐐ‘㘐áã㘐琑ãñ㘑㘑ããáé“䐦ñ˜ŒšššššššššššššššššššššŽšššššššššššššššššššššššššššššššššššššššššššš%ñ“䐦ñ˜ŒššššššššššššššššššŽššššššššššššššššššššššššššššš%ñ“ã¦.㘐ŒšššŒšššššššššššššššššššššššššššššššŽšššššššššššššššššššššššššššššššššš€šššššššššššššššššššššššššššššššššššššššššŽššššššššššššššššš ì Ž ((èŽ &•Ž <<””™Ž <됎 ã萌”˜ ì吐åê㌑Œ‘ ãëŽ ãè•™Œ™‘   +Œ”™Œ”™Œè萐“(¬ ãç* äñ‘ 㘠ãà–– ãë äñŽ ãè”™–Œ•   +Œ““Œ“‘Œè萐“(¬ ãç* äñ‘ 㘠ãàä|.á ãë äñŽ ãè“•Œ‘•   +Œ““Œ“‘Œè萐“(¬ ãç* äñ‘ 㘠ãàëßêí&€ä|ä €ä|<  ãë äñŽ ãè“•Œ“™™   +Œ““Œ”Œè萐“(¬ ãç* äñ‘ 㘠ãà“•‘™˜ ãë äñŽ ãè•Œ“™™   +Œ““ŒŒè萐“(¬ ãç* äñ‘ 㘠ãà™ ãë äñŽ ãè“‘™Œ“™™   +Œ““ŒŒè萐“(¬ ãç* äñ‘ 㘠ãà. +åã< è ãë äñŽ ãè”™–Œ“™™   +Œ““Œ“‘Œè萐“(¬ ãç* äñ‘ 㘠ãà‘˜•– ãë äñŽ ã蕐Œ“”   +Œ““Œ“‘Œè萐“(¬ ãç* äñ‘ 㘠ãà‘€|〕 ãë äñŽ ã萌““   +Œ““Œ“‘Œè萐“(¬ ãç* äñ‘ 㘠ãà‘™– ãë äñŽ &é‘ŒŒ‘Œß ì!Ž ì  ñàåêã ãë ì!Ž


So this is a file that should look like:


:::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::
@FT35,175@A@N,33,31,TT0003M_@FH\@CI17@F8@FDSYRUP COCA COLA@FS@CI0
@FT520,304@A@N,33,31,TT0003M_@FH\@CI17@F8@FD1 OF 5@FS@CI0


Okay, that is quite some difference, but I’ve had this before.


Open up the P93081 and add a record for IBM-37 for the environment that I’m using and the user.  Test – still wrong.  Restart E1 (the kernel that writes the files must cache this information at startup) in case it’s cache and bosch!  we’re away with the proper format.  Love it when a seemingly very complex issues becomes innocuous. 

Monday, 8 April 2013

nodemanager.properties using JRockit for WLS and JDE

This has been too painful.  Easy to install JRockit – yes.  Easy to get SM using it – well, yes…  East for WLS to use it – I guess so…

Easy to get SM talking to WLS with JRockit – I do not think so.

The missing link that I’ve found is ensuring that your nodemanager.properties has been updated properly.

what I do is:

1.  install java jrockit 64 bit to something like /u01/app/java

2.  use symbolic links from server manager to this location (note that this is from /u01/app/oracle/jde_home_1 nd /u01/app/oracle/jde_home_1/SCFHA

ln -s /u01/oracle/java ./jdk

3.  Change your /u01/app/oracle/Oracle/Middleware/user_projects/domains/mydomain/bin/setDomainEnv.sh to have Oracle as thje JAVA_VENDOR

export JAVA_VENDOR="Oracle"
export WL_HOME

And make sure that your java_home is set right too.

4.  nodemanager.properties



5.  stopAgent, stopNodeManager, StopWebLogic

Once all these have been done, you’ll be cooking with gas.

Friday, 5 April 2013

my rant on qzshSystem

I’ve been writing some c code to get barcode labels printing from JDEdwards on an AS400.  Traditionally people have done this through inefficient UBE’s and things, we’ve been able to get this working with native AS/400 out queues and some special smarts getting temp files sent to the out queues.  This is brilliant for barcodes, as you get instantaneous print outs, no waiting on UBE’s to produce them.  We do other smart things by allowing people to upload their ZPL into a media object and then do variable substitution at runtime.  This is a completely flexible architecture to allow you to change barcode formats when you need to instantly…  Anyways – enough about the solution – back to the rant.

Call object kernels run multi-threaded now, so you need to ensure that if you are using the System API (as I do to execute the print command), you must call code that is muti-threaded too.  My solution was calling a QSH command to print the ZPL, and unfortunately this is not multithreaded.  This gave me a couple of CEE0200 in my kernel job logs and they would eventually die!  It seems to be in relation to activation groups and being able to call programs with a *CALLER activation group.  I wrote a multi-threaded C program to do the printing and called this from the kernel (system command) and got the same problems  - Aarrggh.  I must say that this was a helpful thread http://comments.gmane.org/gmane.comp.lang.as400.c/23.

So I found a reference to QzshSystem p://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=%2Frzahz%2Fqzshsyst.htm – and it’s rubbish.

I put into into a simple C program, compiled it and nothing works!!!  Joke.  There is very little doco on the internet either.  Great solution,  multi-threaded…  Does Nothing.  Returns 7 every time.  When you look at errno.h (/QOpenSys/usr/include/errno.h), this means  …

My C was too simple to be wrong!!!

#include <stdio.h>
#include <qshell.h>
#include <sys/wait.h>
#include <errno.h>

int main (int argc, char* argv[])
    int status = 0;
    char command[256] = {'\0'} ;

    printf("hello world\n parameters %d",argc) ;
    if (argc > 0)
      strcpy(command,argv[1]) ;
      status = QzshSystem(command);
      printf("Just ran %s and got %d\n",argv[1],status);
      if (WIFEXITED(status)) {
         printf("Command %s completed with exit status %d.\n",
                command, WEXITSTATUS(status));
      else if (WIFSIGNALED(status)) {
         printf("Command %s ended with signal %d.\n",
                command, WTERMSIG(status));
      else if (WIFEXCEPTION(status)) {
         printf("Command %s ended with exception.\n", command);
    return 1;


Commands are above to compile and run.

The more complicated version for my BSFN is here.  I have so many error logging statements because the thing was crashing hard, I did not know where.

jdeWriteLogEntry(JDEDEBUGLOG, _J("SystemLong"), __FILE__, __LINE__, 0, _J("Beginning."));
   jdeFromUnicodeSimple(szLongCommandString, lpDS->szMailMergeOuputFileName) ;


   jdeWriteLogEntry(JDEDEBUGLOG, _J("SystemLong"), __FILE__, __LINE__, 0, _J("It's an AS/400."));
   jdeWriteLogEntry(JDEDEBUGLOG, _J("SystemLong"), __FILE__, __LINE__, 0, lpDS->szMailMergeOuputFileName);
   if (WIFEXITED(iReturnVal))
     jdeWriteLogEntry(JDEDEBUGLOG, _J("SystemLong"), __FILE__, __LINE__, 0, _J("Seems to have worked."));
     swprintf(lpDS->ErrorMessage, _J("Command %100s completed with exit status %d.\n"), lpDS->szMailMergeOuputFileName, WEXITSTATUS(iReturnVal));
   else if (WIFSIGNALED(iReturnVal))
     jdeWriteLogEntry(JDEDEBUGLOG, _J("SystemLong"), __FILE__, __LINE__, 0, _J("Error Signaled."));
     swprintf(lpDS->ErrorMessage, _J("Command %100s ended with signal %d.\n"), lpDS->szMailMergeOuputFileName, WTERMSIG(iReturnVal));
   else if (WIFEXCEPTION(iReturnVal))
     jdeWriteLogEntry(JDEDEBUGLOG, _J("SystemLong"), __FILE__, __LINE__, 0, _J("Exception Signaled."));
     swprintf(lpDS->ErrorMessage, _J("Command %100s ended with exception.\n"), lpDS->szMailMergeOuputFileName);

    * Function Clean Up
   jdeWriteLogEntry(JDEDEBUGLOG, _J("SystemLong"), __FILE__, __LINE__, 0, _J("Returning."));
   return (ER_SUCCESS);


So, I eventually had to find another way of printing my barcode, but not without going through some crazy options.  I also finally had to write  a test harness which called the JDEdwards provided system command, so I could get the syntax correct for my “System()” and then put it into my code.

This was a long day in the saddle.  Let me know if you’ve managed to get

Tuesday, 2 April 2013

start a OVM VM manually

as root, it seems that you can start one of your VM’s manually if you cannot get to the web interface of your management console.

/usr/bin/python /usr/sbin/xm create /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines/0004fb0000060000b9eb8c9ebed064bd/vm.cfg

Note that you’ll need to know that the file above is for the machine that you want.

This must be done from your OVM host too.