craigmcc 02/01/19 21:34:08
Modified: conf/share struts-config_1_1.dtd
src/share/org/apache/struts/action ActionServlet.java
src/share/org/apache/struts/config ApplicationConfig.java
MessageResourcesConfig.java
Log:
Follow Martin's suggestion and allow more than one <message-resources>
element in the struts-config.xml file. The default (as you might expect :-)
is backwards compatible.
Also, refine the storing of data sources and message resources into servlet
context attributes. The actual attribute used is the specified key plus the
sub-application prefix (which, for the default sub-app, is again backwards
compatible). The net effect of this is that data source and message
resources keys do *not* have to be globally unique.
Revision Changes Path
1.11 +16 -2 jakarta-struts/conf/share/struts-config_1_1.dtd
Index: struts-config_1_1.dtd
===================================================================
RCS file: /home/cvs/jakarta-struts/conf/share/struts-config_1_1.dtd,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- struts-config_1_1.dtd 17 Jan 2002 00:15:05 -0000 1.10
+++ struts-config_1_1.dtd 20 Jan 2002 05:34:08 -0000 1.11
@@ -11,7 +11,7 @@
"-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
- $Id: struts-config_1_1.dtd,v 1.10 2002/01/17 00:15:05 craigmcc Exp $
+ $Id: struts-config_1_1.dtd,v 1.11 2002/01/20 05:34:08 craigmcc Exp $
-->
@@ -85,7 +85,7 @@
hierarchy, and contains nested elements for all of the other
configuration settings.
-->
-<!ELEMENT struts-config (data-sources?, form-beans?, global-exceptions?,
global-forwards?, action-mappings?, controller?, message-resources?)>
+<!ELEMENT struts-config (data-sources?, form-beans?, global-exceptions?,
global-forwards?, action-mappings?, controller?, message-resources*)>
<!ATTLIST struts-config id ID #IMPLIED>
@@ -112,6 +112,10 @@
source will be stored. Default is the value specified
by string constant Action.DATA_SOURCE_KEY.
+ NOTE: The attribute under which this data source is
+ actually stored will be the key value suffixed by
+ the application prefix for this sub-application
+
type Fully qualified Java class name of the data source
implementation class. This class must implement
"javax.sql.DataSource" and be configurable totally
@@ -467,6 +471,15 @@
By default, this is set to
org.apache.struts.util.PropertyMessageResourcesFactory.
+ key Servlet context attribute key under which this
+ message resources bundle will be stored. Default is the
+ value specified by the string constant
+ Action.MESSAGES_KEY.
+
+ NOTE: The attribute under which this message resources is
+ actually stored will be the key value suffixed by
+ the application prefix for this sub-application
+
null Set to true if you want our message resources to return
a null string for unknown message keys, or false to
return a message with the bad key value. [true]
@@ -478,6 +491,7 @@
<!ATTLIST message-resources id ID #IMPLIED>
<!ATTLIST message-resources className %ClassName; #IMPLIED>
<!ATTLIST message-resources factory %ClassName; #IMPLIED>
+<!ATTLIST message-resources key %AttributeName; #IMPLIED>
<!ATTLIST message-resources null %Boolean; #IMPLIED>
<!ATTLIST message-resources parameter CDATA #REQUIRED>
1.88 +41 -30
jakarta-struts/src/share/org/apache/struts/action/ActionServlet.java
Index: ActionServlet.java
===================================================================
RCS file:
/home/cvs/jakarta-struts/src/share/org/apache/struts/action/ActionServlet.java,v
retrieving revision 1.87
retrieving revision 1.88
diff -u -r1.87 -r1.88
--- ActionServlet.java 17 Jan 2002 00:15:05 -0000 1.87
+++ ActionServlet.java 20 Jan 2002 05:34:08 -0000 1.88
@@ -1,7 +1,7 @@
/*
- * $Header:
/home/cvs/jakarta-struts/src/share/org/apache/struts/action/ActionServlet.java,v 1.87
2002/01/17 00:15:05 craigmcc Exp $
- * $Revision: 1.87 $
- * $Date: 2002/01/17 00:15:05 $
+ * $Header:
/home/cvs/jakarta-struts/src/share/org/apache/struts/action/ActionServlet.java,v 1.88
2002/01/20 05:34:08 craigmcc Exp $
+ * $Revision: 1.88 $
+ * $Date: 2002/01/20 05:34:08 $
*
* ====================================================================
*
@@ -266,7 +266,7 @@
*
* @author Craig R. McClanahan
* @author Ted Husted
- * @version $Revision: 1.87 $ $Date: 2002/01/17 00:15:05 $
+ * @version $Revision: 1.88 $ $Date: 2002/01/20 05:34:08 $
*/
public class ActionServlet
@@ -759,7 +759,12 @@
}
// Special handling for the default app's MessageResourcesConfig
- MessageResourcesConfig mrc = config.getMessageResourcesConfig();
+ MessageResourcesConfig mrc =
+ config.findMessageResourcesConfig(Action.MESSAGES_KEY);
+ if (mrc == null) {
+ mrc = new MessageResourcesConfig();
+ config.addMessageResourcesConfig(mrc);
+ }
value = getServletConfig().getInitParameter("application");
if (value != null) {
mrc.setParameter(value);
@@ -827,7 +832,8 @@
throw new UnavailableException
(internal.getMessage("dataSource.init", dscs[i].getKey()));
}
- getServletContext().setAttribute(dscs[i].getKey(), ds);
+ getServletContext().setAttribute
+ (dscs[i].getKey() + config.getPrefix(), ds);
dataSources.put(dscs[i].getKey(), ds);
}
dataSources.setFast(true);
@@ -851,31 +857,36 @@
protected void initApplicationMessageResources
(ApplicationConfig config) throws ServletException {
- MessageResourcesConfig mrc = config.getMessageResourcesConfig();
- if ((mrc.getFactory() == null) || (mrc.getParameter() == null)) {
- return;
- }
- if (debug >= 1) {
- log("Initializing application path '" + config.getPrefix() +
- "' message resources from '" + mrc.getParameter() + "'");
- }
+ MessageResourcesConfig mrcs[] =
+ config.findMessageResourcesConfigs();
+ for (int i = 0; i < mrcs.length; i++) {
+ if ((mrcs[i].getFactory() == null) ||
+ (mrcs[i].getParameter() == null)) {
+ continue;
+ }
+ if (debug >= 1) {
+ log("Initializing application path '" + config.getPrefix() +
+ "' message resources from '" +
+ mrcs[i].getParameter() + "'");
+ }
- try {
- String factory = mrc.getFactory();
- MessageResourcesFactory.setFactoryClass(factory);
- MessageResourcesFactory factoryObject =
- MessageResourcesFactory.createFactory();
- MessageResources resources =
- factoryObject.createResources(mrc.getParameter());
- resources.setReturnNull(mrc.getNull());
- getServletContext().setAttribute
- (Action.MESSAGES_KEY + config.getPrefix(), resources);
- } catch (Throwable t) {
- log(internal.getMessage
- ("applicationResources", mrc.getParameter()), t);
- throw new UnavailableException
- (internal.getMessage
- ("applicationResources", mrc.getParameter()));
+ try {
+ String factory = mrcs[i].getFactory();
+ MessageResourcesFactory.setFactoryClass(factory);
+ MessageResourcesFactory factoryObject =
+ MessageResourcesFactory.createFactory();
+ MessageResources resources =
+ factoryObject.createResources(mrcs[i].getParameter());
+ resources.setReturnNull(mrcs[i].getNull());
+ getServletContext().setAttribute
+ (mrcs[i].getKey() + config.getPrefix(), resources);
+ } catch (Throwable t) {
+ log(internal.getMessage
+ ("applicationResources", mrcs[i].getParameter()), t);
+ throw new UnavailableException
+ (internal.getMessage
+ ("applicationResources", mrcs[i].getParameter()));
+ }
}
}
1.8 +74 -22
jakarta-struts/src/share/org/apache/struts/config/ApplicationConfig.java
Index: ApplicationConfig.java
===================================================================
RCS file:
/home/cvs/jakarta-struts/src/share/org/apache/struts/config/ApplicationConfig.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- ApplicationConfig.java 15 Jan 2002 18:39:36 -0000 1.7
+++ ApplicationConfig.java 20 Jan 2002 05:34:08 -0000 1.8
@@ -1,7 +1,7 @@
/*
- * $Header:
/home/cvs/jakarta-struts/src/share/org/apache/struts/config/ApplicationConfig.java,v
1.7 2002/01/15 18:39:36 craigmcc Exp $
- * $Revision: 1.7 $
- * $Date: 2002/01/15 18:39:36 $
+ * $Header:
/home/cvs/jakarta-struts/src/share/org/apache/struts/config/ApplicationConfig.java,v
1.8 2002/01/20 05:34:08 craigmcc Exp $
+ * $Revision: 1.8 $
+ * $Date: 2002/01/20 05:34:08 $
*
* ====================================================================
*
@@ -82,7 +82,7 @@
* previous Struts behavior that only supported one application.</p>
*
* @author Craig R. McClanahan
- * @version $Revision: 1.7 $ $Date: 2002/01/15 18:39:36 $
+ * @version $Revision: 1.8 $ $Date: 2002/01/20 05:34:08 $
* @since Struts 1.1
*/
@@ -146,6 +146,13 @@
protected FastHashMap forwards = new FastHashMap();
+ /**
+ * The set of message resources configurations for this
+ * application, if any, keyed by the <code>key</code> property.
+ */
+ protected FastHashMap messageResources = new FastHashMap();
+
+
// ------------------------------------------------------------- Properties
@@ -180,24 +187,6 @@
/**
- * The message resources configuration object for this application.
- */
- protected MessageResourcesConfig messageResourcesConfig = null;
-
- public MessageResourcesConfig getMessageResourcesConfig() {
- if (this.messageResourcesConfig == null)
- this.messageResourcesConfig = new MessageResourcesConfig();
- return (this.messageResourcesConfig);
- }
-
- public void setMessageResourcesConfig(MessageResourcesConfig mrc) {
- if (configured)
- throw new IllegalStateException("Configuration is frozen");
- this.messageResourcesConfig = mrc;
- }
-
-
- /**
* The prefix of the context-relative portion of the request URI, used to
* select this configuration versus others supported by the controller
* servlet. A configuration with a prefix of a zero-length String is the
@@ -342,6 +331,24 @@
/**
+ * Add a new <code>MessageResourcesConfig</code> instance to the set
+ * associated with this application.
+ *
+ * @param config The new configuration instance to be added
+ *
+ * @exception IllegalStateException if this application configuration
+ * has been frozen
+ */
+ public void addMessageResourcesConfig(MessageResourcesConfig config) {
+
+ if (configured)
+ throw new IllegalStateException("Configuration is frozen");
+ messageResources.put(config.getKey(), config);
+
+ }
+
+
+ /**
* Return the action configuration for the specified path, if any;
* otherwise return <code>null</code>.
*
@@ -467,6 +474,33 @@
/**
+ * Return the message resources configuration for the specified key,
+ * if any; otherwise return <code>null</code>.
+ *
+ * @param key Key of the data source configuration to return
+ */
+ public MessageResourcesConfig findMessageResourcesConfig(String key) {
+
+ return ((MessageResourcesConfig) messageResources.get(key));
+
+ }
+
+
+ /**
+ * Return the message resources configurations for this application.
+ * If there are none, a zero-length array is returned.
+ */
+ public MessageResourcesConfig[] findMessageResourcesConfigs() {
+
+ MessageResourcesConfig results[] =
+ new MessageResourcesConfig[messageResources.size()];
+ return ((MessageResourcesConfig[])
+ messageResources.values().toArray(results));
+
+ }
+
+
+ /**
* Freeze the configuration of this application. After this method
* returns, any attempt to modify the configuration will return
* an IllegalStateException.
@@ -479,6 +513,7 @@
exceptions.setFast(true);
formBeans.setFast(true);
forwards.setFast(true);
+ messageResources.setFast(true);
ActionConfig[] configs = findActionConfigs();
for (int i = 0; i < configs.length; i++) {
configs[i].freeze();
@@ -569,6 +604,23 @@
if (configured)
throw new IllegalStateException("Configuration is frozen");
forwards.remove(config.getName());
+
+ }
+
+
+ /**
+ * Remove the specified message resources configuration instance.
+ *
+ * @param config MessageResourcesConfig instance to be removed
+ *
+ * @exception IllegalStateException if this application configuration
+ * has been frozen
+ */
+ public void removeMessageResourcesConfig(MessageResourcesConfig config) {
+
+ if (configured)
+ throw new IllegalStateException("Configuration is frozen");
+ messageResources.remove(config.getKey());
}
1.3 +20 -4
jakarta-struts/src/share/org/apache/struts/config/MessageResourcesConfig.java
Index: MessageResourcesConfig.java
===================================================================
RCS file:
/home/cvs/jakarta-struts/src/share/org/apache/struts/config/MessageResourcesConfig.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- MessageResourcesConfig.java 13 Jan 2002 00:25:36 -0000 1.2
+++ MessageResourcesConfig.java 20 Jan 2002 05:34:08 -0000 1.3
@@ -1,7 +1,7 @@
/*
- * $Header:
/home/cvs/jakarta-struts/src/share/org/apache/struts/config/MessageResourcesConfig.java,v
1.2 2002/01/13 00:25:36 craigmcc Exp $
- * $Revision: 1.2 $
- * $Date: 2002/01/13 00:25:36 $
+ * $Header:
/home/cvs/jakarta-struts/src/share/org/apache/struts/config/MessageResourcesConfig.java,v
1.3 2002/01/20 05:34:08 craigmcc Exp $
+ * $Revision: 1.3 $
+ * $Date: 2002/01/20 05:34:08 $
*
* ====================================================================
*
@@ -64,6 +64,7 @@
import java.io.Serializable;
+import org.apache.struts.action.Action;
/**
@@ -72,7 +73,7 @@
* configuration file.</p>
*
* @author Craig R. McClanahan
- * @version $Revision: 1.2 $ $Date: 2002/01/13 00:25:36 $
+ * @version $Revision: 1.3 $ $Date: 2002/01/20 05:34:08 $
* @since Struts 1.1
*/
@@ -95,6 +96,21 @@
public void setFactory(String factory) {
this.factory = factory;
+ }
+
+
+ /**
+ * The servlet context attributes key under which this MessageResources
+ * instance is stored.
+ */
+ protected String key = Action.MESSAGES_KEY;
+
+ public String getKey() {
+ return (this.key);
+ }
+
+ public void setKey(String key) {
+ this.key = key;
}
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>