package example; import javax.inject.Inject; import javax.enterprise.inject.Any; import javax.enterprise.inject.Instance; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class SetServlet extends HttpServlet { // service pattern private @Inject MyService _service; // resource pattern private @Inject @Blue MyResource _blueResource; private @Inject @Red MyResource _redResource; // plugin/extension pattern private @Inject @Any Instance<MyResource> _resources; // startup pattern private @Inject StartupResourceBean _startupResource; @Override public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html; charset=utf-8"); PrintWriter out = response.getWriter(); String color = request.getParameter("color"); // service and resource patterns if ("red".equals(color)) _service.setMessage(_redResource.getMessage()); else if ("blue".equals(color)) _service.setMessage(_blueResource.getMessage()); writeHeader(out); // service pattern out.println("<h2>Service Pattern</h2>"); out.println("<table class='deftable'>"); out.println("<tr><th>Binding<th>Value"); out.println("<tr><td>@Inject MyService<td>" + _service); out.println("</table>"); // resource pattern out.println("<h2>Resource Pattern</h2>"); out.println("<table class='deftable'>"); out.println("<tr><th>Binding<th>Value"); out.println("<tr><td>@Red MyResource<td>" + _redResource); out.println("<tr><td>@Blue MyResource<td>" + _blueResource); out.println("</table>"); // plugin/extension pattern out.println("<h2>Plugin/Extension Pattern</h2>"); out.println("<ol>"); for (MyResource resource : _resources) { out.println("<li>" + resource); } out.println("</ol>"); // startup pattern out.println("<h2>Startup Pattern</h2>"); out.println("<table class='deftable'>"); out.println("<tr><th>Binding<th>Value"); out.println("<tr><td>@Inject StartupResourceBean<td>" + _startupResource); out.println("</table>"); writeFooter(out); } private void writeHeader(PrintWriter out) throws IOException { out.println("<title>CanDI Pattern Tutorial: SetServlet</title>"); out.println("<head><link rel='STYLESHEET' type='text/css' href='../../css/default.css'/></head>"); out.println("<div class='breadcrumb'>"); out.println(" <a href='../../'>docs</a>"); out.println(" / <a href='../'>examples</a>"); out.println(" / <a href='index.xtp'>CanDI pattern tutorial</a>"); out.println("</div>"); out.println("<h1>CanDI Pattern Tutorial: SetServlet</h1>"); out.println("<p>The SetServlet demonstrates the four Java Injection"); out.println("patterns by injecting the services and resources and"); out.println("displaying their values in tables."); out.println("<p>Click on the 'SetServlet blue' link, the"); out.println("'SetServlet red' link, and the 'SetServlet' link "); out.println("to check that both servlets share the same MyService"); out.println("instance"); out.println("<h2>Demo Links</h2>"); out.println("<ul>"); out.println("<li><a href='set?color=blue'>SetServlet blue (/set?color=blue)</a></li>"); out.println("<li><a href='set?color=red'>SetServlet red (/set?color=red)</a></li>"); out.println("<li><a href='get'>GetServlet (/get)</a></li>"); out.println("<li><a href='index.jsp'>index.jsp</a></li>"); out.println("<li><a href='index.php'>index.php</a></li>"); out.println("<li><a href='index.xtp'>CanDI pattern tutorial</a></li>"); out.println("</ul>"); } private void writeFooter(PrintWriter out) throws IOException { out.println("<h2>Demo Architecture</h2>"); out.println("<img src='../../images/ioc-binding.png'>"); out.println("<h2>SetServlet Code</h2>"); out.println("<div class='example'><pre>"); out.println("public class SetServlet extends HttpServlet {"); out.println(" // service pattern"); out.println(" private @Inject MyService _service;"); out.println(); out.println(" // resource pattern"); out.println(" private @Red MyResource _redService;"); out.println(" private @Blue MyResource _blueService;"); out.println(); out.println(" // plugin/extension pattern"); out.println(" private @Any Instance<MyResource> _resources;"); out.println(); out.println(" // startup pattern"); out.println(" private @Inject StartupResourceBean _startupResource;"); out.println(); out.println(" ..."); out.println("}"); out.println("</pre></div>"); } }