com.ibm.as400.util.servlet.AS400Servlet Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jt400 Show documentation
Show all versions of jt400 Show documentation
The Open Source version of the IBM Toolbox for Java
///////////////////////////////////////////////////////////////////////////////
//
// JTOpen (IBM Toolbox for Java - OSS version)
//
// Filename: AS400Servlet.java
//
// The source code contained herein is licensed under the IBM Public License
// Version 1.0, which has been approved by the Open Source Initiative.
// Copyright (C) 1997-2000 International Business Machines Corporation and
// others. All rights reserved.
//
///////////////////////////////////////////////////////////////////////////////
package com.ibm.as400.util.servlet;
import java.util.Properties;
import java.io.IOException;
import java.beans.PropertyVetoException;
import javax.servlet.http.*;
import javax.servlet.*;
import com.ibm.as400.access.Trace;
import com.ibm.as400.access.AS400;
import com.ibm.as400.access.AS400ConnectionPool;
import com.ibm.as400.access.AS400SecurityException;
import com.ibm.as400.access.ConnectionPoolException;
import com.ibm.as400.access.ExtendedIllegalArgumentException;
/**
* The AS400Servlet class is an abstract class that represents an HTML Servlet.
*
* A connection pool can be used to share connections and manage the number of
* connections a servlet user can have to the system. When using connection
* pooling and a system is requested, a fully functional AS400 object is returned
* to the calling application. It is then up to the application to return the AS400
* object to the pool. It is not recommended that an application use this object to
* create additional connections as the pool would not keep track of these connections.
*
**/
public abstract class AS400Servlet extends AuthenticationServlet
{
static final long serialVersionUID = 8682226107563431693L;
private String head_ = "\n
\n";
private String end_ = "\n\n";
private boolean useConnectionPool_ = false;
// Handles loading the appropriate resource bundle
private static ResourceBundleLoader_s loader_; //$A1A
static private AS400ConnectionPool connectionPool_ = null;
/**
* Close the connection pool.
**/
public void destroy()
{
log(loader_.getText("PROP_DESC_SHUTDOWN"));
if (useConnectionPool_)
{
log(loader_.getText("PROP_DESC_CLEANUP"));
connectionPool_.close();
}
log(loader_.getText("PROP_DESC_SHUTDOWNCOMP"));
}
/**
* Constructs a default AS400Servlet object.
**/
public AS400Servlet()
{
}
/**
* Constructs an AS400Servlet object specifing whether to use the connection pool.
* The default is false.
*
* @param useConnectionPool true if using connection pool; false otherwise.
**/
public AS400Servlet(boolean useConnectionPool) //$A4C
{
setUseConnectionPool(useConnectionPool);
}
/**
* Returns the connection pool. The returned pool object
* allows the connection pool properties to be changed.
*
* @return The connection pool.
**/
public AS400ConnectionPool getConnectionPool()
{
return connectionPool_;
}
/**
* Returns the tag containing the servlet ending.
* @return The tag.
**/
public String getDocumentEnd()
{
return end_;
}
/**
* Returns the tag containing the servlet head.
* @return The tag.
**/
public String getDocumentHead()
{
return head_;
}
/**
* Returns an object representing the system.
*
* @exception ConnectionPoolException If a connection pool error occurs.
*
* @return The system object.
**/
public AS400 getSystem()
throws ConnectionPoolException
{
Thread currentThread = Thread.currentThread();
String threadId = currentThread.getName();
Properties p = (Properties)getSessionData().get(threadId);
String sysName = p.getProperty("realm");
String uid = p.getProperty("uid");
String pwd = p.getProperty("pwd");
AS400 sys;
if (connectionPool_ != null)
sys = connectionPool_.getConnection(sysName, uid, pwd);
else
sys = new AS400(sysName, uid, pwd);
try
{
// do this so the signon dialog or expiration warning will not display // @B2A
sys.setGuiAvailable(false);
}
catch (PropertyVetoException e)
{ }
return sys;
}
/**
* Returns an object representing the system. It uses the specified systemName.
*
* @param systemName The name of the system.
*
* @exception ConnectionPoolException If a connection pool error occurs.
*
* @return The system object.
**/
public AS400 getSystem(String systemName)
throws ConnectionPoolException
{
Thread currentThread = Thread.currentThread();
String threadId = currentThread.getName();
Properties p = (Properties)getSessionData().get(threadId);
String uid = p.getProperty("uid");
String pwd = p.getProperty("pwd");
AS400 sys;
if (connectionPool_ != null)
sys = connectionPool_.getConnection(systemName, uid, pwd);
else
sys = new AS400(systemName, uid, pwd);
try
{
// do this so the signon dialog or expiration warning will not display // @B2A
sys.setGuiAvailable(false);
}
catch (PropertyVetoException e)
{ }
return sys;
}
/**
* Returns an object representing the system. It connects to the specified service.
*
* @param service The name of the service.
*
* @exception AS400SecurityException If a security or authority error occurs.
* @exception IOException If an error occurs while communicating with the system.
* @exception ConnectionPoolException If a connection pool error occurs.
*
* @return The system object.
**/
public AS400 getSystem(int service)
throws AS400SecurityException, IOException, ConnectionPoolException
{
Thread currentThread = Thread.currentThread();
String threadId = currentThread.getName();
Properties p = (Properties)getSessionData().get(threadId);
String sysName = p.getProperty("realm");
String uid = p.getProperty("uid");
String pwd = p.getProperty("pwd");
AS400 sys = null;
try
{
if (connectionPool_ != null)
{
sys = connectionPool_.getConnection(sysName, uid, pwd, service);
// do this so the signon dialog or expiration warning will not display // @B2A
sys.setGuiAvailable(false);
}
else
{
sys = new AS400(sysName, uid, pwd);
// do this so the signon dialog or expiration warning will not display // @B2A
sys.setGuiAvailable(false);
sys.connectService(service);
}
}
catch (PropertyVetoException e)
{ }
return sys;
}
/**
* Returns an object representing the system. It connects to the specified systemName and service.
*
* @param systemName The name of the system.
* @param service The name of the service.
*
* @exception AS400SecurityException If a security or authority error occurs.
* @exception IOException If an error occurs while communicating with the system.
* @exception ConnectionPoolException If a connection pool error occurs.
*
* @return The system object.
**/
public AS400 getSystem(String systemName, int service)
throws AS400SecurityException, IOException, ConnectionPoolException
{
Thread currentThread = Thread.currentThread();
String threadId = currentThread.getName();
Properties p = (Properties)getSessionData().get(threadId);
String uid = p.getProperty("uid");
String pwd = p.getProperty("pwd");
AS400 sys = null;
try
{
if (connectionPool_ != null)
{
sys = connectionPool_.getConnection(systemName, uid, pwd, service);
// do this so the signon dialog or expiration warning will not display // @B2A
sys.setGuiAvailable(false);
}
else
{
sys = new AS400(systemName, uid, pwd);
// do this so the signon dialog or expiration warning will not display // @B2A
sys.setGuiAvailable(false);
sys.connectService(service);
}
}
catch (PropertyVetoException e)
{ }
return sys;
}
/**
* Returns an object representing the system. It uses the specified systemName, user ID, and password.
*
* @param systemName The name of the system.
* @param userId The user ID to use to connect to the system.
* @param password The password to use to connect to the system.
*
* @exception ConnectionPoolException If a connection pool error occurs.
*
* @return The system object.
* @deprecated Use getSystem(String systemName, String userId, char[] password) instead.
**/
public AS400 getSystem(String systemName, String userId, String password)
throws ConnectionPoolException
{
AS400 sys = null;
if (connectionPool_ != null)
sys = connectionPool_.getConnection(systemName, userId, password);
else
sys = new AS400(systemName, userId, password);
try
{
// do this so the signon dialog or expiration warning will not display // @B2A
sys.setGuiAvailable(false);
}
catch (PropertyVetoException e)
{ }
return sys;
}
/**
* Returns an object representing the system. It uses the specified systemName, user ID, and password.
*
* @param systemName The name of the system.
* @param userId The user ID to use to connect to the system.
* @param password The password to use to connect to the system.
*
* @exception ConnectionPoolException If a connection pool error occurs.
*
* @return The system object.
**/
public AS400 getSystem(String systemName, String userId, char[] password)
throws ConnectionPoolException
{
AS400 sys = null;
if (connectionPool_ != null)
sys = connectionPool_.getConnection(systemName, userId, password);
else
sys = new AS400(systemName, userId, password);
try
{
// do this so the signon dialog or expiration warning will not display // @B2A
sys.setGuiAvailable(false);
}
catch (PropertyVetoException e)
{ }
return sys;
}
/**
* Returns an object representing the system. It uses the specified systemName, user ID, password, and service.
*
* @param systemName The name of the system.
* @param userId The user ID to use to connect to the system.
* @param password The password to use to connect to the system.
* @param service The name of the service.
*
* @exception AS400SecurityException If a security or authority error occurs.
* @exception IOException If an error occurs while communicating with the system.
* @exception ConnectionPoolException If a connection pool error occurs.
*
* @return The system object.
**/
public AS400 getSystem(String systemName, String userId, String password, int service)
throws AS400SecurityException, IOException, ConnectionPoolException
{
AS400 sys = null;
try
{
if (connectionPool_ != null)
{
log(loader_.getText("PROP_DESC_USEPOOL")); //$A1C
sys = connectionPool_.getConnection(systemName, userId, password, service);
// do this so the signon dialog or expiration warning will not display // @B2A
sys.setGuiAvailable(false);
}
else
{
sys = new AS400(systemName, userId, password);
// do this so the signon dialog or expiration warning will not display // @B2A
sys.setGuiAvailable(false);
sys.connectService(service);
}
}
catch (PropertyVetoException e)
{ }
return sys;
}
/**
* Indicates if the connection pool is being used.
* The default value is false.
* @return true if using connection pool; false otherwise.
**/
public boolean isUseConnectionPool()
{
return useConnectionPool_;
}
/**
* Set the html document end tags.
*
* @param end The end tags.
**/
public void setDocumentEnd(String end)
{
if (end == null)
throw new NullPointerException("end");
end_ = end;
}
/**
* Sets the html document starting tags.
*
* @param head The starting tags.
**/
public void setDocumentHead(String head)
{
if (head == null)
throw new NullPointerException("head");
head_ = head;
}
/**
* Sets the AS400Servlet to use the connection pool.
* The default is false.
*
* @param useConnectionPool true if using connection pool; false otherwise.
*
* @see com.ibm.as400.access.AS400ConnectionPool
**/
public void setUseConnectionPool(boolean useConnectionPool)
{
useConnectionPool_ = useConnectionPool;
if (useConnectionPool_)
{
log(loader_.getText("PROP_DESC_USEPOOL")); //$A1C
if (connectionPool_ == null)
{
log(loader_.getText("PROP_DESC_CREATEPOOL")); //$A1C
connectionPool_ = new AS400ConnectionPool(); //$A2C
}
connectionPool_.setLog(getLog()); //$A3C
}
else
{
log(loader_.getText("PROP_DESC_NOTUSEPOOL")); //$A1C
if (connectionPool_ != null)
{
log(loader_.getText("PROP_DESC_CLEANUPEXT")); //$A1C
connectionPool_.close();
connectionPool_ = null;
}
}
}
/**
* Return the system object to the pool when connection pooling is being used.
*
* @param system The system object.
**/
public void returnSystem(AS400 system) // @A7C
{
if (connectionPool_ == null)
log(loader_.getText("PROP_DESC_NOTUSEPOOL"));
else
connectionPool_.returnConnectionToPool(system);
}
/**
* Method used to validate authority.
*
* @param realm The realm to validate against.
* @param uid The user ID to use for validation.
* @param pw The password to use for validation.
*
* @return always true.
*
* @exception SecurityException This exception should be thrown if validation fails.
* @exception IOException This exception should be thrown if a communication error occurs during validation.
**/
final public boolean validateAuthority(String realm, String uid, String pw) //$A5C
throws SecurityException, IOException
{
try
{
log(loader_.substitute(loader_.getText("PROP_DESC_AUTHENTICATE"), new String[] {uid, realm} )); //$A1C
uid = uid.toUpperCase();
realm = realm.toUpperCase();
AS400 sys = new AS400(realm, uid, pw);
sys.validateSignon();
return true;
}
catch (ExtendedIllegalArgumentException e) //$A8A
{ //$A8A
log(loader_.getText("PROP_DESC_AUTHFAILED")); //$A8A
if (Trace.isTraceOn()) //$A8A
Trace.log(Trace.ERROR, e); //$A8A
throw new SecurityException(e.getMessage()); //$A8A
} //$A8A
catch (AS400SecurityException e)
{
log(loader_.getText("PROP_DESC_AUTHFAILED")); //$A1C $A6C
if (Trace.isTraceOn()) //$A6A
Trace.log(Trace.ERROR, e); //$A6A
if (connectionPool_ != null) //@B1A
{ //@B1A
int rtncode = e.getReturnCode(); //@B1A
if (rtncode == AS400SecurityException.USERID_UNKNOWN || //@B1A
rtncode == AS400SecurityException.PASSWORD_INCORRECT || //@B1A
rtncode == AS400SecurityException.USERID_DISABLE) //@B1A
connectionPool_.removeFromPool(realm, uid); //@B1A
} //@B1A
throw new SecurityException(e.getMessage());
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy