package com.sap.mw.jco.jra.examples;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import javax.naming.*;
import javax.resource.cci.*;
public class VeriClientServlet extends HttpServlet
{
private static final String CONTENT_TYPE = "text/html";
private String prefix = "eis/";
private String appServerName = "an unknown Application Server";
private String contextFactory = "";
/**Initialize global variables*/
public void init() throws ServletException
{
}
/**Process the HTTP Get request*/
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
Context ctx = null;
ConnectionFactory connectionfactory = null;
Connection connection = null;
RecordFactory recordfactory = null;
Interaction interaction = null;
response.setContentType(CONTENT_TYPE);
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>VeriClientServlet</title></head>");
out.println("<body>");
out.println("<p>SAPJRA TestSuite.</p>");
out.println("Date:" + new Date());
try
{
//obtain the initial JNDI context
ctx = new InitialContext();
}
catch (Exception e)
{
out.println("<p>Can't get context."+e.toString()+"</p>");
out.println("</body></html>");
return;
}
// compartibility adjustments
try
{
contextFactory = (String)ctx.getEnvironment().get("java.naming.factory.initial");
if (contextFactory != null) this.adjustServer(contextFactory);
out.println("<br><br>Your application is running on "+appServerName);
}//try
catch (Exception ex)
{
out.println("<br>Can't adjust jndi name for SAPJRAFactory.");
out.println(ex);
return;
}//catch
// look up for ConnectinFactory
try
{
connectionfactory = (ConnectionFactory)ctx.lookup(prefix+"SAPJRAFactory");
}//try
catch (Exception ex)
{
out.println("<br>Can't look up " +prefix+"SAPJRAFactory.");
out.println(ex);
return;
}//catch
// get Connection
try
{
connection = connectionfactory.getConnection();
out.println("<br><br>connection to "+ connection.getMetaData().getEISProductName() +
", "+ connection.getMetaData().getEISProductVersion() +
" with user \""+connection.getMetaData().getUserName() +
"\" created<br>");
}//try
catch (Exception ex)
{
out.println("<br>Can't create connection .");
System.out.println(ex);
return;
}//catch
boolean status = false;
try
{
// get RecordFactory
recordfactory = connectionfactory.getRecordFactory();
// create Interaction
interaction = connection.createInteraction();
// ************** call STFC_CONNECTION *******************************
out.print("<br>Call function STFC_CONNECTION........");
status = test_STFC_CONNECTION(recordfactory, interaction);
out.println(status ? "OK" : "ERROR");
// ************** call STFC_STRUCTURE *******************************
out.print("<br>Call function STFC_STRUCTURE.........");
status = test_STFC_STRUCTURE(recordfactory, interaction);
out.println(status ? "OK" : "ERROR");
// release interaction
interaction.close();
}
catch(Exception e)
{
out.println("<br>Can't call function .");
out.println(e);
return;
}
finally
{
if (connection != null)
{
try
{
connection.close();
}
catch(Exception e)
{
out.println("Can't close connection .");
out.println(e);
}
}
}
out.println("</body></html>");
}
private void adjustServer(String contextFactory)
{
if (contextFactory.equals("com.inqmy.services.jndi.InitialContextFactoryImpl"))
{
prefix = "EISConnections/";
appServerName = "Inqmy Application Server / SAP J2EE 620";
}
else if (contextFactory.equals("com.sap.engine.services.jndi.InitialContextFactoryImpl"))
{
prefix = "java:comp/env/eis/";
appServerName = "SAP J2EE Engine 630";
}
else if (contextFactory.equals("com.sun.enterprise.naming.SerialInitContextFactory"))
{
appServerName = "SUN Reference Implementation 1.3.X";
}
}
private boolean test_STFC_CONNECTION(RecordFactory recordFactory, Interaction interaction) throws javax.resource.ResourceException
{
boolean status = false;
MappedRecord input = recordFactory.createMappedRecord("STFC_CONNECTION");
String inputString = "call STFC_CONNECTION";
// set input-parameters
input.put("REQUTEXT", inputString);
// call function and create output
MappedRecord output = (MappedRecord) interaction.execute(null, input);
String outputString = (String) output.get("ECHOTEXT");
status = inputString.equals(outputString);
return status;
}
private boolean test_STFC_STRUCTURE(RecordFactory recordFactory, Interaction interaction) throws javax.resource.ResourceException, java.sql.SQLException
{
boolean status = true;
int rows = 5;
MappedRecord input = recordFactory.createMappedRecord("STFC_STRUCTURE");
MappedRecord importstruct = (MappedRecord)input.get("IMPORTSTRUCT");
importstruct.put("RFCFLOAT","1.23456");
importstruct.put("RFCCHAR1","A");
importstruct.put("RFCINT2", "12345");
importstruct.put("RFCINT1", "123");
importstruct.put("RFCCHAR4","ABCD");
importstruct.put("RFCINT4", "1234567890");
byte [] b = {(byte)0xf7, (byte)0xf7, (byte)0xf7};
importstruct.put("RFCHEX3", b);
importstruct.put("RFCCHAR2","AB");
importstruct.put("RFCTIME", "032559");
importstruct.put("RFCDATE", "2001-08-24");
importstruct.put("RFCDATA1", "This is Comment of field of type RFCDATA1");
importstruct.put("RFCDATA2", "This is Comment of field of type RFCDATA2");
ResultSet rfctable = (ResultSet)input.get("RFCTABLE");
for (int i = 0; i < rows; i++) {
rfctable.moveToInsertRow();
rfctable.updateFloat("RFCFLOAT",(float)1.6);
rfctable.updateString("RFCCHAR1","Y");
rfctable.updateInt("RFCINT2", 260 + i);
rfctable.updateShort("RFCINT1", (short)i);
rfctable.updateString("RFCCHAR4","EFGH"+i);
rfctable.updateLong("RFCINT4", Long.parseLong("987654321")); // 8 byte long is not supported by R/3
rfctable.updateBytes("RFCHEX3", b);
rfctable.updateObject("RFCCHAR2","AB");
rfctable.updateTime("RFCTIME", new java.sql.Time(System.currentTimeMillis()));
rfctable.updateDate("RFCDATE",new java.sql.Date(System.currentTimeMillis()));
rfctable.updateString("RFCDATA1", "This is Comment of field of type RFCDATA1");
rfctable.insertRow();
}
// call function and create output
MappedRecord output = (MappedRecord) interaction.execute(null, input);
MappedRecord echostruct = (MappedRecord) output.get("ECHOSTRUCT");
Iterator iterator = importstruct.entrySet().iterator();
while (status && iterator.hasNext())
{
String key = ((Map.Entry)iterator.next()).getKey().toString();
if (!key.equals("RFCHEX3"))
status = (importstruct.get(key)).equals(echostruct.get(key));
else
status = java.util.Arrays.equals((byte[])echostruct.get("RFCHEX3"), (byte[])importstruct.get("RFCHEX3"));
}
return status;
}
/**Clean up resources*/
public void destroy()
{
}
}