What is a Plug-in and how to use Java plug-ins with Struts?

By Emiley J. Viewed: 31733 times Emailed: 180 times Printed: 172 times Bookmark and Share



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;
}




Comments(0)


Be the first one to add a comment

Your name (required):


Your email(required, will not be shown to the public):


Your sites URL (optional):


Your comments:


Enter Code:
The Captcha image

Latest Tutorials

[2008-12-10]Configuring JDBC DataSources in Struts
[2008-12-09]Struts Classes
[2008-09-20]FAQ: Why was reload removed from Struts (since 1.1)?
[2008-09-20]FAQ: Why are my checkboxes not being set from ON to OFF?
[2008-09-20]Using JavaScript to submit a form in Struts
[2008-09-20]How to prepopulate a form in Struts
[2008-09-20]Simple example of using the requiredif Validator rule in Struts
[2008-09-20]Chaining actions in Struts
[2008-09-20]When is the best time to validate input in Struts
[2008-09-17]What is a Plug-in and how to use Java plug-ins with Struts?
[2008-08-13]7 Best Practices of Struts
[2007-10-12]Origin and Architecture of Struts
[2007-10-01]ActionErrors and ActionError in Struts
[2007-10-01]Tutorial on Struts Configuration File – struts-config.xml in Struts
[2007-10-01]Handling multiple buttons in HTML Form in Struts

More Latest News

Most Viewed Articles (in last 30 days)
Tutorial on Struts Configuration File – struts-config.xml in Struts
Struts 1 vs Struts 2
Creating the first application using Struts 2
Handling Duplicate Form Submissions in Struts
Handling multiple buttons in HTML Form in Struts
ActionErrors and ActionError in Struts
Editing struts-config.xml in a Struts Application
Configuring JDBC DataSources in Struts
DispatchAction in Struts
Using JavaScript to submit a form in Struts
Using Checkbox & Radio Tags, html:select, html:options in Struts Forms
What is Struts? Which Version of Struts to use?
Editing web.xml in a Struts Application
ForwardAction in Struts
MVC Architecture (Model 2 Architecture)
Most Emailed Articles (in last 30 days)
Struts 1 vs Struts 2
What is Struts? Which Version of Struts to use?
Tutorial on Struts Configuration File – struts-config.xml in Struts
History of Struts
What is a Model View Controller (MVC) Model?
WebWork 2 is now Apache Struts 2
Writing the first Struts application
Creating the first application using Struts 2
Is Struts the most popular web application framework for Java?
Downloading and installing Struts
Editing web.xml in a Struts Application
Editing struts-config.xml in a Struts Application
Handling multiple buttons in HTML Form in Struts
DispatchAction in Struts
Using Checkbox & Radio Tags, html:select, html:options in Struts Forms