Modified: mina/sandbox/asyncweb/core/src/test/java/org/safehaus/asyncweb/service/filter/resolver/SimplePrefixResolverTest.java URL: http://svn.apache.org/viewvc/mina/sandbox/asyncweb/core/src/test/java/org/safehaus/asyncweb/service/filter/resolver/SimplePrefixResolverTest.java?rev=592337&r1=592336&r2=592337&view=diff ============================================================================== --- mina/sandbox/asyncweb/core/src/test/java/org/safehaus/asyncweb/service/filter/resolver/SimplePrefixResolverTest.java (original) +++ mina/sandbox/asyncweb/core/src/test/java/org/safehaus/asyncweb/service/filter/resolver/SimplePrefixResolverTest.java Tue Nov 6 00:59:36 2007 @@ -31,68 +31,71 @@ /** * Tests <code>SimplePrefixResolver</code> - * + * * @author irvingd * */ public class SimplePrefixResolverTest extends TestCase { - private SimplePrefixResolver resolver; - - public SimplePrefixResolverTest(String name) { - super (name); - } - - protected void setUp() { - resolver = new SimplePrefixResolver(); - } - - /** - * Tests that if no prefix is configured, the request uri is - * returned as the resolved service name - */ - public void testNoPrefixPassThrough() throws Exception { - assertResolvedValue("a", "a"); - assertResolvedValue("some/service/Name", "some/service/Name"); - assertResolvedValue("", ""); - assertResolvedValue(null, null); - } - - /** - * Tests that no resolution is made if a prefix is configured and the - * request uri does not start with this prefix - */ - public void testPrefixNoMatch() throws Exception { - resolver.setUriPrefix("prefix/"); - assertResolvedValue("a", null); - assertResolvedValue("/prefix/x", null); - assertResolvedValue("", null); - assertResolvedValue(null, null); - } - - /** - * Tests that a resolution is made if a prefix is configured, and the - * request uri matches the prefix - */ - public void testPrefixMatch() throws Exception { - resolver.setUriPrefix("prefix/"); - assertResolvedValue("prefix/a", "a"); - assertResolvedValue("prefix/a/b", "a/b"); - assertResolvedValue("prefix/", ""); - } - - private void assertResolvedValue(String uri, String expected) throws Exception { - HttpRequest request = createRequestForURI(uri); - String resolved = resolver.resolveService(request); - assertEquals("Unexpected service name", expected, resolved); - } - - private HttpRequest createRequestForURI(String uri) throws URISyntaxException { - MutableHttpRequest req = new DefaultHttpRequest(); - if (uri != null) { - req.setRequestUri(new URI(uri)); - } - return req; - } - + private SimplePrefixResolver resolver; + + public SimplePrefixResolverTest(String name) { + super(name); + } + + @Override + protected void setUp() { + resolver = new SimplePrefixResolver(); + } + + /** + * Tests that if no prefix is configured, the request uri is + * returned as the resolved service name + */ + public void testNoPrefixPassThrough() throws Exception { + assertResolvedValue("a", "a"); + assertResolvedValue("some/service/Name", "some/service/Name"); + assertResolvedValue("", ""); + assertResolvedValue(null, null); + } + + /** + * Tests that no resolution is made if a prefix is configured and the + * request uri does not start with this prefix + */ + public void testPrefixNoMatch() throws Exception { + resolver.setUriPrefix("prefix/"); + assertResolvedValue("a", null); + assertResolvedValue("/prefix/x", null); + assertResolvedValue("", null); + assertResolvedValue(null, null); + } + + /** + * Tests that a resolution is made if a prefix is configured, and the + * request uri matches the prefix + */ + public void testPrefixMatch() throws Exception { + resolver.setUriPrefix("prefix/"); + assertResolvedValue("prefix/a", "a"); + assertResolvedValue("prefix/a/b", "a/b"); + assertResolvedValue("prefix/", ""); + } + + private void assertResolvedValue(String uri, String expected) + throws Exception { + HttpRequest request = createRequestForURI(uri); + String resolved = resolver.resolveService(request); + assertEquals("Unexpected service name", expected, resolved); + } + + private HttpRequest createRequestForURI(String uri) + throws URISyntaxException { + MutableHttpRequest req = new DefaultHttpRequest(); + if (uri != null) { + req.setRequestUri(new URI(uri)); + } + return req; + } + }
Modified: mina/sandbox/asyncweb/core/src/test/java/org/safehaus/asyncweb/util/LinkedPermitIssuerTest.java URL: http://svn.apache.org/viewvc/mina/sandbox/asyncweb/core/src/test/java/org/safehaus/asyncweb/util/LinkedPermitIssuerTest.java?rev=592337&r1=592336&r2=592337&view=diff ============================================================================== --- mina/sandbox/asyncweb/core/src/test/java/org/safehaus/asyncweb/util/LinkedPermitIssuerTest.java (original) +++ mina/sandbox/asyncweb/core/src/test/java/org/safehaus/asyncweb/util/LinkedPermitIssuerTest.java Tue Nov 6 00:59:36 2007 @@ -26,159 +26,163 @@ /** * Tests <code>LinkedPermitIssuer</code> - * + * * @author irvingd * */ public class LinkedPermitIssuerTest extends TestCase { - private static final int LIFETIME = 100; - - private LinkedPermitIssuer issuer; - private MockListener listener; - - protected void setUp() throws Exception { - issuer = new LinkedPermitIssuer(LIFETIME); - listener = new MockListener(); - } - - protected void tearDown() throws Exception { - issuer.close(); - } - - /** - * Tests that we can issue permits - */ - public void testAddPermits() { - TimedPermit permit1 = issuer.issuePermit("1"); - assertNotNull(permit1); - TimedPermit permit2 = issuer.issuePermit("2"); - assertNotNull(permit2); - assertNotSame(permit1, permit2); - } - - /** - * Tests that if we cancel a permit: - * <ul> - * <li>We are informed that the permit has been successfully cancelled on the - * first cancellation</li> - * <li>A subsequent attempt to cancel the permit indicates that no further - * cancellation took place</li> - * </ul> - */ - public void testCancelPermit() { - TimedPermit permit = issuer.issuePermit("permit"); - assertTrue("Expected cancellation", permit.cancel()); - assertFalse("Unexpected calcellation", permit.cancel()); - } - - /** - * Tests that if we cancel a permit, no expiration notification is fired - * for it - */ - public void testCancelAbortsExpiry() { - registerMockListener(); - TimedPermit permit = issuer.issuePermit("permit"); - assertTrue("Expected cancellation", permit.cancel()); - listener.validate(LIFETIME * 2); - } - - /** - * Tests that closing the issuer aborts expiry notifications - */ - public void testCloseAbortsExpiry() { - registerMockListener(); - issuer.issuePermit("permit"); - issuer.close(); - listener.validate(LIFETIME * 2); - } - - /** - * Tests that renewing a permit causes its lifetime to be extended - */ - public void testRenewalSingle() { - registerMockListener(); - TimedPermit permit = issuer.issuePermit("permit"); - listener.validate(LIFETIME / 2); - permit.renew(); - listener.validate((3 * LIFETIME) / 4); - listener.addExpectedExpiration("permit"); - listener.validate(LIFETIME / 2); - } - - /** - * Obtains multiple entries from the issuer. - * One entry has its lifetime renewed. - * We check that the entries expire when expected. - */ - public void testRenewalMulti() { - registerMockListener(); - issuer.issuePermit("permit1"); - TimedPermit permit2 = issuer.issuePermit("permit2"); - issuer.issuePermit("permit3"); - listener.validate(LIFETIME / 2); - listener.addExpectedExpiration("permit1"); - listener.addExpectedExpiration("permit3"); - permit2.renew(); - listener.validate((3 * LIFETIME) / 4); - listener.addExpectedExpiration("permit2"); - listener.validate(LIFETIME / 2); - } - - /** - * Tests that we can renew the head entry, and then subsequently renew - * a following entry - */ - public void testRenewHeadFirst() { - TimedPermit permit1 = issuer.issuePermit("permit1"); - TimedPermit permit2 = issuer.issuePermit("permit2"); - permit1.renew(); - permit2.renew(); - } - - private void registerMockListener() { - issuer.addPermitExpirationListener(listener); - } - - /** - * A mock <code>PermitExpirationListener</code> - * - * @author irvingd - */ - private class MockListener implements PermitExpirationListener { - - private List<Object> expectedToExpire = new ArrayList<Object>(); - private List<Object> expired = new ArrayList<Object>(); - - public void permitExpired(Object o) { - expired.add(o); - } - - void addExpectedExpiration(Object o) { - expectedToExpire.add(o); - } - - /** - * Validates that exactly those entries expected to expire have expred. - */ - void validate() { - assertEquals(expectedToExpire, expired); - } - - /** - * Performs validation after a specified peroid - * - * @param delay The delay (in ms) - */ - void validate(long delay) { - try { - Thread.sleep(delay); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - validate(); - } - - } - + private static final int LIFETIME = 100; + + private LinkedPermitIssuer issuer; + + private MockListener listener; + + @Override + protected void setUp() throws Exception { + issuer = new LinkedPermitIssuer(LIFETIME); + listener = new MockListener(); + } + + @Override + protected void tearDown() throws Exception { + issuer.close(); + } + + /** + * Tests that we can issue permits + */ + public void testAddPermits() { + TimedPermit permit1 = issuer.issuePermit("1"); + assertNotNull(permit1); + TimedPermit permit2 = issuer.issuePermit("2"); + assertNotNull(permit2); + assertNotSame(permit1, permit2); + } + + /** + * Tests that if we cancel a permit: + * <ul> + * <li>We are informed that the permit has been successfully cancelled on the + * first cancellation</li> + * <li>A subsequent attempt to cancel the permit indicates that no further + * cancellation took place</li> + * </ul> + */ + public void testCancelPermit() { + TimedPermit permit = issuer.issuePermit("permit"); + assertTrue("Expected cancellation", permit.cancel()); + assertFalse("Unexpected calcellation", permit.cancel()); + } + + /** + * Tests that if we cancel a permit, no expiration notification is fired + * for it + */ + public void testCancelAbortsExpiry() { + registerMockListener(); + TimedPermit permit = issuer.issuePermit("permit"); + assertTrue("Expected cancellation", permit.cancel()); + listener.validate(LIFETIME * 2); + } + + /** + * Tests that closing the issuer aborts expiry notifications + */ + public void testCloseAbortsExpiry() { + registerMockListener(); + issuer.issuePermit("permit"); + issuer.close(); + listener.validate(LIFETIME * 2); + } + + /** + * Tests that renewing a permit causes its lifetime to be extended + */ + public void testRenewalSingle() { + registerMockListener(); + TimedPermit permit = issuer.issuePermit("permit"); + listener.validate(LIFETIME / 2); + permit.renew(); + listener.validate(3 * LIFETIME / 4); + listener.addExpectedExpiration("permit"); + listener.validate(LIFETIME / 2); + } + + /** + * Obtains multiple entries from the issuer. + * One entry has its lifetime renewed. + * We check that the entries expire when expected. + */ + public void testRenewalMulti() { + registerMockListener(); + issuer.issuePermit("permit1"); + TimedPermit permit2 = issuer.issuePermit("permit2"); + issuer.issuePermit("permit3"); + listener.validate(LIFETIME / 2); + listener.addExpectedExpiration("permit1"); + listener.addExpectedExpiration("permit3"); + permit2.renew(); + listener.validate(3 * LIFETIME / 4); + listener.addExpectedExpiration("permit2"); + listener.validate(LIFETIME / 2); + } + + /** + * Tests that we can renew the head entry, and then subsequently renew + * a following entry + */ + public void testRenewHeadFirst() { + TimedPermit permit1 = issuer.issuePermit("permit1"); + TimedPermit permit2 = issuer.issuePermit("permit2"); + permit1.renew(); + permit2.renew(); + } + + private void registerMockListener() { + issuer.addPermitExpirationListener(listener); + } + + /** + * A mock <code>PermitExpirationListener</code> + * + * @author irvingd + */ + private class MockListener implements PermitExpirationListener { + + private List<Object> expectedToExpire = new ArrayList<Object>(); + + private List<Object> expired = new ArrayList<Object>(); + + public void permitExpired(Object o) { + expired.add(o); + } + + void addExpectedExpiration(Object o) { + expectedToExpire.add(o); + } + + /** + * Validates that exactly those entries expected to expire have expred. + */ + void validate() { + assertEquals(expectedToExpire, expired); + } + + /** + * Performs validation after a specified peroid + * + * @param delay The delay (in ms) + */ + void validate(long delay) { + try { + Thread.sleep(delay); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + validate(); + } + + } + } Modified: mina/sandbox/asyncweb/core/src/test/java/org/safehaus/asyncweb/util/MockNextFilter.java URL: http://svn.apache.org/viewvc/mina/sandbox/asyncweb/core/src/test/java/org/safehaus/asyncweb/util/MockNextFilter.java?rev=592337&r1=592336&r2=592337&view=diff ============================================================================== --- mina/sandbox/asyncweb/core/src/test/java/org/safehaus/asyncweb/util/MockNextFilter.java (original) +++ mina/sandbox/asyncweb/core/src/test/java/org/safehaus/asyncweb/util/MockNextFilter.java Tue Nov 6 00:59:36 2007 @@ -26,30 +26,30 @@ /** * A simple <code>InvocationChain</code> which counts the * number of invocations made - * + * * @author irvingd * */ public class MockNextFilter implements NextFilter { - private int invokeCount; - - /** - * Simply updates the invoke count for this chain - */ - public void invoke() { - ++invokeCount; - } - - /** - * Asserts that a specified number of invocations have - * been made - * - * @param expected The expected invocation count - */ - public void assertInvocationCount(int expected) { - Assert.assertEquals("Unexpected invocation count", - expected, invokeCount); - } + private int invokeCount; + + /** + * Simply updates the invoke count for this chain + */ + public void invoke() { + ++invokeCount; + } + + /** + * Asserts that a specified number of invocations have + * been made + * + * @param expected The expected invocation count + */ + public void assertInvocationCount(int expected) { + Assert.assertEquals("Unexpected invocation count", expected, + invokeCount); + } } Modified: mina/sandbox/asyncweb/example/src/main/java/org/safehaus/asyncweb/example/cookie/CookieExample.java URL: http://svn.apache.org/viewvc/mina/sandbox/asyncweb/example/src/main/java/org/safehaus/asyncweb/example/cookie/CookieExample.java?rev=592337&r1=592336&r2=592337&view=diff ============================================================================== --- mina/sandbox/asyncweb/example/src/main/java/org/safehaus/asyncweb/example/cookie/CookieExample.java (original) +++ mina/sandbox/asyncweb/example/src/main/java/org/safehaus/asyncweb/example/cookie/CookieExample.java Tue Nov 6 00:59:36 2007 @@ -35,86 +35,91 @@ public class CookieExample implements HttpService { - private static final String ADD_COOKIE_NAME = "cookieName"; - private static final String ADD_COOKIE_VALUE = "cookieValue"; - private static final String ADD_COOKIE_PATH = "cookiePath"; - private static final String ADD_COOKIE_EXPIRY = "cookieExpiry"; - - private String form; - - public void handleRequest(HttpServiceContext context) throws Exception { - MutableHttpResponse response = new DefaultHttpResponse(); - - StringWriter buf = new StringWriter(); - PrintWriter writer = new PrintWriter(buf); - writer.println("<html><body>"); - writer.println(form); - MutableCookie addedCookie = addCookieIfPresent(context, response); - if (addedCookie != null) { - writeAddedCookie(addedCookie, writer); - } - writer.println("</body></html>"); - writer.flush(); - - IoBuffer bb = IoBuffer.allocate(1024); - bb.setAutoExpand(true); - bb.putString(buf.toString(), Charset.forName("UTF-8").newEncoder()); - bb.flip(); - response.setContent(new ByteBufferContent(bb)); - - context.commitResponse(response); - } - - /** - * Sets the string containing our cookie form - * - * @param form The form string - */ - public void setForm(String form) { - this.form = form; - } - - public void start() { - // Dont care - } - - public void stop() { - // Dont care - } - - private void writeAddedCookie(MutableCookie cookie, PrintWriter writer) { - writer.println("<b><i>Cookie Added:</i></b>"); - writer.println(cookie); - } - - private MutableCookie addCookieIfPresent(HttpServiceContext context, MutableHttpResponse response) { - HttpRequest request = context.getRequest(); - String name = getParamValue(request, ADD_COOKIE_NAME); - String value = getParamValue(request, ADD_COOKIE_VALUE); - if (name == null || value == null) { - return null; - } - MutableCookie cookie = new DefaultCookie(name); - cookie.setValue(value); - - if (getParamValue(request, ADD_COOKIE_PATH) != null) { - cookie.setPath(request.getParameter(ADD_COOKIE_PATH)); - } - if (getParamValue(request, ADD_COOKIE_EXPIRY) != null) { - try { - int expiry = Integer.parseInt(request.getParameter(ADD_COOKIE_EXPIRY)); - cookie.setMaxAge(expiry); - } catch (NumberFormatException e) { - // ignore expiry - } - } - response.addCookie(cookie); - return cookie; - } - - private static final String getParamValue(HttpRequest request, String name) { - String value = request.getParameter(name); - return value == null || "".equals(value )? null : value; - } - + private static final String ADD_COOKIE_NAME = "cookieName"; + + private static final String ADD_COOKIE_VALUE = "cookieValue"; + + private static final String ADD_COOKIE_PATH = "cookiePath"; + + private static final String ADD_COOKIE_EXPIRY = "cookieExpiry"; + + private String form; + + public void handleRequest(HttpServiceContext context) throws Exception { + MutableHttpResponse response = new DefaultHttpResponse(); + + StringWriter buf = new StringWriter(); + PrintWriter writer = new PrintWriter(buf); + writer.println("<html><body>"); + writer.println(form); + MutableCookie addedCookie = addCookieIfPresent(context, response); + if (addedCookie != null) { + writeAddedCookie(addedCookie, writer); + } + writer.println("</body></html>"); + writer.flush(); + + IoBuffer bb = IoBuffer.allocate(1024); + bb.setAutoExpand(true); + bb.putString(buf.toString(), Charset.forName("UTF-8").newEncoder()); + bb.flip(); + response.setContent(new ByteBufferContent(bb)); + + context.commitResponse(response); + } + + /** + * Sets the string containing our cookie form + * + * @param form The form string + */ + public void setForm(String form) { + this.form = form; + } + + public void start() { + // Dont care + } + + public void stop() { + // Dont care + } + + private void writeAddedCookie(MutableCookie cookie, PrintWriter writer) { + writer.println("<b><i>Cookie Added:</i></b>"); + writer.println(cookie); + } + + private MutableCookie addCookieIfPresent(HttpServiceContext context, + MutableHttpResponse response) { + HttpRequest request = context.getRequest(); + String name = getParamValue(request, ADD_COOKIE_NAME); + String value = getParamValue(request, ADD_COOKIE_VALUE); + if (name == null || value == null) { + return null; + } + MutableCookie cookie = new DefaultCookie(name); + cookie.setValue(value); + + if (getParamValue(request, ADD_COOKIE_PATH) != null) { + cookie.setPath(request.getParameter(ADD_COOKIE_PATH)); + } + if (getParamValue(request, ADD_COOKIE_EXPIRY) != null) { + try { + int expiry = Integer.parseInt(request + .getParameter(ADD_COOKIE_EXPIRY)); + cookie.setMaxAge(expiry); + } catch (NumberFormatException e) { + // ignore expiry + } + } + response.addCookie(cookie); + return cookie; + } + + private static final String getParamValue(HttpRequest request, String name) { + String value = request.getParameter(name); + return value == null || "".equals(value) ? null : value; + } + } Modified: mina/sandbox/asyncweb/example/src/main/java/org/safehaus/asyncweb/example/helloworld/HelloWorldHttpService.java URL: http://svn.apache.org/viewvc/mina/sandbox/asyncweb/example/src/main/java/org/safehaus/asyncweb/example/helloworld/HelloWorldHttpService.java?rev=592337&r1=592336&r2=592337&view=diff ============================================================================== --- mina/sandbox/asyncweb/example/src/main/java/org/safehaus/asyncweb/example/helloworld/HelloWorldHttpService.java (original) +++ mina/sandbox/asyncweb/example/src/main/java/org/safehaus/asyncweb/example/helloworld/HelloWorldHttpService.java Tue Nov 6 00:59:36 2007 @@ -37,130 +37,133 @@ import org.safehaus.asyncweb.service.HttpService; import org.safehaus.asyncweb.service.HttpServiceContext; - /** * A simple <code>HttpService</code> which sends "hello world" * responses to every request. - * + * * Note that normally we wouldn't be generating html directly in a service :o) - * + * * @author irvingd * */ public class HelloWorldHttpService implements HttpService { - private String message = "Hello from AsyncWeb!!"; - - /** - * Sends the configured message as an HTTP response - */ - public void handleRequest(HttpServiceContext context) throws Exception { - MutableHttpResponse response = new DefaultHttpResponse(); - - StringWriter buf = new StringWriter(); - PrintWriter writer = new PrintWriter(buf); - writer.println("<html><body><b>Your message of the day:</b><br/><br/>"); - writer.println("<h2><i>" + message + "</h2></i><br/><br/>"); - writeHeaders(context.getRequest(), writer); - writer.println("<br/>"); - writeParameters(context.getRequest(), writer); - writer.println("<br/>"); - writeCookies(context.getRequest(), writer); - writer.flush(); - - IoBuffer bb = IoBuffer.allocate(1024); - bb.setAutoExpand(true); - bb.putString(buf.toString(), Charset.forName("UTF-8").newEncoder()); - bb.flip(); - response.setContent(new ByteBufferContent(bb)); - - response.setHeader("Pragma", "no-cache"); - response.setHeader("Cache-Control", "no-cache"); - response.setStatus(HttpResponseStatus.OK); - - - context.commitResponse(response); - } - - /** - * Sets the message to return in responses. - * This is called for you by the framework! - * - * @param message The message - */ - public void setMessage(String message) { - this.message = message; - } - - /** - * Writes headers from the request to the specified writer - * - * @param request The request - * @param writer The writer - */ - private void writeHeaders(HttpRequest request, PrintWriter writer) { - writer.println("You sent these headers with your request:<br/>"); - writer.println("<ul>"); - for (String headerName: request.getHeaders().keySet()) { - String headerValue = request.getHeader(headerName); - writer.print("<li>" + headerName + " = " + headerValue + "</li>"); - } - writer.println("</ul>"); - } - - /** - * Writes cookies from the request to the specified writer - * - * @param request The request - * @param writer The writer - */ - private void writeCookies(HttpRequest request, PrintWriter writer) { - Collection<Cookie> cookies = request.getCookies(); - if (!cookies.isEmpty()) { - writer.println("You sent these cookies with your request:<br/>"); - writer.println("<ul>"); - for (Cookie cookie: cookies) { - writer.println("<li>Name = " + cookie.getName() + " Value = " + cookie.getValue()); - writer.println(" Path = " + cookie.getPath() + " Version = " + cookie.getVersion() + "</li>"); - } - writer.println("</ul>"); - } - } - - /** - * Writes request parameters to the specified writer - * - * @param request The request - * @param writer The writer - */ - private void writeParameters(HttpRequest request, PrintWriter writer) { - if (request.getParameters().size() > 0) { - writer.println("You sent these parameters with your request:<br/><br/>"); - writer.println("<ul>"); - - for (Map.Entry<String, List<String>> entry: request.getParameters().entrySet()) { - writer.println("<li>"); - writer.print("'" + entry.getKey() + "' = "); - for (Iterator<String> i = entry.getValue().iterator(); i.hasNext();) { - String value = i.next(); - writer.print("'" + value + "'"); - if (i.hasNext()) { - writer.print(", "); - } - } - writer.println("</li/>"); - } - - writer.println("</ul>"); - } - } - - public void start() { - // Dont care - } - - public void stop() { - // Dont care - } + private String message = "Hello from AsyncWeb!!"; + + /** + * Sends the configured message as an HTTP response + */ + public void handleRequest(HttpServiceContext context) throws Exception { + MutableHttpResponse response = new DefaultHttpResponse(); + + StringWriter buf = new StringWriter(); + PrintWriter writer = new PrintWriter(buf); + writer.println("<html><body><b>Your message of the day:</b><br/><br/>"); + writer.println("<h2><i>" + message + "</h2></i><br/><br/>"); + writeHeaders(context.getRequest(), writer); + writer.println("<br/>"); + writeParameters(context.getRequest(), writer); + writer.println("<br/>"); + writeCookies(context.getRequest(), writer); + writer.flush(); + + IoBuffer bb = IoBuffer.allocate(1024); + bb.setAutoExpand(true); + bb.putString(buf.toString(), Charset.forName("UTF-8").newEncoder()); + bb.flip(); + response.setContent(new ByteBufferContent(bb)); + + response.setHeader("Pragma", "no-cache"); + response.setHeader("Cache-Control", "no-cache"); + response.setStatus(HttpResponseStatus.OK); + + context.commitResponse(response); + } + + /** + * Sets the message to return in responses. + * This is called for you by the framework! + * + * @param message The message + */ + public void setMessage(String message) { + this.message = message; + } + + /** + * Writes headers from the request to the specified writer + * + * @param request The request + * @param writer The writer + */ + private void writeHeaders(HttpRequest request, PrintWriter writer) { + writer.println("You sent these headers with your request:<br/>"); + writer.println("<ul>"); + for (String headerName : request.getHeaders().keySet()) { + String headerValue = request.getHeader(headerName); + writer.print("<li>" + headerName + " = " + headerValue + "</li>"); + } + writer.println("</ul>"); + } + + /** + * Writes cookies from the request to the specified writer + * + * @param request The request + * @param writer The writer + */ + private void writeCookies(HttpRequest request, PrintWriter writer) { + Collection<Cookie> cookies = request.getCookies(); + if (!cookies.isEmpty()) { + writer.println("You sent these cookies with your request:<br/>"); + writer.println("<ul>"); + for (Cookie cookie : cookies) { + writer.println("<li>Name = " + cookie.getName() + " Value = " + + cookie.getValue()); + writer.println(" Path = " + cookie.getPath() + " Version = " + + cookie.getVersion() + "</li>"); + } + writer.println("</ul>"); + } + } + + /** + * Writes request parameters to the specified writer + * + * @param request The request + * @param writer The writer + */ + private void writeParameters(HttpRequest request, PrintWriter writer) { + if (request.getParameters().size() > 0) { + writer + .println("You sent these parameters with your request:<br/><br/>"); + writer.println("<ul>"); + + for (Map.Entry<String, List<String>> entry : request + .getParameters().entrySet()) { + writer.println("<li>"); + writer.print("'" + entry.getKey() + "' = "); + for (Iterator<String> i = entry.getValue().iterator(); i + .hasNext();) { + String value = i.next(); + writer.print("'" + value + "'"); + if (i.hasNext()) { + writer.print(", "); + } + } + writer.println("</li/>"); + } + + writer.println("</ul>"); + } + } + + public void start() { + // Dont care + } + + public void stop() { + // Dont care + } } Modified: mina/sandbox/asyncweb/example/src/main/java/org/safehaus/asyncweb/example/lightweight/HttpProtocolHandler.java URL: http://svn.apache.org/viewvc/mina/sandbox/asyncweb/example/src/main/java/org/safehaus/asyncweb/example/lightweight/HttpProtocolHandler.java?rev=592337&r1=592336&r2=592337&view=diff ============================================================================== --- mina/sandbox/asyncweb/example/src/main/java/org/safehaus/asyncweb/example/lightweight/HttpProtocolHandler.java (original) +++ mina/sandbox/asyncweb/example/src/main/java/org/safehaus/asyncweb/example/lightweight/HttpProtocolHandler.java Tue Nov 6 00:59:36 2007 @@ -40,105 +40,106 @@ import org.safehaus.asyncweb.util.HttpHeaderConstants; public class HttpProtocolHandler implements IoHandler { - private static final int CONTENT_PADDING = 0; // 101 + private static final int CONTENT_PADDING = 0; // 101 - private final Map<Integer, IoBuffer> buffers = new ConcurrentHashMap<Integer, IoBuffer>(); + private final Map<Integer, IoBuffer> buffers = new ConcurrentHashMap<Integer, IoBuffer>(); - private final Timer timer; + private final Timer timer; - public HttpProtocolHandler() { - timer = new Timer(true); - } - - public void exceptionCaught(IoSession session, Throwable cause) - throws Exception { - if (!(cause instanceof IOException)) { - IoSessionLogger.getLogger(session).warn(cause); - } - session.close(); - } - - public void messageReceived(IoSession session, Object message) - throws Exception { - HttpRequest req = (HttpRequest) message; - String path = req.getRequestUri().getPath(); - - MutableHttpResponse res; - if (path.startsWith("/size/")) { - doDataResponse(session, req); - } else if (path.startsWith("/delay/")) { - doAsynchronousDelayedResponse(session, req); - } else if (path.startsWith("/adelay/")) { - doAsynchronousDelayedResponse(session, req); - } else { - res = new DefaultHttpResponse(); - res.setStatus(HttpResponseStatus.OK); - writeResponse(session, req, res); - } - } - - private void writeResponse(IoSession session, HttpRequest req, - MutableHttpResponse res) { - res.normalize(req); - WriteFuture future = session.write(res); - if (!HttpHeaderConstants.VALUE_KEEP_ALIVE.equalsIgnoreCase(res - .getHeader(HttpHeaderConstants.KEY_CONNECTION))) { - future.addListener(IoFutureListener.CLOSE); - } - } - - private void doDataResponse(IoSession session, HttpRequest req) { - String path = req.getRequestUri().getPath(); - int size = Integer.parseInt(path.substring(path.lastIndexOf('/') + 1)) + CONTENT_PADDING; - - MutableHttpResponse res = new DefaultHttpResponse(); - res.setStatus(HttpResponseStatus.OK); - res.setHeader("ETag", "W/\"" + size + "-1164091960000\""); - res.setHeader("Last-Modified", "Tue, 31 Nov 2006 06:52:40 GMT"); - - IoBuffer buf = buffers.get(size); - if (buf == null) { - buf = IoBuffer.allocate(size); - buffers.put(size, buf); - } - - res.setContent(new ByteBufferContent(buf.duplicate())); - writeResponse(session, req, res); - } - - private void doAsynchronousDelayedResponse(final IoSession session, - final HttpRequest req) { - String path = req.getRequestUri().getPath(); - int delay = Integer.parseInt(path.substring(path.lastIndexOf('/') + 1)); - - final MutableHttpResponse res = new DefaultHttpResponse(); - res.setStatus(HttpResponseStatus.OK); - res.setHeader("ETag", "W/\"0-1164091960000\""); - res.setHeader("Last-Modified", "Tue, 31 Nov 2006 06:52:40 GMT"); - - timer.schedule(new TimerTask() { - @Override - public void run() { + public HttpProtocolHandler() { + timer = new Timer(true); + } + + public void exceptionCaught(IoSession session, Throwable cause) + throws Exception { + if (!(cause instanceof IOException)) { + IoSessionLogger.getLogger(session).warn(cause); + } + session.close(); + } + + public void messageReceived(IoSession session, Object message) + throws Exception { + HttpRequest req = (HttpRequest) message; + String path = req.getRequestUri().getPath(); + + MutableHttpResponse res; + if (path.startsWith("/size/")) { + doDataResponse(session, req); + } else if (path.startsWith("/delay/")) { + doAsynchronousDelayedResponse(session, req); + } else if (path.startsWith("/adelay/")) { + doAsynchronousDelayedResponse(session, req); + } else { + res = new DefaultHttpResponse(); + res.setStatus(HttpResponseStatus.OK); + writeResponse(session, req, res); + } + } + + private void writeResponse(IoSession session, HttpRequest req, + MutableHttpResponse res) { + res.normalize(req); + WriteFuture future = session.write(res); + if (!HttpHeaderConstants.VALUE_KEEP_ALIVE.equalsIgnoreCase(res + .getHeader(HttpHeaderConstants.KEY_CONNECTION))) { + future.addListener(IoFutureListener.CLOSE); + } + } + + private void doDataResponse(IoSession session, HttpRequest req) { + String path = req.getRequestUri().getPath(); + int size = Integer.parseInt(path.substring(path.lastIndexOf('/') + 1)) + + CONTENT_PADDING; + + MutableHttpResponse res = new DefaultHttpResponse(); + res.setStatus(HttpResponseStatus.OK); + res.setHeader("ETag", "W/\"" + size + "-1164091960000\""); + res.setHeader("Last-Modified", "Tue, 31 Nov 2006 06:52:40 GMT"); + + IoBuffer buf = buffers.get(size); + if (buf == null) { + buf = IoBuffer.allocate(size); + buffers.put(size, buf); + } + + res.setContent(new ByteBufferContent(buf.duplicate())); writeResponse(session, req, res); - } - }, delay); - } - - public void messageSent(IoSession session, Object message) throws Exception { - } - - public void sessionClosed(IoSession session) throws Exception { - } - - public void sessionCreated(IoSession session) throws Exception { - } - - public void sessionIdle(IoSession session, IdleStatus status) - throws Exception { - session.close(); - } - - public void sessionOpened(IoSession session) throws Exception { - session.getConfig().setIdleTime(IdleStatus.BOTH_IDLE, 30); - } + } + + private void doAsynchronousDelayedResponse(final IoSession session, + final HttpRequest req) { + String path = req.getRequestUri().getPath(); + int delay = Integer.parseInt(path.substring(path.lastIndexOf('/') + 1)); + + final MutableHttpResponse res = new DefaultHttpResponse(); + res.setStatus(HttpResponseStatus.OK); + res.setHeader("ETag", "W/\"0-1164091960000\""); + res.setHeader("Last-Modified", "Tue, 31 Nov 2006 06:52:40 GMT"); + + timer.schedule(new TimerTask() { + @Override + public void run() { + writeResponse(session, req, res); + } + }, delay); + } + + public void messageSent(IoSession session, Object message) throws Exception { + } + + public void sessionClosed(IoSession session) throws Exception { + } + + public void sessionCreated(IoSession session) throws Exception { + } + + public void sessionIdle(IoSession session, IdleStatus status) + throws Exception { + session.close(); + } + + public void sessionOpened(IoSession session) throws Exception { + session.getConfig().setIdleTime(IdleStatus.BOTH_IDLE, 30); + } } Modified: mina/sandbox/asyncweb/example/src/main/java/org/safehaus/asyncweb/example/lightweight/Main.java URL: http://svn.apache.org/viewvc/mina/sandbox/asyncweb/example/src/main/java/org/safehaus/asyncweb/example/lightweight/Main.java?rev=592337&r1=592336&r2=592337&view=diff ============================================================================== --- mina/sandbox/asyncweb/example/src/main/java/org/safehaus/asyncweb/example/lightweight/Main.java (original) +++ mina/sandbox/asyncweb/example/src/main/java/org/safehaus/asyncweb/example/lightweight/Main.java Tue Nov 6 00:59:36 2007 @@ -29,27 +29,25 @@ import org.safehaus.asyncweb.codec.HttpServerCodecFactory; public class Main { - public static void main(String[] args) throws Exception { - Executor threadPool = Executors.newCachedThreadPool(); - SocketAcceptor acceptor = new NioSocketAcceptor( - Runtime.getRuntime().availableProcessors() + 1, - threadPool); + public static void main(String[] args) throws Exception { + Executor threadPool = Executors.newCachedThreadPool(); + SocketAcceptor acceptor = new NioSocketAcceptor(Runtime.getRuntime() + .availableProcessors() + 1, threadPool); - acceptor.getFilterChain().addLast( - "codec", - new ProtocolCodecFilter(new HttpServerCodecFactory())); + acceptor.getFilterChain().addLast("codec", + new ProtocolCodecFilter(new HttpServerCodecFactory())); - acceptor.setReuseAddress(true); - acceptor.getSessionConfig().setReuseAddress(true); - acceptor.getSessionConfig().setReceiveBufferSize(1024); - acceptor.getSessionConfig().setSendBufferSize(1024); - acceptor.getSessionConfig().setTcpNoDelay(true); - acceptor.getSessionConfig().setSoLinger(-1); - acceptor.setBacklog(10240); - - acceptor.setLocalAddress(new InetSocketAddress(9012)); - acceptor.setHandler(new HttpProtocolHandler()); - - acceptor.bind(); - } + acceptor.setReuseAddress(true); + acceptor.getSessionConfig().setReuseAddress(true); + acceptor.getSessionConfig().setReceiveBufferSize(1024); + acceptor.getSessionConfig().setSendBufferSize(1024); + acceptor.getSessionConfig().setTcpNoDelay(true); + acceptor.getSessionConfig().setSoLinger(-1); + acceptor.setBacklog(10240); + + acceptor.setLocalAddress(new InetSocketAddress(9012)); + acceptor.setHandler(new HttpProtocolHandler()); + + acceptor.bind(); + } } Modified: mina/sandbox/asyncweb/example/src/main/java/org/safehaus/asyncweb/example/session/SessionExample.java URL: http://svn.apache.org/viewvc/mina/sandbox/asyncweb/example/src/main/java/org/safehaus/asyncweb/example/session/SessionExample.java?rev=592337&r1=592336&r2=592337&view=diff ============================================================================== --- mina/sandbox/asyncweb/example/src/main/java/org/safehaus/asyncweb/example/session/SessionExample.java (original) +++ mina/sandbox/asyncweb/example/src/main/java/org/safehaus/asyncweb/example/session/SessionExample.java Tue Nov 6 00:59:36 2007 @@ -33,92 +33,102 @@ /** * A very simple example which demonstrates session usage - * + * * @author irvingd * */ public class SessionExample implements HttpService { - private static final String COUNT_PROPERTY = "accessCount"; - private static final String DESTROY_PARAM = "destroySession"; - - /** - * Provides a response showing some session details for the current request. - * If no session is assocaited with the request, a new session is created. - */ - public void handleRequest(HttpServiceContext context) throws Exception { - MutableHttpResponse response = new DefaultHttpResponse(); - response.setHeader("Pragma", "no-cache"); - response.setHeader("Cache-Control", "no-cache"); - - StringWriter buf = new StringWriter(); - PrintWriter writer = new PrintWriter(buf); - writer.println("<html><body>"); - if (!checkDestroy(context, writer)) { - showSessionDetails(context, writer); - createNewSessionIfRequired(context, writer); - } - writer.println("</body></html>"); - writer.flush(); - - IoBuffer bb = IoBuffer.allocate(1024); - bb.setAutoExpand(true); - bb.putString(buf.toString(), Charset.forName("UTF-8").newEncoder()); - bb.flip(); - response.setContent(new ByteBufferContent(bb)); - - context.commitResponse(response); - } - - private void showSessionDetails(HttpServiceContext context, PrintWriter writer) { - HttpSession session = context.getSession(false); - if (session != null) { - writer.println("<ul>"); - writer.println("<li>A session was retrieved for your request</li>"); - writer.println("<li>Is session attached? " + session.isAttached() + "</li>"); - writer.println("<li>Is session valid? " + session.isValid() + "</li>"); - Integer count = (Integer) session.getValue(COUNT_PROPERTY); - int newAccessCount; - if (count == null) { - writer.println("<li>This is the first time the new session has been accessed</li>"); - newAccessCount = 1; - } else { - newAccessCount = count.intValue() + 1; - writer.println("<li>The session has been accessed " + newAccessCount + " times</li>"); - } - session.setValue(COUNT_PROPERTY, new Integer(newAccessCount)); - } - } - - private void createNewSessionIfRequired(HttpServiceContext context, PrintWriter writer) { - HttpSession session = context.getSession(false); - if (session == null) { - session = context.getSession(true); - writer.println("<i>No current session was located. A new session has been created</i>"); - } - } - - private boolean checkDestroy(HttpServiceContext context, PrintWriter writer) { - boolean foundParam = false; - if (context.getRequest().containsParameter(DESTROY_PARAM)) { - foundParam = true; - HttpSession session = context.getSession(false); - if (session == null) { - writer.println("<i>There is no current session to destroy!</li>"); - } else { - session.destroy(); - writer.println("<i>The current session has been destroyed</li>"); - } - } - return foundParam; - } - - public void start() { - // Dont care - } - - public void stop() { - // Dont care - } + private static final String COUNT_PROPERTY = "accessCount"; + + private static final String DESTROY_PARAM = "destroySession"; + + /** + * Provides a response showing some session details for the current request. + * If no session is assocaited with the request, a new session is created. + */ + public void handleRequest(HttpServiceContext context) throws Exception { + MutableHttpResponse response = new DefaultHttpResponse(); + response.setHeader("Pragma", "no-cache"); + response.setHeader("Cache-Control", "no-cache"); + + StringWriter buf = new StringWriter(); + PrintWriter writer = new PrintWriter(buf); + writer.println("<html><body>"); + if (!checkDestroy(context, writer)) { + showSessionDetails(context, writer); + createNewSessionIfRequired(context, writer); + } + writer.println("</body></html>"); + writer.flush(); + + IoBuffer bb = IoBuffer.allocate(1024); + bb.setAutoExpand(true); + bb.putString(buf.toString(), Charset.forName("UTF-8").newEncoder()); + bb.flip(); + response.setContent(new ByteBufferContent(bb)); + + context.commitResponse(response); + } + + private void showSessionDetails(HttpServiceContext context, + PrintWriter writer) { + HttpSession session = context.getSession(false); + if (session != null) { + writer.println("<ul>"); + writer.println("<li>A session was retrieved for your request</li>"); + writer.println("<li>Is session attached? " + session.isAttached() + + "</li>"); + writer.println("<li>Is session valid? " + session.isValid() + + "</li>"); + Integer count = (Integer) session.getValue(COUNT_PROPERTY); + int newAccessCount; + if (count == null) { + writer + .println("<li>This is the first time the new session has been accessed</li>"); + newAccessCount = 1; + } else { + newAccessCount = count.intValue() + 1; + writer.println("<li>The session has been accessed " + + newAccessCount + " times</li>"); + } + session.setValue(COUNT_PROPERTY, new Integer(newAccessCount)); + } + } + + private void createNewSessionIfRequired(HttpServiceContext context, + PrintWriter writer) { + HttpSession session = context.getSession(false); + if (session == null) { + session = context.getSession(true); + writer + .println("<i>No current session was located. A new session has been created</i>"); + } + } + + private boolean checkDestroy(HttpServiceContext context, PrintWriter writer) { + boolean foundParam = false; + if (context.getRequest().containsParameter(DESTROY_PARAM)) { + foundParam = true; + HttpSession session = context.getSession(false); + if (session == null) { + writer + .println("<i>There is no current session to destroy!</li>"); + } else { + session.destroy(); + writer + .println("<i>The current session has been destroyed</li>"); + } + } + return foundParam; + } + + public void start() { + // Dont care + } + + public void stop() { + // Dont care + } } Modified: mina/sandbox/asyncweb/springframework/src/main/java/org/safehaus/asyncweb/integration/spring/HttpServiceLoader.java URL: http://svn.apache.org/viewvc/mina/sandbox/asyncweb/springframework/src/main/java/org/safehaus/asyncweb/integration/spring/HttpServiceLoader.java?rev=592337&r1=592336&r2=592337&view=diff ============================================================================== --- mina/sandbox/asyncweb/springframework/src/main/java/org/safehaus/asyncweb/integration/spring/HttpServiceLoader.java (original) +++ mina/sandbox/asyncweb/springframework/src/main/java/org/safehaus/asyncweb/integration/spring/HttpServiceLoader.java Tue Nov 6 00:59:36 2007 @@ -27,30 +27,30 @@ import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; - /** * Loads all <code>HttpService</code>s defined in an - * <code>ApplicationContext</code> to an associated + * <code>ApplicationContext</code> to an associated * <code>HttpServiceHandler</code> - * + * * @author irvingd */ public class HttpServiceLoader implements ApplicationContextAware { - private HttpServiceHandler handler; - - public void setHandler(HttpServiceHandler httpServiceHandler) { - this.handler = httpServiceHandler; - } - - public void setApplicationContext(ApplicationContext context) { - Map services = context.getBeansOfType(HttpService.class); - for (Iterator iter=services.entrySet().iterator(); iter.hasNext(); ) { - Map.Entry entry = (Map.Entry) iter.next(); - String serviceName = (String) entry.getKey(); - HttpService service = (HttpService) entry.getValue(); - handler.addHttpService(serviceName, service); + private HttpServiceHandler handler; + + public void setHandler(HttpServiceHandler httpServiceHandler) { + this.handler = httpServiceHandler; + } + + @SuppressWarnings("unchecked") + public void setApplicationContext(ApplicationContext context) { + Map<String, HttpService> services = context.getBeansOfType(HttpService.class); + for (Iterator<Map.Entry<String, HttpService>> iter = services.entrySet().iterator(); iter.hasNext();) { + Map.Entry<String, HttpService> entry = iter.next(); + String serviceName = entry.getKey(); + HttpService service = entry.getValue(); + handler.addHttpService(serviceName, service); + } } - } } Modified: mina/sandbox/asyncweb/springframework/src/main/java/org/safehaus/asyncweb/integration/spring/Main.java URL: http://svn.apache.org/viewvc/mina/sandbox/asyncweb/springframework/src/main/java/org/safehaus/asyncweb/integration/spring/Main.java?rev=592337&r1=592336&r2=592337&view=diff ============================================================================== --- mina/sandbox/asyncweb/springframework/src/main/java/org/safehaus/asyncweb/integration/spring/Main.java (original) +++ mina/sandbox/asyncweb/springframework/src/main/java/org/safehaus/asyncweb/integration/spring/Main.java Tue Nov 6 00:59:36 2007 @@ -28,72 +28,75 @@ import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; - /** * Simple stand-alone server which loads configuration using Spring - * + * * @author irvingd * */ public class Main { - - private static final Log LOG = LogFactory.getLog(Main.class); - - private static final String CONFIG_PROPERTY = "asyncWeb.config"; - private static final String SERVICE_CONFIG_PROPERTY = "asyncWeb.config.services"; - private static final String DEFAULT_SERVICE_CONFIG = "httpServiceDefinitions"; - - private String configDir; - private String serviceConfigName; - - /** - * @param asyncWebDir The async web base directory - */ - public Main(File asyncWebDir) { - this(asyncWebDir, DEFAULT_SERVICE_CONFIG); - } - - /** - * @param asyncWebDir The async web configuration directory - containing the - * <code>AsyncWeb.xml</code> configuration file - * @param serviceConfigName The name of the directory within <code>configDir</code> - * containing service definitions - */ - public Main(File asyncWebDir, String serviceConfigName) { - if (!asyncWebDir.isDirectory()) { - throw new IllegalArgumentException("Could not find asyncWeb directory: " + asyncWebDir); + + private static final Log LOG = LogFactory.getLog(Main.class); + + private static final String CONFIG_PROPERTY = "asyncWeb.config"; + + private static final String SERVICE_CONFIG_PROPERTY = "asyncWeb.config.services"; + + private static final String DEFAULT_SERVICE_CONFIG = "httpServiceDefinitions"; + + private String configDir; + + private String serviceConfigName; + + /** + * @param asyncWebDir The async web base directory + */ + public Main(File asyncWebDir) { + this(asyncWebDir, DEFAULT_SERVICE_CONFIG); + } + + /** + * @param asyncWebDir The async web configuration directory - containing the + * <code>AsyncWeb.xml</code> configuration file + * @param serviceConfigName The name of the directory within <code>configDir</code> + * containing service definitions + */ + public Main(File asyncWebDir, String serviceConfigName) { + if (!asyncWebDir.isDirectory()) { + throw new IllegalArgumentException( + "Could not find asyncWeb directory: " + asyncWebDir); + } + this.configDir = asyncWebDir.getAbsolutePath() + "/"; + this.serviceConfigName = serviceConfigName; + } + + /** + * Uses system properties to determine the asyncWeb configuration directory, + * and (optionally) the service configuration directory contained within + */ + Main() { + configDir = System.getProperty(CONFIG_PROPERTY); + configDir = configDir == null ? "AsyncWeb/" : configDir + "/"; + serviceConfigName = System.getProperty(SERVICE_CONFIG_PROPERTY, + DEFAULT_SERVICE_CONFIG); + } + + public void start() { + String[] configs = new String[] { configDir + "conf/AsyncWeb.xml", + configDir + "conf/" + serviceConfigName + "/*.xml" }; + ApplicationContext ctx = new FileSystemXmlApplicationContext(configs); + ServiceContainer container = (ServiceContainer) ctx + .getBean("container"); + try { + container.start(); + } catch (ContainerLifecycleException e) { + LOG.error("Failed to start container", e); + System.exit(1); + } + LOG.info("AsyncWeb server started"); } - this.configDir = asyncWebDir.getAbsolutePath() + "/"; - this.serviceConfigName = serviceConfigName; - } - - /** - * Uses system properties to determine the asyncWeb configuration directory, - * and (optionally) the service configuration directory contained within - */ - Main() { - configDir = System.getProperty(CONFIG_PROPERTY); - configDir = configDir == null ? "AsyncWeb/" : (configDir + "/"); - serviceConfigName = System.getProperty(SERVICE_CONFIG_PROPERTY, - DEFAULT_SERVICE_CONFIG); - } - - public void start() { - String[] configs = new String[] { configDir + "conf/AsyncWeb.xml", configDir + - "conf/" + serviceConfigName + "/*.xml"}; - ApplicationContext ctx = new FileSystemXmlApplicationContext(configs); - ServiceContainer container = (ServiceContainer) ctx.getBean("container"); - try { - container.start(); - } catch (ContainerLifecycleException e) { - LOG.error("Failed to start container", e); - System.exit(1); + + public static void main(String[] args) throws Exception { + new Main().start(); } - LOG.info("AsyncWeb server started"); - } - - - public static void main(String[] args) throws Exception { - new Main().start(); - } }
