wood burning stoves*
The moose likes JSP and the fly likes why jsp cannot use this class, which is no problem when compile singlely. Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » JSP
Bookmark "why jsp cannot use this class, which is no problem when compile singlely." Watch "why jsp cannot use this class, which is no problem when compile singlely." New topic
Author

why jsp cannot use this class, which is no problem when compile singlely.

Sean Li
Ranch Hand

Joined: Feb 27, 2002
Posts: 154
I use a declaration in a jsp file:
<%! DBConnectionManager dd; %>
the compiler tell me that the class below contain problems. while i found no problem when i compile the class. what's wrong? is there any convention when declare a class within a jsp file? please help me!
package callcenter;
import java.io.*;
import java.sql.*;
import java.util.*;
import java.util.Date;
public class DBConnectionManager {
static private DBConnectionManager instance; // The single instance
private Vector drivers = new Vector();
private PrintWriter log;
private Hashtable pools = new Hashtable();
private Hashtable clients = new Hashtable();
/**
* A private constructor since this is a Singleton
*/
private DBConnectionManager()
throws SQLException {
init();
}
/**
* Loads properties and initializes the instance with its values.
*/
private void init() throws SQLException {
log = new PrintWriter(System.err);
loadDrivers();
//createPools(0);
}
/**
* Loads and registers all JDBC drivers. This is done by the
* DBConnectionManager, as opposed to the DBConnectionPool,
* since many pools may share the same driver.
*
* @param props The connection pool properties
*/
private void loadDrivers() throws SQLException {
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
}
/**
* Returns the single instance, creating one if it's the
* first time this method is called.
*
* @return DBConnectionManager The single instance.
*/
public static synchronized DBConnectionManager getInstance()
throws SQLException
{
if (instance == null) {
instance = new DBConnectionManager();
}
return instance;
}
/**
* Returns an open connection. If no one is available, and the max
* number of connections has not been reached, a new connection is
* created.
* @param name The pool name as defined in the properties file
* @return Connection The connection or null
*/
public Connection getConnection(String name,String url,String username,String password) throws SQLException {
if (!clients.containsKey(name)) {
createPool(name,url,username,password,0);
clients.put(name,new Integer(0));
}
int iCurr = ((Integer)clients.get(name)).intValue();
iCurr++;
clients.put(name,new Integer(iCurr));
DBConnectionPool pool = (DBConnectionPool) pools.get(name);
if (pool != null) {
return pool.getConnection();
}
return null;
}
private void createPool(String poolName,String url,String username,String password,int max) {
DBConnectionPool pool = new DBConnectionPool(poolName,url,username,password, max);
pools.put(poolName, pool);
log("Initialized pool " + poolName);
}

/**
* Returns a connection to the named pool.
* @param name The pool name as defined in the properties file
* @param con The Connection
*/
public void freeConnection(String name, Connection con) {
DBConnectionPool pool = (DBConnectionPool) pools.get(name);
if (pool != null) {
pool.freeConnection(con);
}
}
/**
* Closes all open connections and deregisters all drivers.
*/
public synchronized void release(String name) throws SQLException {
// Wait until called by the last client
if (!clients.containsKey(name)) return;
int iCurr = ((Integer)clients.get(name)).intValue();
iCurr--;
clients.put(name,new Integer(iCurr));
if (iCurr > 0) return;
clients.remove(name);
DBConnectionPool pool = (DBConnectionPool)pools.get(name);
pool.release();
if (!pools.isEmpty()) return;
Enumeration allDrivers = drivers.elements();
while (allDrivers.hasMoreElements()) {
Driver driver = (Driver) allDrivers.nextElement();
DriverManager.deregisterDriver(driver);
}
}
/**
* Writes a message to the log file.
*/
private void log(String msg) {
log.println(new Date() + ": " + msg);
}
/**
* Writes a message with an Exception to the log file.
*/
private void log(Throwable e, String msg) {
log.println(new Date() + ": " + msg);
e.printStackTrace(log);
}
/**
* This inner class represents a connection pool. It creates new
* connections on demand, up to a max number if specified.
* It also makes sure a connection is still open before it is
* returned to a client.
*/
class DBConnectionPool {
private int checkedOut;
private Vector freeConnections = new Vector();
private int maxConn;
private String name;
private String password;
private String URL;
private String user;
/**
* Creates new connection pool.
*
* @param name The pool name
* @param URL The JDBC URL for the database
* @param user The database user, or null
* @param password The database user password, or null
* @param maxConn The maximal number of connections, or 0
* for no limit
*/
public DBConnectionPool(String name, String URL, String user,String password,int maxConn) {
this.name = name;
this.URL = URL;
this.user = user;
this.password = password;
this.maxConn = maxConn;
}
/**
* Checks in a connection to the pool. Notify other Threads that
* may be waiting for a connection.
*
* @param con The connection to check in
*/
public synchronized void freeConnection(Connection con) {
// Put the connection at the end of the Vector
freeConnections.addElement(con);
checkedOut--;
notifyAll();
}
/**
* Checks out a connection from the pool. If no free connection
* is available, a new connection is created unless the max
* number of connections has been reached. If a free connection
* has been closed by the database, it's removed from the pool
* and this method is called again recursively.
*/
public synchronized Connection getConnection() throws SQLException {
Connection con = null;
if (freeConnections.size() > 0) {
// Pick the first Connection in the Vector
// to get round-robin usage
con = (Connection) freeConnections.firstElement();
freeConnections.removeElementAt(0);
if (con.isClosed()) {
log("Removed bad connection from " + name);
// Try again recursively
con = getConnection();
}
}
else if (maxConn == 0 || checkedOut < maxConn) {
con = newConnection();
}
if (con != null) {
checkedOut++;
}
return con;
}
/**
* Closes all available connections.
*/
public synchronized void release() throws SQLException {
Enumeration allConnections = freeConnections.elements();
while (allConnections.hasMoreElements()) {
Connection con = (Connection) allConnections.nextElement();
con.close();
}
freeConnections.removeAllElements();
}
/**
* Creates a new connection, using a userid and password
* if specified.
*/
private Connection newConnection() throws SQLException {
Connection con = null;
if (user == null) {
con = DriverManager.getConnection(URL);
}
else {
con = DriverManager.getConnection(URL, user, password);
}
log("Created a new connection in pool " + name);
return con;
}
}
}
[ May 07, 2002: Message edited by: Sean Lee ]
mustang india
Ranch Hand

Joined: Feb 05, 2002
Posts: 60
It would be more helpful if u can show the JSP code. U say that the Class is compiling properly, then there is no problem with this code.
Did u import the package callcenter in ur JSP ?
Regards,
Mustang.
Sean Li
Ranch Hand

Joined: Feb 27, 2002
Posts: 154
thanks for your reply, my jsp code is very simple:
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="CallCenter.*" %>
<html>
<head>
<title>
test
</title>
</head>
<body>
<h1>
JBuilder Generated JSP
</h1>
<%! DBConnectionManager dd;%>
</body>
</html>
the errormessage is: "test.jsp": Error #: 302 : cannot access class DBConnectionManager; class file: CallCenter.DBConnectionManager contains wrong class: callcenter.DBConnectionManager at line 13
the compiler i'm using is jbuilder6.
Sean Li
Ranch Hand

Joined: Feb 27, 2002
Posts: 154
i think the difference is that the class contain a subclass. isn't it? anybody help me?
Jessica Sant
Sheriff

Joined: Oct 17, 2001
Posts: 4313

Originally posted by Sean Lee:
the errormessage is: "test.jsp": Error #: 302 : cannot access class DBConnectionManager; class file: CallCenter.DBConnectionManager contains wrong class: callcenter.DBConnectionManager at line 13

Always remember -- Java is CaSe SeNsItIvE.
In your DBConnectionManager class you defined the package as: "package callcenter;"
But in the JSP you're importing: "<%@ page import="CallCenter.*" %>
Pick one -- then try running it again.
Hope that helps!
[ May 08, 2002: Message edited by: Jessica Sant ]

- Jess
Blog:KnitClimbJava | Twitter: jsant | Ravelry: wingedsheep
Sean Li
Ranch Hand

Joined: Feb 27, 2002
Posts: 154
oh, my god, thank u, buddy. thanks for your patient. u r really helpful.
 
With a little knowledge, a cast iron skillet is non-stick and lasts a lifetime.
 
subject: why jsp cannot use this class, which is no problem when compile singlely.