What is a Plug-in and how to use Java plug-ins with Struts?
By: Emiley J.
Any Java class that you want to initialize when Struts application starts up and destroy when the application shuts down is a Java Plug-in. You can create a Java Plug-in by creating a Java class that implements org.apache.struts.action.Plugin interface.
Example:
public interface PlugIn {
public void init(ActionServlet servlet,
ApplicationConfig config)
throws ServletException;
public void destroy();
}
Why you need a Plug-in?
Before Struts 1.1 (in Struts 1.0), you had to subclass ActionServlet to initialize
application resources at startup time. With plugin mechanism (in Struts 1.1), you
create Plugin classes and configure them.
Generic mechanism
Struts framework itself uses plugin mechanism for supporting Validator and Tiles.
The plug-in must be declared in struts-config.xml via <plug-in> element.
example plug-in's in struts-example (sample application)
<plug-in className="org.apache.struts.plugins.ModuleConfigVerifier"/>
<plug-in className="org.apache.struts.webapp.example.memory.MemoryDatabasePlugIn">
<set-property property="pathname" value="/WEB-INF/database.xml"/>
</plug-in>
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,
/WEB-INF/validation.xml"/>
</plug-in>
How do Plug-in's get called? During startup of a Struts application, ActionServlet calls init() method of each
Plug-in configured. Plug-ins are called in the order they are configured in struts-config.xml file.
Here is a sample application that shows how init() of MemoryDatabasePlugin in struts-example sample application.
public final class MemoryDatabasePlugIn implements PlugIn {
...
/**
* Initialize and load our initial database from persistent storage.
*
* @param servlet The ActionServlet for this web application
* @param config The ApplicationConfig for our owning module
*
* @exception ServletException if we cannot configure ourselves correctly
*/
public void init(ActionServlet servlet, ModuleConfig config)
throws ServletException {
log.info("Initializing memory database plug in from '" + pathname + "'");
// Remember our associated configuration and servlet
this.config = config;
this.servlet = servlet;
// Construct a new database and make it available
database = new MemoryUserDatabase();
try {
String path = calculatePath();
if (log.isDebugEnabled()) {
log.debug(" Loading database from '" + path + "'");
}
database.setPathname(path);
database.open();
} catch (Exception e) {
log.error("Opening memory database", e);
throw new ServletException("Cannot load database from '" + pathname + "'", e);
}
// Make the initialized database available
servlet.getServletContext().setAttribute(Constants.DATABASE_KEY,
database);
// Setup and cache other required data
setupCache(servlet, config);
}
//destroy() of MemoryDatabasePlugin in struts-example1 (sample code)
public final class MemoryDatabasePlugIn implements PlugIn {
...
/**
* Gracefully shut down this database, releasing any resources
* that were allocated at initialization.
*/
public void destroy() {
log.info("Finalizing memory database plug in");
if (database != null) {
try {
database.close();
} catch (Exception e) {
log.error("Closing memory database", e);
}
}
servlet.getServletContext().removeAttribute(Constants.DATABASE_KEY);
database = null;
servlet = null;
database = null;
config = null;
}
Archived Comments
1. Thanks for the description. Am loading my actionservlet on first request only, at that time if I get
View Tutorial By: sridevi at 2012-01-13 10:15:40
Comment on this tutorial
- Data Science
- Android
- AJAX
- ASP.net
- C
- C++
- C#
- Cocoa
- Cloud Computing
- HTML5
- Java
- Javascript
- JSF
- JSP
- J2ME
- Java Beans
- EJB
- JDBC
- Linux
- Mac OS X
- iPhone
- MySQL
- Office 365
- Perl
- PHP
- Python
- Ruby
- VB.net
- Hibernate
- Struts
- SAP
- Trends
- Tech Reviews
- WebServices
- XML
- Certification
- Interview
categories
Related Tutorials
Configuring JDBC DataSources in Struts
When is the best time to validate input in Struts
Simple example of using the requiredif Validator rule in Struts
How to prepopulate a form in Struts
Using JavaScript to submit a form in Struts
FAQ: Why are my checkboxes not being set from ON to OFF?
FAQ: Why was reload removed from Struts (since 1.1)?
What is a Plug-in and how to use Java plug-ins with Struts?
Origin and Architecture of Struts
Handling multiple buttons in HTML Form in Struts