You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by ma...@apache.org on 2009/09/03 16:11:43 UTC
svn commit: r810956 - in /db/derby/code/branches/10.3: ./
java/drda/org/apache/derby/impl/drda/NetworkServerControlImpl.java
Author: mamta
Date: Thu Sep 3 14:11:43 2009
New Revision: 810956
URL: http://svn.apache.org/viewvc?rev=810956&view=rev
Log:
DERBY-4304
Merged into 10.3 codeline
Modified:
db/derby/code/branches/10.3/ (props changed)
db/derby/code/branches/10.3/java/drda/org/apache/derby/impl/drda/NetworkServerControlImpl.java
Propchange: db/derby/code/branches/10.3/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Sep 3 14:11:43 2009
@@ -1 +1 @@
-/db/derby/code/trunk:552046,788436,793588,800523
+/db/derby/code/trunk:552046,788436,793588,794303,796316,796372,798347,798742,800523,803548
Modified: db/derby/code/branches/10.3/java/drda/org/apache/derby/impl/drda/NetworkServerControlImpl.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.3/java/drda/org/apache/derby/impl/drda/NetworkServerControlImpl.java?rev=810956&r1=810955&r2=810956&view=diff
==============================================================================
--- db/derby/code/branches/10.3/java/drda/org/apache/derby/impl/drda/NetworkServerControlImpl.java (original)
+++ db/derby/code/branches/10.3/java/drda/org/apache/derby/impl/drda/NetworkServerControlImpl.java Thu Sep 3 14:11:43 2009
@@ -717,104 +717,241 @@
);
clientThread.start();
- // wait until we are told to shutdown or someone sends an InterruptedException
- synchronized(shutdownSync) {
- try {
- shutdownSync.wait();
- }
- catch (InterruptedException e)
- {
- shutdown = true;
- }
- }
-
-
- AccessController.doPrivileged(
- new PrivilegedAction() {
- public Object run() {
- // Need to interrupt the memcheck thread if it is sleeping.
- if (mc != null)
- mc.interrupt();
-
- //interrupt client thread
- clientThread.interrupt();
-
- return null;
- }
- });
+ try {
+ // wait until we are told to shutdown or someone sends an InterruptedException
+ synchronized(shutdownSync) {
+ try {
+ shutdownSync.wait();
+ }
+ catch (InterruptedException e)
+ {
+ shutdown = true;
+ }
+ }
+
+ try {
+ AccessController.doPrivileged(
+ new PrivilegedAction() {
+ public Object run() {
+ // Need to interrupt the memcheck thread if it is sleeping.
+ if (mc != null)
+ mc.interrupt();
+
+ //interrupt client thread
+ clientThread.interrupt();
+
+ return null;
+ }
+ });
+ } catch (Exception exception) {
+ consolePrintAndIgnore("DRDA_UnexpectedException.S", exception, true);
+ }
+
+ // Close out the sessions
+ synchronized(sessionTable) {
+ for (Enumeration e = sessionTable.elements(); e.hasMoreElements(); )
+ {
+ Session session = (Session) e.nextElement();
+ try {
+ session.close();
+ } catch (Exception exception) {
+ consolePrintAndIgnore("DRDA_UnexpectedException.S", exception, true);
+ }
+ }
+ }
+
+ synchronized (threadList)
+ {
+ //interupt any connection threads still active
+ for (int i = 0; i < threadList.size(); i++)
+ {
+ try {
+ final DRDAConnThread threadi = (DRDAConnThread)threadList.get(i);
+
+ threadi.close();
+ AccessController.doPrivileged(
+ new PrivilegedAction() {
+ public Object run() {
+ threadi.interrupt();
+ return null;
+ }
+ });
+ } catch (Exception exception) {
+ consolePrintAndIgnore("DRDA_UnexpectedException.S", exception, true);
+ }
+ }
+ threadList.clear();
+ }
- // Close out the sessions
- synchronized(sessionTable) {
- for (Enumeration e = sessionTable.elements(); e.hasMoreElements(); )
- {
- Session session = (Session) e.nextElement();
- session.close();
- }
- }
-
- synchronized (threadList)
- {
- //interupt any connection threads still active
- for (int i = 0; i < threadList.size(); i++)
- {
- final DRDAConnThread threadi = (DRDAConnThread)threadList.get(i);
-
- threadi.close();
- AccessController.doPrivileged(
- new PrivilegedAction() {
- public Object run() {
- threadi.interrupt();
- return null;
- }
- });
- }
- threadList.clear();
- }
-
-
+ // close the listener socket
+ try{
+ serverSocket.close();
+ }catch(IOException e){
+ consolePropertyMessage("DRDA_ListenerClose.S");
+ } catch (Exception exception) {
+ consolePrintAndIgnore("DRDA_UnexpectedException.S", exception, true);
+ }
+
+ // Wake up those waiting on sessions, so
+ // they can close down
+ try{
+ synchronized (runQueue) {
+ runQueue.notifyAll();
+ }
+ } catch (Exception exception) {
+ consolePrintAndIgnore("DRDA_UnexpectedException.S", exception, true);
+ }
+ if (shutdownDatabasesOnShutdown) {
+
+ // Shutdown Derby
+ try {
+ if (cloudscapeDriver != null)
+ cloudscapeDriver.connect("jdbc:derby:;shutdown=true",
+ (Properties) null);
+ } catch (SQLException sqle) {
+ // If we can't shutdown Derby. Perhaps authentication is
+ // set to true or some other reason. We will just print a
+ // message to the console and proceed.
+ String expectedState =
+ StandardException.getSQLStateFromIdentifier(
+ SQLState.CLOUDSCAPE_SYSTEM_SHUTDOWN);
+ if (!expectedState.equals(sqle.getSQLState())) {
+ consolePropertyMessage("DRDA_ShutdownWarning.I",
+ sqle.getMessage());
+ }
+ } catch (Exception exception) {
+ consolePrintAndIgnore("DRDA_UnexpectedException.S", exception, true);
+ }
+ }
+
+ consolePropertyMessage("DRDA_ShutdownSuccess.I", new String []
+ {att_srvclsnm, versionString});
+
+ } catch (Exception ex) {
+ try {
+ //If the console printing is not available, then we have
+ //a simple stack trace print below to atleast print some
+ //exception info
+ consolePrintAndIgnore("DRDA_UnexpectedException.S", ex, true);
+ } catch (Exception e) {}
+ ex.printStackTrace();
+ }
+ }
- // close the listener socket
- try{
- serverSocket.close();
- }catch(IOException e){
- consolePropertyMessage("DRDA_ListenerClose.S");
- }
+ //Print the passed exception on the console and ignore it after that
+ private void consolePrintAndIgnore(String msgProp,
+ Exception e, boolean printTimeStamp) {
+ // catch the exception consolePropertyMessage will throw since we
+ // just want to print information about it and move on.
+ try {
+ consolePropertyMessage(msgProp, true);
+ } catch (Exception ce) {}
+ consoleExceptionPrintTrace(e);
+ }
+ /**
+ * Put property message on console
+ *
+ * @param msgProp message property key
+ * @param printTimeStamp whether to prepend a timestamp to the message
+ *
+ * @throws Exception if an error occurs
+ */
+ protected void consolePropertyMessage(String msgProp, boolean printTimeStamp)
+ throws Exception
+ {
+ consolePropertyMessageWork(msgProp, null, printTimeStamp);
+ }
+ /**
+ * Handle console error message
+ * - display on console and if it is a user error, display usage
+ * - if user error or severe error, throw exception with message key and message
+ *
+ * @param messageKey message key
+ * @param args arguments to message
+ * @param printTimeStamp whether to prepend a timestamp to the message
+ *
+ * @throws Exception if an error occurs
+ */
+ private void consolePropertyMessageWork(String messageKey, String [] args, boolean printTimeStamp)
+ throws Exception
+ {
+ String locMsg = null;
- // Wake up those waiting on sessions, so
- // they can close down
- synchronized (runQueue) {
- runQueue.notifyAll();
- }
+ int type = getMessageType(messageKey);
- if (shutdownDatabasesOnShutdown) {
+ if (type == ERRTYPE_UNKNOWN)
+ locMsg = messageKey;
+ else
+ locMsg = localizeMessage(messageKey, langUtil, args);
- // Shutdown Derby
- try {
- if (cloudscapeDriver != null)
- cloudscapeDriver.connect("jdbc:derby:;shutdown=true",
- (Properties) null);
- } catch (SQLException sqle) {
- // If we can't shutdown Derby. Perhaps authentication is
- // set to true or some other reason. We will just print a
- // message to the console and proceed.
- String expectedState =
- StandardException.getSQLStateFromIdentifier(
- SQLState.CLOUDSCAPE_SYSTEM_SHUTDOWN);
- if (!expectedState.equals(sqle.getSQLState())) {
- consolePropertyMessage("DRDA_ShutdownWarning.I",
- sqle.getMessage());
- }
- }
+ //display on the console
+ consoleMessage(locMsg, printTimeStamp);
+
+ //if it is a user error display usage
+ if (type == ERRTYPE_USER)
+ usage();
+
+ //we may want to use a different locale for throwing the exception
+ //since this can be sent to a browser with a different locale
+ if (currentSession != null &&
+ currentSession.langUtil != null &&
+ type != ERRTYPE_UNKNOWN)
+ locMsg = localizeMessage(messageKey, currentSession.langUtil, args);
+
+ // throw an exception for severe and user errors
+ if (type == ERRTYPE_SEVERE || type == ERRTYPE_USER)
+ {
+ if (messageKey.equals("DRDA_SQLException.S"))
+ throwSQLException(args[0]);
+ else if (messageKey.equals("DRDA_SQLWarning.I"))
+ throwSQLWarning(args[0]);
+ else
+ throw new Exception(messageKey+":"+locMsg);
}
- consolePropertyMessage("DRDA_ShutdownSuccess.I", new String []
- {att_srvclsnm, versionString,
- getFormattedTimestamp()});
-
+ // throw an exception with just the message if the error type is
+ // unknown
+ if (type == ERRTYPE_UNKNOWN)
+ throw new Exception(locMsg);
- }
+ return;
+
+ }
+
+ /**
+ * Write a message to console output stream
+ *
+ * @param msg message
+ * @param printTimeStamp Whether to prepend a timestamp to the message or not
+ */
+ public void consoleMessage(String msg, boolean printTimeStamp)
+ {
+ // print to console if we have one
+ PrintWriter lw = logWriter;
+ if (lw != null)
+ {
+ synchronized(lw) {
+ if (printTimeStamp) {
+ lw.println(getFormattedTimestamp() + " : " + msg);
+ } else {
+ lw.println(msg);
+ }
+ }
+ }
+ // always print to derby.log
+ lw = cloudscapeLogWriter;
+ if (lw != null)
+ synchronized(lw)
+ {
+ if (printTimeStamp) {
+ Monitor.logMessage(getFormattedTimestamp() + " : " + msg);
+ } else {
+ Monitor.logMessage(msg);
+ }
+ }
+ }
/**
* Load Derby and save driver for future use.