March 2013
JAM/Panther Banner

Included in this JAM/Panther Quarterly Update is information on Panther 5.30 product updates, new support for Java in JPL, and an announcement of our New Panther Services program. Also included is a write-up and example of how to send email via JavaMail as well as how to reuse your JAM/Panther code to build JEE components.


Q1 Panther 5.30 Product Updates

Bug #




Support for Panther 4.50 and CSDK 2.9/Informix10



Support for JAM7.36 and Oracle10g & 11g



Support for MSVC 2012 for Win32 and Win64



Ability to have the same table name appear more than once in an Outer Join(Transaction Manager)



Ability to use the mouse scroll wheel in a grid with a single-line text



Characters like “;” , “,” and “ ” are supported in DBMS DECLARE CONNECTION statement’s password argument



Dispatcher failing, due to exposure of TCP port that is currently bound to INADDR_ANY, instead of INADDR_LOOPBACK.



Licensing for TrueType font not enforced in the PDF driver



Save to PDF icon does not appear in the viewer toolbar for prorun32.exe



In Panther 5.20 and 5.30, report fonts may not resolve correctly if
@app()->jam70_disable_rw_font_cache is set to PV_YES.



Your cached data is no longer available" appears when label on button is "=" or "$".



Support SQL Server 2008's "time" column data type.


Need a patch? Email with your Customer ID, Panther version and platform.


Support for Plain Old Java Objects (POJOs) in JPL

Invoking Plain Old Java Objects (POJOs) directly from JPL can now be implemented using the below functions:
int sm_obj_create (char *object)
int sm_obj_delete_id(char *object)
int sm_obj_call(char *method_spec)
int sm_obj_set_property(int obj_id, char *prop, char *val)
int sm_obj_get_property(int obj_id, char *prop, char *val)

Click each link for more details on each function.

The JPL code below instantiates a HashMap object, stores key/value pairs in it, and then retrieves the data from the HashMap.

// Initialize the component system for Java use.
@app()->current_component_system = PV_SERVER_JAVA

// Panther permits only raw types for instantiation
global locationMap = sm_obj_create("java.util.HashMap")

/* Note that the "put" method takes two Object arguments. The arguments passed in are treated
as String, which are instances of Object. */
call sm_obj_call(locationMap, "put", "NY", "New York")
call sm_obj_call(locationMap, "put", "NJ", "New Jersey")
call sm_obj_call(locationMap, "put", "CA", "California")
call sm_obj_call(locationMap, "put", "HYD", "Hyderabad")
call sm_obj_call(locationMap, "put", "FL", "Florida")

// Assume location is a field on the screen containing an abbreviation
msg emsg sm_obj_call(locationMap, "get", location)

/* Don't delete the Panther object ID in locationMap. We don't want the HashMap to be garbage
collected, since we have its object ID in a JPL global variable for reuse.
// call sm_obj_delete_id(locationMap)
/*NOTE: One could use 'sm_obj_create("java.util.HashMap(int)", 100)' to instantiate a HashMap with an initial capacity of 100, for example.*/


New Panther Services

The Panther Services team is proud to announce several new services that are available for our current JAM and Panther customers.

A. Hyper Care Support
This extended support can be purchased in weekly increments to assist your team during your Go Live period. Your support case will be handled with priority during designated time/days, i.e. Mon - Fri 8am-6pm EST. Our expert services personnel will be given remote edit/view access to your system, where they will guide your team with issues encountered during this critical time, ensuring a smooth rollout of your Panther and JAM applications.

B. Application Migration Service
Our Panther service experts are able to perform your JAM/Panther Application Migration/Upgrade; whether upgrading to a new version of Panther, migrating to the web or just recompiling your executables onto a new platform. With 30 years of experience in our products, our experts are knowledgeable in all aspects and options for migration. Work may be done remotely or onsite. This service may be purchased on a time and materials basis.

C. Application Maintenance Services
Prolifics also offers cost effective Panther and JAM experts available on demand. Our services team will be able to implement new features to your existing application, fix bugs as well as provide an end user Help Desk. This service may be billed on a monthly, per-incident or hourly rate.

Please contact to discuss any of the above services.


Sending Email via JavaMail from Panther’s Interface

Do you need to send an email from your Panther application? Why not implement it using Java.
You will need: Panther 5 and higher and jdk1.6.0_20 (to run this sample)

Above is the sample screen used in this exercise. Once all the required information has been entered, the user will press the “Send Mail” button. Attached to the Send Mail button’s Java Tag property is a Java Class called “SendMail”.

SendMail.Class contains a Button Handler method that prepares the message that is to be sent. Once the message is prepared, it will invoke the JavaMail API (included in mail.jar)

SendMail.Class, the supporting class for the button must be in your CLASSPATH, along with pro5.jar. Pro5.jar contains Panthers Java Classes. Mail.jar must also be in your CLASSPATH.

To download a working sample of sending email via Java, click here.


Reuse your JAM/Panther code to build Java EE components that run on an open source JEE Application Server (instructions included)

How would you like to isolate your JAM/Panther application's user interface from the business logic currently embedded within your screens or in a library? Why not run your business logic on an Application Server that conforms to open industry standards, like the Java Enterprise Edition (JEE) specifications? While you're at it, why not keep costs down by using a reliable open source implementation of JEE?

Introducing a JEE Application Server into your architecture will not only help you separate your presentation logic from your business logic, it will also open the doors to reuse of your business logic within other applications and facilitates both portability and scalability of your application. Other advantages of a JEE Application Server are data and code integrity, session management, security, fail-over, and load-balancing etc. These features will eventually result in a lower Total Cost of Ownership for your JAM/Panther application.

There are many JEE servers in the market today; WebSphere, Weblogic, GlassFish, JBoss etc. One of the industry’s JEE Servers that we are focusing on this quarter is an open source JEE server called TomEE. TomEE, pronounced "Tommy" is a combination of Tomcat with OpenEJB. Whereas Tomcat provides only a Servlet container, OpenEJB provides an EJB container.

Panther for WebSphere Edition, contains a model that allows developers to separate their JAM/Panther application into n-tiers i.e. developers may separate their business logic from their presentation interface and data logic. The business and data logic layers will become part of the EJB Component implementation. The advantage of creating EJBs within Panther is that its powerful model shields Panther developers from many of the technical details of EJB component development.

These Panther created EJB Components are then installed in the TomEE Application Server. The below diagram, shows 4 Panther generated EJBs installed in TomEE web-gui interface.

For detailed step-by-step instructions on how to deploy Panther EJBs in TomEE click here, Deploy ejbs in TomEE.


Ideas for Our Next Quarterly Update?

We welcome your feedback at

Tel: (212) 267-7722
Toll Free: (800) 458-3313
Fax: (212) 608-6753