Skip to content

Commit b45cc1e

Browse files
committedMar 4, 2012
Added convenience methods for grabbing references to Config and TemplateRenderer.
1 parent 06249de commit b45cc1e

File tree

3 files changed

+44
-9
lines changed

3 files changed

+44
-9
lines changed
 

‎.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
*.swp
2+
.DS_Store
23
/.settings
34
/.classpath
45
/.project

‎README.md

+8-5
Original file line numberDiff line numberDiff line change
@@ -602,16 +602,17 @@ import com.papercut.silken.Config;
602602
Config config = (Config) getServletContext().getAttribute("silken.config");
603603
config.setLocaleResolver(new MyLocaleResolver());
604604
```
605-
606605
A logical place to perform this initalization would be in a startup servlet's
607-
init method.
606+
init method. It is also possible to access the ``Config`` class using the
607+
convenience method: ``SilkenServlet.getConfig()``.
608608

609609
##Accessing the Template Renderer (Advanced)
610610

611611
It's possible for non-servlet request code to access Silken's template
612612
rendering service. For example you may have a service that generates template
613-
emails. By using Silken's ``TemplateRenderer`` server, this email generation
614-
code can benefit from the same template structure, caching layer, etc.
613+
emails. By using Silken's ``TemplateRenderer`` service, your template email
614+
generation code can benefit from the same template structure, caching layer,
615+
etc. Example usage:
615616

616617
```java
617618
Map<String, String> model = ImmutableMap.of("username", username
@@ -620,10 +621,12 @@ Map<String, String> model = ImmutableMap.of("username", username
620621
TemplateRenderer renderer = (TemplateRenderer) context.getAttribute("silken.templateRenderer");
621622

622623
String emailText = renderer.render("email.lostPassword", model);
623-
624624
myEmailService.sendEmail(emailAddress, emailText);
625625
```
626626

627+
It is also possible to access the ``TemplateRenderer`` using the convenience
628+
method: ``SilkenServlet.getTemplateRenderer()``.
629+
627630
##Supported Environments
628631

629632
Silken will run in any standard Servlet hosting environment, including [Google

‎src/main/java/com/papercut/silken/SilkenServlet.java

+35-4
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@
8585
* @author chris
8686
*/
8787
public class SilkenServlet extends HttpServlet {
88+
89+
private static volatile SilkenServlet s_instance;
8890

8991
private static final long serialVersionUID = 1L;
9092

@@ -99,10 +101,6 @@ public class SilkenServlet extends HttpServlet {
99101

100102
private final TemplateRenderer templateRenderer = new TemplateRenderer(config);
101103

102-
public Config getConfig() {
103-
return config;
104-
}
105-
106104
@Override
107105
public void init(ServletConfig servletConfig) throws ServletException {
108106
super.init(servletConfig);
@@ -205,6 +203,8 @@ public void init(ServletConfig servletConfig) throws ServletException {
205203
}
206204
}
207205
}
206+
207+
s_instance = this;
208208
}
209209

210210
@Override
@@ -344,4 +344,35 @@ private boolean isValueFalse(String value) {
344344
return (value.startsWith("f") || value.equals("0") || value.startsWith("n"));
345345
}
346346

347+
/**
348+
* Advanced: A convenience method to get a reference to the currently loaded SilkenServlet. Use this method with
349+
* care. It assumes only one instance if the SilkenServlet is loaded in your server's context.
350+
*
351+
* @return A reference to the currently loaded SilkenServlet.
352+
*/
353+
public static SilkenServlet getInstance() {
354+
if (s_instance == null) throw new IllegalStateException("The Silken Servlet is not yet initialized/loaded!");
355+
return s_instance;
356+
}
357+
358+
/**
359+
* Advanced: A convenience method to get a reference to the currently loaded SilkenServlet's Config class. Use this
360+
* method with care. Where possible obtain this reference from the "silken.config" servlet context attribute.
361+
*
362+
* @return A reference to the currently loaded SilkenServet's Config class.
363+
*/
364+
public static Config getConfig() {
365+
return getInstance().config;
366+
}
367+
368+
/**
369+
* Advanced: A convenience method to get a reference to the currently loaded TemplateRender. Use this method with
370+
* care. Where possible obtain this reference from the "silken.templateRenderer" servlet context attribute.
371+
*
372+
* @return A reference to the currently loaded TemplateRenderer hosted by Silken.
373+
*/
374+
public static TemplateRenderer getTemplateRenderer() {
375+
return getInstance().templateRenderer;
376+
}
377+
347378
}

0 commit comments

Comments
 (0)
Please sign in to comment.