• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

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

 
Ranch Hand
Posts: 154
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
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 ]
 
Ranch Hand
Posts: 60
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
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
Posts: 154
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
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
Posts: 154
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
i think the difference is that the class contain a subclass. isn't it? anybody help me?
 
Sheriff
Posts: 4313
Android IntelliJ IDE Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

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 ]
 
Sean Li
Ranch Hand
Posts: 154
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
oh, my god, thank u, buddy. thanks for your patient. u r really helpful.
 
reply
    Bookmark Topic Watch Topic
  • New Topic