Appendix E: xfNetLink Java Sample Code
The code samples in this appendix illustrate how to create a program using either JavaServer Pages or Java. Both programs call a subroutine named HELLO on the server.
Client application (hello.jsp and hello.java)
The hello.jsp program uses the jsp:useBean action to load a JavaBean created using the xfNetLink Java component generation tools. It sets the host and port, calls the connect() method to make a connection to xfServerPlus, and then calls the hello_routine() method, passing two parameters. The program returns the results and then calls the disconnect() method to close the connection. The hello.jsp page is called from the hello.html page, which includes a table that displays the results to the screen. The code for errorpage.jsp is also included below: hello.jsp sets errorpage.jsp as the page to go to if it encounters a Java exception.
The hello.java program creates a new JavaTest object, sets the host and port, and calls the connect() method to make the connection to xfServerPlus. It then calls the hello_routine() method, passing two parameters, and displays the returned results to the screen. The connection is closed by the disconnect() method.
If you want to try running these programs, see the instructions following the code sample. These sample files are included in the Examples directory in your xfNetLink Java distribution.
hello.jsp
<%@ page errorPage="errorpage.jsp" %> <jsp:useBean id="helloexm" scope="session" class="JavaTest.JavaTest" /> <htm> <head> <title>Hello Example </title> </head> <body> <center> <% String name = new String(""); StringBuffer message = new StringBuffer(""); int rtnval = 0; String errmsg = ""; name = request.getParameter("UserName"); // Enter xfpl name or IP address and port number helloexm.setxfHost("hostIP"); helloexm.setxfPort(2356); // Connect to xfServerPlus and call hello method helloexm.connect(); helloexm.hello_routine(name, message); out.println("<br>"); out.println("The hello example returned message = "); out.println(message); out.println("<br>"); // shut down xfpl connection helloexm.disconnect(); %> </body> </htm>
hello.html
<htm> <head> </head> <body> <form action=hello.jsp method=post> <p> <table align=center bgcolor=#cccccc border=0 cellPadding=1 cellspacing=0 width=75%> <tr> <td colspan=2> <div align=center><strong><em> <font color=#0000ff face="" size=5>Hello Example!</font></em></strong></div> <br> </td> </tr> <tr> <td align=right>name:</td> <td><INPUT id=text1 name=UserName MAXLENGTH=10 size=10></td> <br> </tr> <tr> <td align=left> </td> <td align=left> </td> <br> </tr> <tr> <td colspan=2><br><hr width=95%></td> </tr> <tr> <td align=left> </td> <td align=left><br> <input type="submit" value=" Login " id=submit1 name=runLogin align=center style="HEIGHT: 67px; TOP: 55px; WIDTH: 73px"> <br> </td> </tr> </table></p> </form> </body> </htm>
errorpage.jsp
<htm> <body text="red"> <%@ page isErrorPage="true" %> <!-- Use the implicit exception object, which holds a --> <!-- reference to the thrown exception. --> The errorpage - Error: <%= exception.getMessage() %> has been reported. </body> </htm>
hello.java
import java.io.*; import JavaTest.*; import Synergex.util.*; public class hello { static JavaTest tst = new JavaTest(); public static void main(String argv[]) { try { hello test = new hello(); // Open the xfpl connection tst.setxfHost("hostIP"); tst.setxfPort(2356); tst.connect(); String name = new String("World"); StringBuffer message = new StringBuffer(""); // Make the call tst.hello_routine(name, message); System.out.println("message = " + message); // Close down the xfpl connection tst.disconnect(); } catch (xfJCWException e) { e.printStackTrace(System.err); } } }
Server-side code (HELLO subroutine)
The HELLO subroutine is the routine on the server that is called remotely by hello.jsp and hello.java. The hello.dbl file is included in the dbl\examples directory in your Synergy/DE distribution.
.subroutine hello ;Arguments a_name ,a a_message ,a .define HELLO ,"Hello " .define NONAME ,"No name passed " .proc if (^passed(a_name)) then a_message = %atrim(HELLO + a_name) else a_message = NONAME xreturn .end
Running the hello program
1. | Create an ELB or shared image named hello.elb containing the HELLO subroutine. The HELLO subroutine is located in the dbl\examples directory. Put the ELB on your xfServerPlus machine. |
2. | Use the Method Definition Utility to add the HELLO subroutine to the SMC. (See Using the MDU to define Synergy methods for instructions.) Include the following information in your MDU entry: |
Method name = hello_routine
Interface name = JavaTest
Method ID = hello_routine (this is copied from the method name)
Routine name = hello
ELB/shared image name = DBLDIR:hello (change the logical if necessary)
Return type = No return value
The subroutine has two parameters, name and message. Set them up as follows:
Parameter name = name
Data type = Alpha
Length = 20
Data passed = In
Pass by = Descriptor
Required
Parameter name = message
Data type = Alpha
Length = 30
Data passed = In/Out
Pass by = Descriptor
Required
3. | Using Workbench or the command line utilities, create a Java JAR file named JavaTest that includes the JavaTest interface. See Creating a Java JAR file in Workbench or Creating a Java JAR file from the command line for instructions. |
4. | If xfServerPlus is not already running, start it on the server machine. See one of the following for details: |
5. | Deploy and run the client program. |
- If you’re running the JSP application, do the following:
- Put the JAR file, JSP files, and HTML file in the location required by your servlet container.
- Verify that your web server and servlet container are running.
- Start the web browser on the client machine and load the hello.html page.
- If you’re running the Java application, do the following:
- Compile the hello.java file, and then put it and the JAR file in a location where Java can find them.
- Set your classpath.
- Run the program.
See Setting up your environment for development if you need help with deployment.