Monday 30 April 2018

change IP address of weblogic server… don’t forget the adminserver cache

There are a heap of instructions of what you need to change if you change the IP address of your weblogic server, but I find they are not complete.  Google it and use oracle support.  The classic sections are:


For the Administration Server and Managed Servers:

For Node Manager:

  • Modify the IP Address in the WebLogic Server Administration Console, in Home >Summary of Machines > Configuration > Node Manager;
  • Modify occurrences of the IP Address in the nodemanager.properties


It’s easy to grep around for the ADMIN_HOST through the start scripts and the nodemanager.properties files, but this will not fix things.  For example, look at this ps output.

Classic example:  You can see that the management.server is listed as http://10.250.252.190:7001 , yet the ip address of the server is a new and improved 10.255.252.201

[root@northstar ~]# ps -ef |grep java |grep 9085
oracle    2162  2105  0 12:47 ?        00:01:09 /usr/java/jdk1.7.0_99/bin/java -server -Xms256m -Xmx512m -XX:MaxPermSize=256m -Dweblogic.Name=NORTHSTAR_HTML_9085 -Djava.security.policy=/u01/Oracle_Home/wlserver/server/lib/weblogic.policy -Dweblogic.ProductionModeEnabled=true -Dweblogic.system.BootIdentityFile=/u01/Oracle_Home/user_projects/domains/e1apps/servers/NORTHSTAR_HTML_9085/data/nodemanager/boot.properties -Dweblogic.nodemanager.ServiceEnabled=true -Dweblogic.nmservice.RotationEnabled=true -Dweblogic.security.SSL.ignoreHostnameVerification=false -Dweblogic.ReverseDNSAllowed=false -XX:MaxPermSize=256m -Dweblogic.wsee.wstx.wsat.deployed=false -Xms2048m -Xmx2048m -Dweblogic.security.SSL.ProtocolVersion=TLSv1.2 -Duser.timezone=Pacific/Auckland -Djava.endorsed.dirs=/usr/java/jdk1.7.0_99/jre/lib/endorsed:/u01/Oracle_Home/wlserver/../oracle_common/modules/endorsed -da -Dwls.home=/u01/Oracle_Home/wlserver/server -Dweblogic.home=/u01/Oracle_Home/wlserver/server -Dweblogic.management.server=
http://10.250.252.190:7001 -Dweblogic.utils.cmm.lowertier.ServiceDisabled=true weblogic.Server

[root@northstar ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
         inet 10.255.252.201  netmask 255.255.255.0  broadcast 10.255.252.255
         inet6 fe80::216:3eff:fe1a:15c3  prefixlen 64  scopeid 0x20<link>
         ether 00:16:3e:1a:15:c3  txqueuelen 1000  (Ethernet)
         RX packets 142041  bytes 12104966 (11.5 MiB)
         RX errors 0  dropped 0  overruns 0  frame 0
         TX packets 38313  bytes 8723699 (8.3 MiB)
         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

When I start this server with commandline on Linux, it starts, but does not register with SM and cannot login with a connection error.

[root@northstar default]# pwd
/u01/Oracle_Home/user_projects/domains/e1apps/servers/AdminServer/data/store/default

-rw-r-----. 1 oracle oracle 1049088 Apr 30 12:49 _WLS_ADMINSERVER000000.DAT

The file above in the DIR above, as the incorrect server address in it’s config:


[root@northstar default]# grep 10. _WLS_ADMINSERVER000000.DAT
Binary file _WLS_ADMINSERVER000000.DAT matches

It’s a binary match – this needs to be removed.

stop admin server:

delete it

goto

/u01/Oracle_Home/user_projects/domains/e1apps/servers/AdminServer/data/nodemanager
[oracle@northstar nodemanager]$ ls -l
total 16
-rw-r-----. 1 oracle oracle  13 Apr 30 21:15 AdminServer.state
-rw-r-----. 1 oracle oracle  27 Apr 30 12:47 AdminServer.url
-rw-r-----. 1 oracle oracle 174 Sep 22  2017 boot.properties
-rw-r-----. 1 oracle oracle 432 Sep 22  2017 startup.properties

change AdminServer.url

NOW:

startManagedWebLogic.sh

ps –ef |grep java

you’ll see that your process now has the correct management server defined (FQDN for the machine – YAY!)


oracle    3709  3653 53 21:22 pts/0    00:00:24 /usr/java/jdk1.7.0_99/bin/java -server -Xms256m -Xmx512m -XX:MaxPermSize=256m -Dweblogic.Name=NORTHSTAR_HTML_9085 -Djava.security.policy=/u01/Oracle_Home/wlserver/server/lib/weblogic.policy -Dweblogic.ProductionModeEnabled=true -Dweblogic.security.SSL.trustedCAKeyStore=/u01/Oracle_Home/wlserver/server/lib/cacerts -Djava.endorsed.dirs=/usr/java/jdk1.7.0_99/jre/lib/endorsed:/u01/Oracle_Home/wlserver/../oracle_common/modules/endorsed -da -Dwls.home=/u01/Oracle_Home/wlserver/server -Dweblogic.home=/u01/Oracle_Home/wlserver/server -Dweblogic.management.server=http://northstar.xxx:7001 -Dweblogic.utils.cmm.lowertier.ServiceDisabled=true weblogic.Server
oracle    3829  2836  0 21:23 pts/0    00:00:00 grep --color=auto java
[oracle@northstar default]$


Following my instructions – you’ll delete the DAT file and change the ADminServer.url file and start the AdminServer again – you’ll find everything works.

Instead of

image

I get

image




Thursday 26 April 2018

Service discovery and tools release 9.2.2.4

Okay, service discovery is cool and easy and might help your describe your services to someone.

Problem is that this could be much better with something like swagger – but you gotta start somewhere – hey!

you need to do a get from your AIS server with batch authentication

https://f5iot.mye1.com/jderest/discover

That is with a header something like:

Authorization: Basic U0hBTk5PTk06YWJjMTIz

Note that this was generated with a temp password, so nothing decent in that.

note that this is just username : password in base64

So, all you need to do it goto http://decodebase64.com/

type in my auth token above and see

image

Too easy, it’s already changed.

Here is a video showing what you can do

Note that a nice thing is getting the array syntax that I described the other day

    "name" : "20180424_CallSendMessage",     "omwObjectName" : "ORC_1804240002CUST",     "udoGroup" : "Personal",     "description" : "Confirm it",     "inputFormat" : "JDE Standard",     "version" : "v2",     "inputs" : [ {       "name" : "SingleInputString",       "type" : "String"     }, {       "name" : "ColourList",       "type" : "Array",       "array" : [ {         "name" : "Colour",         "type" : "String"       } ]     } ],

Tuesday 24 April 2018

JD Edwards Orchestration using iterate over for orchestration input

I must admit, I found this one a little frustrating, but good to get it out of the way.

This is solving the problem of the parent / child orchestration (parent child being defined within the input document).

I created a very simple orchestration:

image

Basically iterate over my array of ColourList (sorry USA, this is how well spell it down under), for each of the elements in the colour list, send me an email.

My array is currently true to the word, an array – but it’s not an array of structures yet.

image

A single dimension Array with Colour as the only element.

Therefore, my orchestration should take the input and send me an email with the title of the colour – nice and easy…  For every colour that I list.

But, the real question is – how do I form the input JSON for this function? 

I need to use JSON, as the orchestrator client (below) does not have the tooling to be able to load up arrays, you can see that it’s very one dimensional for the parameters of a function.

image

You need to tick the JSON Input box to get this screen:

image

A little cheat if you have not done it, is fill out the parameters and run the function, you get the JSON in the input box if you’re making a valid call:


image

You have the super basic 1D inputs, now you make this parent/child.  Copy that input and paste it into your favourite JSON editor – you are going to need it.

Below is a template multiple level (parent child input that works for my function)

This is going to save quite a bit of heart ache

{
   "inputs" : [ {
     "name" : "SingleInputString",
     "value" : "Hello"
   }],
   "detailInputs": [{
    "name": "ColourList",
    "repeatingInputs": [
      {
        "inputs": [
          {"name":"Colour","value":"Pink" }
        ]
      },
      {
        "inputs": [
          {"name":"Colour" ,"value": "Red" }
         ]
      }
   ] }
   ]
}

There is a lot of verbage here and a lot of terms that need to be in the JSON, otherwise it will not iterate, trust me.  I tried many combinations.

You need to ensure that you use the object “repeatingInputs” – casE sensitive.  You need to also include inputs array

To Get 4 emails, I post the following JSON

{
   "inputs" : [ {
     "name" : "SingleInputString",
     "value" : "Hello"
   } ],
   "detailInputs" : [ {
     "name" : "ColourList",
     "repeatingInputs" : [ {
       "inputs" : [ {
         "name" : "Colour",
         "value" : "Pink"
       } ]
     }, {
       "inputs" : [ {
         "name" : "Colour",
         "value" : "Red"
       } ]
     }, {
       "inputs" : [ {
         "name" : "Colour",
         "value" : "Blue"
       } ]
     }, {
       "inputs" : [ {
         "name" : "Colour",
         "value" : "Turquoise"
       } ]
     } ]
   } ]
}

Nice!  Here is my inbox.

image


I’ve been using an online JSON editor, because the orchestration client (bless it) does not help my crappy syntax.  This is great!

image

You know that you’ve made a mistake in JDE, if you hit for format button and it bombs – your JSON is bad

image

If it’s good, it’ll look nicely formatted, but this does not mean that the document is formed correctly.  You could not be using key value pairs, and it’ll still format, just nothing will work on the AIS server!

All you need to do is follow my basic template above and all will work.  Here is a copy of my orchestration too – just in case you want to test the document yourself.

Note that the service request is hard coded to send an email to me, so you might want to change that.

You can grab my code here: https://drive.google.com/file/d/10KBi7XNuqnSIYwzgb921lTqvDj0SKTYw/view?usp=sharing 

Wednesday 18 April 2018

Using orchestration recorder (Service Request Recorder) in tools 9.2.2.4


make sure that you have the UDC’s correct
Access the Feature Security application thru P00950 and add the following UDC values:

H95|UF

KY = RECORDER DL01 = Process Recorder SPHD = 1 HRDC = N

H95|UO

KY = RECORDER DL01 = Process Recorder SPHD = 1000 HRDC = N

Then proceed to activate the feature to be used in EnterpriseOne applications.

Here is a video to assist – my first vlog!


Tuesday 17 April 2018

Install WLS 12.2.1.3 on Linux

get a xterm or vnc session to the machine

image

y

image

next next next..

image

takes about 1 minute

image

Take note of where the logs are for later

Ensure that you launch the config assistant

image

and rename it to what you want – this might be helpful in SM

Note that I like e1apps and then release

image

Next

image

I keep username default

dev mode, because I love boot.properties

image

choose all 3 because you need a machine

image

I’m already using 7001 and 2 so..

image

Node manager per domain

image

Leave clusters, but add a machine

image

Assign servers to machine

image

3 seconds later, done

image


/app/wls_12.2.1.3/user_projects/domains/e1apps_12.2.1.3/startWebLogic.sh


image

job done

image

register with SM

image

Then choose 12c

image

Then enter the details of your install

image

don’t use any ‘.’s in the name

image

create instance!

image

interestingly I’m getting this in the console logs

image

Looks like the weblogic password is not being saved in SM properly

click on your domain name in SM, then add a server

image

Note that this password problem seems to the the cause of all my issues at the moment, as SM cannot talk to the admin server because the password is not saving.

This problem was silly me!!  The username was saved in the console as “weblogic “ there was a space at the end of the username, therefore when I saved the password it’d error out each time with a red error.  Eventually the system would lock out WLS.

I had to have the username as weblogic no space and use the save button (as below)

image

And then restart AdminServer at the command line, then save the password in SM – and it finally took!

I was then able to create my additional server easily

image

And now install JAS 9.2.2.4 to it

image

Note that I have a 9201 running, so I’m going to take that down to avoid locking.

image

Create

image

it seems that you can create without a node manager.

But you cannot start or synchronize the content without a nodeManager

Now my JDE works, I do not get the stuck thread issues that I was with 12.2.1.2

12.2.2.4 is released, so let’s upgrade WLS to 12.2.1.3–or NOT

MTR’s say that we are good to go:

image

Nice to put on the latest, but…

Then I find:

https://docs.oracle.com/middleware/12213/wls/WLUPG/intro.htm#WLUPG107

and…

Note:

As of WebLogic Server 12.1.2, Oracle no longer provides upgrade installers. You must install WebLogic Server 12.2.1.3.0 to a new directory location. You cannot install it over an existing installation.

Doh!  I thought that there might be a nice little (or big) opatch that I could apply – but it seems that things are a little more difficult than that.

I’m trying to solve an issue with 9.2.2.4 and WLS 12.2.1.2 on OEL that is not allowing me to login to JDE, getting stuck threads on the login page:


####<Apr 17, 2018, 1:11:22,535 PM AEST> <Error> <WebLogicServer> <ip-10-10-1-235.ap-southeast-2.compute.internal> <IOT_AISWEB_9201> <[ACTIVE] ExecuteThread: '4' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <00c06b7e-0c5a-4892-b8bb-79a54660fc84-0000001e> <1523934682535> <[severity-value: 8] [rid: 0] [partition-id: 0] [partition-name: DOMAIN] > <BEA-000337> <[STUCK] ExecuteThread: '8' for queue: 'weblogic.kernel.Default (self-tuning)' has been busy for "708" seconds working on the request "Http Request Information: weblogic.servlet.internal.ServletRequestImpl@5d9d6b3e[POST /jde/E1Menu.maf]
", which is more than the configured time (StuckThreadMaxTime) of "600" seconds in "server-failure-trigger". Stack trace:
         sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
         sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
         sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
         sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
         sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
         weblogic.socket.NIOInputStream.readInternal(NIOInputStream.java:146)
         weblogic.socket.NIOInputStream.read(NIOInputStream.java:90)
         weblogic.socket.NIOInputStream.read(NIOInputStream.java:73)
         weblogic.socket.JSSEFilterImpl.readFromNetwork(JSSEFilterImpl.java:496)
         weblogic.socket.JSSEFilterImpl.handleUnwrapResults(JSSEFilterImpl.java:675)
         weblogic.socket.JSSEFilterImpl.unwrapAndHandleResults(JSSEFilterImpl.java:554)
         weblogic.socket.JSSEFilterImpl.doHandshake(JSSEFilterImpl.java:99)
         weblogic.socket.JSSEFilterImpl.doHandshake(JSSEFilterImpl.java:78)


Yet when I install this on 12.2.1.1 – all works fine.

I’ve applied a bunch of patches to try and get it working (including 26860993), oh after removing others

/Oracle_Home/OPatch/opatch rollback -id 26485996

/Oracle_Home/OPatch/opatch rollback -id 24521759

but still no logging into JDE – stuck during login.

So, I may try more patching or a new instance at 12.2.1.3 and see if I can login to JAS

Let me know if you have the same issue.

Monday 16 April 2018

JDE920 and JDE910 batch job performance summary for AS/400 SQL


The following SQL will give you a summary of all batch jobs and how long they’ve taken to run (in seconds) on average on an AS/400 – note that this is specific syntax for the 400.  The date arithmetic is also quite specific for the AS/400.

SELECT JCPID as INNERPID, JCVERS as INNERVERS, TRIM(JCPID)||TRIM(JCVERS), simd || vrjd,
   count(1) as INNERCOUNT,
   Avg((DAYS(jcetdtim) - DAYS(jcstdtim)) * 86400 + (MIDNIGHT_SECONDS(jcetdtim) - MIDNIGHT_SECONDS(jcstdtim))) as INNERAVERAGE,
   min((DAYS(jcetdtim) - DAYS(jcstdtim)) * 86400 + (MIDNIGHT_SECONDS(jcetdtim) - MIDNIGHT_SECONDS(jcstdtim))) AS INNERMIN,
   max((DAYS(jcetdtim) - DAYS(jcstdtim)) * 86400 + (MIDNIGHT_SECONDS(jcetdtim) - MIDNIGHT_SECONDS(jcstdtim))) AS INNERMAX, avg(jcpwprcd) as "ROWS PROCESSED"
from svm910.f986114 t1,ol910.f9860, copd910.f983051, svm910.f986110 t2
where trim(t1.jcpid) = trim(siobnm)
and trim(t1.jcvers) = trim (vrvers)
and trim(t1.jcpid) = trim (vrpid)
and t1.jcjobnbr=t2.jcjobnbr
and t1.jcexehost = 'SYDJDE01'
group by  t1.jcpid, JCVERS, simd || vrjd ;

to reveal

image

Like my data obfuscation?

So you can quickly see long running jobs or compare averages.

The things that I want to remember out of this is the AS/400 syntax.

Thursday 12 April 2018

9.2.2.4 JD Edwards has been released

There are some exciting enhancements in this release, please look at https://docs.oracle.com/cd/E53430_01/EOTNC/software_updates.htm#EOTNC223 for some more information.

I'll be demonstrating the orchestration changes in a series over the next week.

In particular - look for :
launching BV's and changing data selection and processing options:
https://docs.oracle.com/cd/E53430_01/EOTOT/config_orchestration.htm#EOTOT555

a new report type service request.


imageGreat if you want to change data selection or POs for the launch


image

output overrides can be specified too


In Server Manager, you can enable error and exception handling for orchestrations. When enabled, each exception in an orchestration is saved as a single serialized JSON object and stored in a directory on the AIS Server. In addition to storing these files, the directory serves as a buffer for storing orchestration requests if the EnterpriseOne system is down.


When creating orchestrations, business analysts can include an array as an orchestration input, defining the set of data to pass within the array. You can use an array in two ways: with the orchestration ”Iterate Over” feature to repeatedly call a service request for each row in the array; or add to or update a grid by referencing the array name inside the service request at the grid level.


image


New FTP connector has been added

Wednesday 4 April 2018

One bad orchestration can ruin the entire testing platform

This problem took too long to solve, but let me tell you about it – as it might save you some time.  I’ve been creating orchestrations of various complexity and am enjoying the tasks.  There are a number of things that I’d like to see improved -

  • math_numeric handling of return values-  not everything is a string.  There needs to be some native casting capabilities.  This occurs when you create a new AN8 (for example) and then want to pass that into the P0092 form as the users AN8.  It’s passed back as a string and the orchestration does not work.  You also cannot change this.  Frustrating to need to use data service to get a number back.

image

  • You do not see return values until you save or change something in the orchestration studio

image

  • Complex logic is not going to happen in the standard development environment, you will need to write some java

image

That’s just my list at the moment, let’s settle back for the current problem though.

I just created a new custom orchestration which added a work order, nice – I’ve done this a number of times before.  Very simple form request and then an orchestration over the top.  But, something went wrong.

When I went to test it (or ANY orchestration, I did not get any parameters in the list).

It looked like the following

<Orchestration>
   <shortDesc>Add a WO for a thing that you get out of the cross reference</shortDesc>
   <inputFormat>JDE Standard</inputFormat>
   <version>v2</version>
   <inputTypes>
     <inputTypes type="String" required="false">
       <name>orch_inputszUnitNumber</name>
       <defaultValue>FR007</defaultValue>
     </inputTypes>
     <inputTypes type="String" required="false">
       <name>orch_inputszFailureDescription</name>
     </inputTypes>
   </inputTypes>
   <productCode>55</productCode>
   <orchestrationSteps>
     <orchestrationSteps type="ServiceRequest" omwObjectName="SRE_1804030006CUST">
       <name>20180403_AddWO</name>
       <outputMappings><formOutputMappings>
           <formOutputMappings>
             <formIndex>4</formIndex>
             <outputMappings>
               <outputMappings>
                 <name>235</name>
                 <id>235</id>
               </outputMappings>
             </outputMappings>
           </formOutputMappings>
         </formOutputMappings>
       </outputMappings>
       <transformations>
         <transformations input="orch_inputszUnitNumber" output="inStringUnitNumber"/>
         <transformations input="orch_inputszFailureDescription" output="szFailureDescription"/>
       </transformations>
     </orchestrationSteps>
   </orchestrationSteps>
</Orchestration>

If you were to try and import this into your orchestration studio, you might find the same problem:

image

See that all of my parameters are missing!

But, if I delete the orchestration (now that I know the one).

using P98220U

image

Yes!

It immediately starts working again

image

Very strange.

to solve this I did spend hours debugging logs, installing new tools releases, restarting everything…  deleting UDO’s and more.

If you do not see parameters in the orchestration client, take a look at the last orchestration that you created!