Monday, October 24, 2016

At 11:00 AM Pacific on Tuesday, October 25th (tomorrow), I have the privilege of talking about Cloud and on-premise (ground) integration. Whether cloud to cloud, cloud to ground, or ground to ground, integration is probably one of the most difficult aspects of any implementation. Integration comes in two flavors:

Back-end

Front-end

Back-end integration is the most common. Back-end integration involves integrating data between two systems either for processing or presenting a common user experience.

Front-end integration is about combining the user experience of two separate applications to create a common user experience. I often find that I can eliminate some of the back-end integrations if I can appropriately mashup front-end applications. In this webinar you will learn enterprise mashup strategies that allow you to present a seamless user experience to your users across cloud and ground applications. No modifications. Just tailoring and configuration.

Monday, October 03, 2016

The DPK scripts are simply amazing. I enjoy the flexibility of the new DPK system. I will confess, creating an HCM demo environment with DPK is not as easy as the prior PUM image method, but it is pretty close. As I prepared for OpenWorld 2016, I thought I would download the latest HCM DPK (update 18) and build out a new demo server on my MacBook. Unfortunately, I wasn't able to use the standard Windows PowerShell approach (PowerShell on Mac? Yes, maybe...) so went with the manual VirtualBox import method described in the document: PeopleSoft_Deployment_Packages_For_Update_Images_Installation_July2016, page 31 Task 2-2-2. Everything was running great until the VM attempted to extract HCM-920-UPD-018-OVA_12of15. The install process seemed to hang. With a little investigation, I found that the VM's second disk was full. The solution was rather simple: expand the disk and try again. Just in case you find yourself in this situation, here are the steps I performed to expand the virtual disk.

Following the manual steps, I first imported the VirtualBox shell appliance, but I didn't boot the image

Next, I cloned the second disk using the command VBoxManage clonehd VBOX_8_55_06_SHELL-disk2.vmdk VBOX_8_55_06_SHELL-disk2.vdi --format vdi. The point of cloning into a VDI is so we can use VirtualBox commands to expand the disk.

I then expanded that new disk using the command VBoxManage modifyhd VBOX_8_55_06_SHELL-disk2.vdi --resize 122880. I didn't need to make the disk 120 GB. VirtualBox tells me the image is only using 65 GB, but it doesn't hurt to have extra capacity. The disk files grow as needed.

Optional step: If you want, you can convert the disk back to a VMDK, but this is not necessary. I kept the VirtualBox VDI. VBoxManage clonehd VBOX_8_55_06_SHELL-disk2.vdi VBOX_8_55_06_SHELL-disk2.vmdk --format vmdk.

You need to tell VirtualBox to use the new disk you just created. Open the Virtual Machine's settings and switch to the storage section. Replace the exising *disk2 entry with the name of the file you just created.

Now, here is the interesting part... The virtual disk is bigger, but the operating system doesn't know that yet. We have to stretch the partition table on that disk so the operating system can use the free space we just created. The way I handled this was to boot the VirtualBox guest using one of the amazing Linux live ISO distributions. Specifically, I chose GParted. So, your next step is to download a Linux live distribution. You can find the GParted ISO here. Download the ISO so you can make it available to the VirtualBox guest

With the ISO downloaded, open the guest's properties and switch to the storage settings. Add an optical drive to the IDE controller and select the ISO you downloaded.

Boot the Virtual Machine. The live CD image should take over. If you chose GParted, then you should see the GParted program load. Use the list of disks in the upper right corner to switch to sdb. You should now see a disk with lots of unallocated space. Edit this disk so that it uses all of the available space

Apply your changes, shutdown the virtual machine, and then remove the GParted disk ISO from the virtual drive.

Continue with the rest of the DPK Install steps as described in the Oracle provided documentation.

You should now have a fully functional VirtualBox demo image. Tip: if your usage is light (no SES, not running payroll, etc), then you can easily drop the allocated memory for your VirtualBox image down to 2 GB. I've even run them as low as 1 GB. Memory is important, but I derive the most performance improvement from running these images on an SSD.

Friday, September 09, 2016

In a matter of days, customers, partners, employees... and everyone else related to the Oracle ecosystem will converge on San Francisco for the 2016 edition of the Oracle OpenWorld conference. This is by far the most comprehensive Oracle conference of the year, covering both applications and technology. I am really looking forward to attending this year as an Oracle partner. Since I won't be working the Oracle demo grounds, please feel free to stop me anytime, anywhere to start an impromptu conversation. Don't hesitate. My goal is to talk to as many people as possible, so you will be doing me a favor by saying "Hello."

Like many of you, I have been searching the content catalog for all of my favorite search terms: Fluid, PeopleTools, Jeff Robbins, Graham Smith, Sasank Vemana, David Bain, JavaScript, and Oracle JET... there is a lot of great content this year. Unfortunately, there are also a lot of really great overlapping sessions. In fact, the famous Graham Smith from Cedar Consulting will be presenting at the exact same time as his wife Jo, but in a different room (Sorry Graham, I am planning to attend your wife's session).

With all that is going on at OpenWorld this year, I do hope you will leave room in your schedule to attend my session on Monday at 4:15PM in Moscone West 2024. I will be presenting Getting the Most Out of PeopleSoft: PeopleSoft PeopleTools Tips and Techniques [CON7070]. I have a lot of great content planned including new, under-publicized PeopleTools 8.55 features, fluid tips, and Oracle JET. As always, I expect to give away a few copies of my books as well (remind me if I forget).

The OpenWorld bookstore is another one of my favorite places to visit during the OpenWorld conference. Oracle Press will be there with copies of all three of my books. Each year the bookstore sells these books at a discount. If you purchase a copy, look for me in Moscone West. I would be happy to sign your book for you.

Friday, July 22, 2016

The PeopleCode language has a lot of features and functions. But sometimes, it seems there are tasks we need to accomplish that are just out of reach of the PeopleCode language. It is at these times that I reach for Java. I have written a lot about Java, so I'm sure many of you already know how to mix Java with PeopleCode. While certainly a rational solution, one of the pain points of a Java solution is managing custom Java on the app and process scheduler servers. Each time you update your compiled class (or jar) files, you have to restart the server. That might be OK in a stable production environment, where you don't intend to change code often, but in development, it is a real pain! Likewise, maintaining custom Java class and jar files through upgrades can be a little sketchy. Specifically, if you redeploy PeopleTools or rewrite psconfig, then it is possible you may miss some of your custom Java code. PeopleBooks tells us how to setup psconfig for custom Java classes, but again, that is just one more thing to manage through upgrades. Now, imagine being able to update your custom Java code with a Data Mover script. Further, imagine being able to run custom Java without making any changes to your application server. Imagine what it would be like to run Java without having to beg (or bribe) your admin for a "no customization" exception. It is possible today. The answer: Use JavaScript to interface between PeopleCode and the delivered Java Runtime Environment. Through the embedded Mozilla Rhino JavaScript script engine of Java, we have full, dynamic access to the JRE. When and how would you use this? Let's review some examples.

Custom HTTP Connections

For various reasons, some customers choose not to implement Integration Broker. These customers find themselves requiring integration, but without IB's networking features. An alternative to %IntBroker.ConnectorRequestURL is to use Java's HttpURLConnection.I strongly discourage this approach, but the question arises. The JRE is there, well integrated with PeopleCode, and ready for use. From PeopleCode, it is possible to create a Java URLConnection using CreateJavaObject("java.net.URL", "http...").openConnection(). A problem arises when we try to invoke methods of a HttpURLConnection, the real return value of URL.openConnection. Unfortunately, PeopleCode doesn't see it that way, which leads down the reflection path (we don't want to go there). This is where JavaScript can help us. JavaScript doesn't mind that URL.openConnection returned an HttpURLConnection even though it said it would just return a URLConnection. Here is an example:

Excel Spreadsheets

PeopleTools 8.55+ has a PeopleCode API for Excel, which means this solution is now irrelevant. I'm listing it because not everyone is up to PeopleTools 8.55 (yet). If you use this idea to build a solution for 8.54 and later upgrade, Oracle recommends that you switch to the PeopleCode Excel API. The solution will still work with 8.55+, but just isn't recommended post 8.54.

This solution uses the Apache POI library that is distributed with PeopleTools 8.54+ to read and write binary Microsoft Excel files. As with the networking solution above, it is possible to use POI directly from PeopleCode, but a little difficult because POI uses method overloading in a manner that PeopleCode can't resolve. Furthermore, POI uses methods that return superclasses and interfaces that PeopleCode can't cast to subclasses, leading to awful reflection code. Here is an example that reads a spreadsheet row by row, inserting each row into a staging table for later processing.

Tuesday, March 29, 2016

I just wanted to post a quick note with my schedule for Collaborate 2016. I will be presenting PeopleSoft Developer Tips and Techniques on April 13th at 9:15 AM in Reef C. My publisher assured me that I will have a box of books waiting for me at the conference and we plan to give them away at various sessions during the conference. Here are a couple of other sessions I recommend attending at Collaborate:

There is one session I want to specifically highlight:
A Designers Intro to the Oracle JET Framework. PeopleTools 8.55 includes Oracle JET, Oracle's brand new open source JavaScript Extension. You may never directly interact with Oracle JET, but it is always good to understand the tools and frameworks used by PeopleTools. Oracle JET is based on common JavaScript libraries such as RequireJS and Knockout and PeopleTools includes these related open source libraries (note: I have written about using RequireJS with PeopleSoft in prior posts).

The views expressed on this blog are my own and definitely reflect the views of JSMPros, my employer. The views and opinions expressed by visitors to this blog, however, are theirs and do not necessarily reflect my opinions or the opinions of JSMPros.

Please be advised: this site contains code snippets and examples that may require modifications to delivered PeopleSoft objects. Before modifying delivered code, make sure your development team approves of your modification. Likewise, ensure that you have properly documented your modification according to your organization's best practices. You and your organization will be responsible for maintaining your modifications through patches and upgrades.

The author provides development tips and modification ideas for informational purposes only. Tips and techniques presented on this site should be considered proof of concepts only. Neither the author or his employer assume any liability for problems resulting from the implementation of these ideas.