You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by cr...@apache.org on 2005/07/09 20:09:37 UTC
svn commit: r209961 - in /struts/core/trunk/doc/shale: features.xml
index.xml project.xml
Author: craigmcc
Date: Sat Jul 9 11:09:36 2005
New Revision: 209961
URL: http://svn.apache.org/viewcvs?rev=209961&view=rev
Log:
Documentation updates for the Shale website
* Flesh out the "background" section
* Document the required and optional dependencies
* Add a feature description for JNDI integration
Modified:
struts/core/trunk/doc/shale/features.xml
struts/core/trunk/doc/shale/index.xml
struts/core/trunk/doc/shale/project.xml
Modified: struts/core/trunk/doc/shale/features.xml
URL: http://svn.apache.org/viewcvs/struts/core/trunk/doc/shale/features.xml?rev=209961&r1=209960&r2=209961&view=diff
==============================================================================
--- struts/core/trunk/doc/shale/features.xml (original)
+++ struts/core/trunk/doc/shale/features.xml Sat Jul 9 11:09:36 2005
@@ -417,6 +417,127 @@
</section>
+ <section name="Shale JNDI Integration" href="jndi">
+
+ <subsection name="JNDI Introduction" href="jndi-introduction">
+
+ <p>The <em>Java Naming and Directory Interface</em> (JNDI) API is
+ commonly used in a Java2 Enterprise Edition (J2EE) (recently renamed
+ to Java Enterprise Edition (Java EE)) to acquire references to
+ resources that are declared in either:</p>
+
+ <ul>
+ <li>The deployment descriptor (<code>web.xml</code>) provided with
+ the application.</li>
+ <li>The customized configuration settings applied when the application
+ is depoyed to a particular instance of a particular application
+ server.</li>
+ </ul>
+
+ <p>As an example of the usefulness of this technique, consider an
+ application that requires a JDBC data source (i.e. a connection pool).
+ Consider also that the development environment contains two instances
+ of the database (development and staging), in addition to the production
+ instance. If your application can define just a <em>reference</em>
+ to the data source, then the same web application archive (WAR) can
+ be deployed, unchanged, to <strong>any</strong> of these instances.
+ The hookup to a particular database instance is performed through
+ deployment configuration, rather than modifying property settings in
+ the WAR for each environment.</p>
+
+ </subsection>
+
+ <subsection name="Services Provided" href="jndi-services">
+
+ <p>Shale includes custom instances of the <code>VariableResolver</code>
+ and <code>PropertyResolver</code> APIs, from JavaServer Faces, that
+ allow value binding and method binding expressions to navigate through
+ the JNDI <code>InitialContext</code> (and subcontexts) that are provided
+ to each web application by the application server. Such expressions can
+ be used to configure the values for properties of a JSF component, in
+ the usual way. In addition, expressions can be evaluated programatically
+ in your event handling code -- providing an easier to use mechanism for
+ acquiring such resources.</p>
+
+ <p>For example, assume you have a data source (i.e. instance of
+ <code>javax.sql.DataSoruce</code>) with a resource reference name
+ of <code>jdbc/CustomerDB</code> defined in your deployment descriptor.
+ You can programmatically gain access to this data source by evaluating
+ the following expression:</p>
+
+ <blockquote><code>#{jndi['jdbc/CustomerDB']}</code></blockquote>
+
+ </subsection>
+
+ <subsection name="Using JNDI Integration" href="jndi-using">
+
+ <p>Two examples of using the JNDI integration capabilities are
+ presented -- one using a value binding to a JSF component property,
+ and one using programmatic access to acquire a resource.</p>
+
+ <p><strong>(1) Binding to JSF Component Property</strong></p>
+
+ <p>JNDI supports the concept of <em>environment entries</em> that can
+ be declared in the deployment descriptor, and optionally modified by
+ the deployment configuration when the application is instaled in a
+ particular environment. Let's assume that you have a boolean
+ environment entry to define whether your application is running in
+ debug mode or not, declared in <code>web.xml</code> like this:</p>
+
+ <blockquote><pre>
+<env-entry>
+ <description>Flag indicating whether we run in debug mode.</description>
+ <env-entry-name>debugMode</env-entry-name>
+ <env-entry-value>false</env-entry-value>
+ <env-entry-type>java.lang.Boolean<env-entry-type>
+</env-entry>
+</pre></blockquote>
+
+ <p>Now, assume you have a status message that you only want to have
+ displayed when debug mode is enabled. You can bind the
+ <code>rendered</code> property of the component to this environment
+ entry value:</p>
+
+ <blockquote><pre>
+<h:outputText ... rendered="#{jndi.debugMode}" .../>
+</pre></blockquote>
+
+ <p><strong>(2) Programmatic Resource Access</strong></p>
+
+ <p>Assume you have a data source reference (discussed in the introduction)
+ defined in your <code>web.xml</code> like this:</p>
+
+ <blockquote><pre>
+<resource-ref>
+ <description>Customer Database</description>
+ <res-ref-name>jdbc/CustomerDB</res-ref-name>
+ <res-type>javax.sql.DataSource</res-type>
+ <res-auth>Container</res-auth>
+</resource-ref>
+</pre></blockquote>
+
+ <p>You can acquire a <code>java.sql.Connection</code> from this data
+ source with code like the following (note that the convenience base
+ class <code>BaseViewController</code> contains a <code>getBean()</code>
+ method that substantially reduces the amount of code needed):</p>
+
+ <blockquote><pre>
+FacesContext context = FacesContext.getCurrentInstance();
+ValueBinding vb =
+ context.getApplication().createValueBinding("#{jndi['jdbc/CustomerDB'].connection}");
+Connection conn = (Connection) vb.getValue(context);
+</pre></blockquote>
+
+ <p>This works by first retrieving the JNDI-configured data source
+ instance, and then calling its <code>getConnection()</code> method.
+ After you are through with the connection, return it to the pool
+ by calling the connection's <code>close()</code> method.</p>
+
+ </subsection>
+
+ </section>
+
+
<section name="Shale Spring Integration" href="spring">
<p>FIXME - Describe Spring integration feature.</p>
Modified: struts/core/trunk/doc/shale/index.xml
URL: http://svn.apache.org/viewcvs/struts/core/trunk/doc/shale/index.xml?rev=209961&r1=209960&r2=209961&view=diff
==============================================================================
--- struts/core/trunk/doc/shale/index.xml (original)
+++ struts/core/trunk/doc/shale/index.xml Sat Jul 9 11:09:36 2005
@@ -51,13 +51,92 @@
in terms of its continued popularity, that this is a good
strategic approach.</p>
+ <p>But, it is also time to harvest many of the great ideas that have
+ matured in the last several years. It is time to base a web tier
+ framework on top of the new standard API in this space (JavaServer Faces),
+ and eliminate the need to implement redundant features, instead of just
+ treating JSF as a UI component technology. It is time to answer the
+ question "if we knew then what we know now, what would Struts have
+ looked like?"</p>
+
+ <p>Thus, Shale is a proposal for a modern web application framework,
+ fundamentaly based on JavaServer Faces, and focused on improving
+ ease of use for developers adopting JSF as a foundational technology
+ in their own development environments. At the same time, the
+ architecture of Shale is a set of fine grained services (and service
+ options) that can be combined as needed to meet particular application
+ requirements, rather than a monolithic request processor that is hard
+ to customize and extend. In addition, integration links for other
+ frameworks and framework components are provided, to ease development
+ when combinations of technologies are required.</p>
+
+ <blockquote><em>EDITOR'S NOTE: Why "Shale"? As others have pointed out,
+ the cultural rules of engagement at Apache encourage both evolution
+ and revolution in software designs. Revolutions are typically assigned
+ code names while they are under discussion, gaining access to the
+ branding of the overall project once they are accepted (or, going off
+ on their own if they are not). Other proposals for Struts 2.x have
+ talked about tearing down the walls inside the framework, and those
+ are Good Things. Shale's architecture, on the other hand, is based
+ on the principle that we should fundamentally divide the notion of a
+ web application framework into solid individual layers, much as we
+ see geologically in shale deposits around our volcanoes and coastlines.
+ Each layer of the framework should focus on the specific requirements
+ that are relevant to that layer -- and use of one layer should not
+ necessarily require the use of all the rest (although it's certainly
+ reasonable for synergies to exist if all the layers are chosen :-).
+ Hence, "shale".</em></blockquote>
+
</subsection>
<subsection name="Foundations" href="background-foundations">
- <p>FIXME - describe foundational technologies.</p>
+ <p>Shale is based on (and requires a runtime environment that
+ supports) the following foundation technologies:</p>
+
+ <ul>
+ <li>Java Runtime Environment (JRE) 1.4 or later.</li>
+ <li>Servlet API 2.4 or later. (*)</li>
+ <li>JavaServer Pages 2.0 or later. (*)</li>
+ <li>JavaServer Faces 1.1 or later.</li>
+ <li>JSP Standard Tag Library (JSTL) 1.1 or later.</li>
+ <li>Apache Commons BeanUtils 1.7 or later.</li>
+ <li>Apache Commons Chain 1.0 or later.</li>
+ <li>Apache Commons Digester 1.7 or later.</li>
+ <li>Apache Commons Logging 1.0.4 or later.</li>
+ </ul>
+
+ <p>(*) Although the sample applications shipped with Shale are
+ configured for these Servlet and JSP versions, at the time of this
+ writing Shale itself does not rely on them; you can successfully
+ run Shale based applications on a Servlet 2.3 / JSP 1.2 platform
+ by using the appropriate syntax in deployment descriptors and JSP
+ pages, and substituting a JSTL 1.0 library for the JSTL 1.1 library
+ listed above. This is <strong>not</strong> a committed feature for
+ a 1.0 release, unless discussion on the development and user mailing
+ lists indicates that it is important to a significant number of
+ users.</p>
+
+ <p>Various optional Shale components have dependencies on the following
+ additional runtime technologies:</p>
+
+ <ul>
+ <li>Apache Commons Validator 1.1.4 or later.</li>
+ <li>Spring Framework 1.2.2 or later.</li>
+ <li>Struts Tiles (Stand Alone) - currently in Struts Sandbox.</li>
+ </ul>
+
+ <p>If you wish to work on Shale itself, you will require the following
+ additional resources:</p>
+ <ul>
+ <li>Java Development Kit (JDK) 1.4 or later.</li>
+ <li>Apache Ant 1.6.3 or later.</li>
+ <li>FindBugs (SourceForge Project) 0.8.6 or later (optional).</li>
+ <li>JUnit 3.8.1 or later.</li>
+ </ul>
+
</subsection>
Modified: struts/core/trunk/doc/shale/project.xml
URL: http://svn.apache.org/viewcvs/struts/core/trunk/doc/shale/project.xml?rev=209961&r1=209960&r2=209961&view=diff
==============================================================================
--- struts/core/trunk/doc/shale/project.xml (original)
+++ struts/core/trunk/doc/shale/project.xml Sat Jul 9 11:09:36 2005
@@ -19,6 +19,7 @@
<item name="Application Manager" href="features.html#application"/>
<item name="Validation" href="features.html#validation"/>
<item name="Remoting" href="features.html#remoting"/>
+ <item name="JNDI Integration" href="features.html#jndi"/>
<item name="Spring Integration" href="features.html#spring"/>
<item name="Reusable Views" href="features.html#clay"/>
<item name="Test Framework" href="features.html#test"/>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org