I will try to illustrate my implementation as best as I
can then hopefully I can find a way to solve my logging issue.

In my web.xml I have:

<listener>
  <listener-class>
    org.springframework.web.context.ContextLoaderListener
  </listener-class>
</listener>

<context-param>
  <param-name>org.restlet.application</param-name>
  <param-value>org.example.RestApplication</param-value>
</context-param>

<servlet>
<servlet-name>RestServlet</servlet-name>
  <servlet-class>
    com.noelios.restlet.ext.servlet.ServerServlet
  </servlet-class>
  <load-on-startup>0</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>RestServlet</servlet-name>
    <url-pattern>/atom/*</url-pattern>
</servlet-mapping>

Which initializes the spring framework and also hands all
/atom/* requests to the ServerServlet.

My RestApplication contains:

public class RestApplication extends Application {
  public RestApplication(Context context){
    super(context);
  }

  @Override
    public Restlet createRoot() {
      Router router = new Router(getContext());
      RestManager manager = (RestManager) SpringResolver.
        getBean("manager");
      manager.init(router);
      return router;
    }
    public void handle(Request request, Response response) {
      try {
        start();
      } catch (Exception ee) {
        ee.printStackTrace();
      }
      super.handle(request, response);
    }
}

This gets a reference to the RestManager via spring. It
hands it a map of <String, Restlet> and calls its init
method.

My RestManager contains:

public class RestManager {
        
  private Map<String, Restlet> resourceMappings
    = new HashMap<String, Restlet>();
  public void init(Router router) {
    for (String key : resourceMappings.keySet()) {
      router.attach(key, resourceMappings.get(key));
    }
  }
  public void setResourceMappings(HashMap<String, Restlet>
    resourceMappings) {
    this.resourceMappings = resourceMappings;
  }
}

This loops over the map and attaches all the restlets
to the router.

My Spring applicationContext.xml file contains:

<bean id="portalRoot" class="org.example.PortalRoot">

<bean id="manager" class="org.example.RestManager">
  <property name="resourceMappings">
    <bean class="java.util.HashMap">
      <constructor-arg>
        <map>
          <entry key="/portal">
            <ref local="portalRoot" />
          </entry>
        </map>
      </constructor-arg>
    </bean>
  </property>
</bean>

As you can see all the restlets are defined in the map.

PortalRoot contains:

public class PortalRoot extends Restlet {
        
  public void handle(Request request, Response response) {
    if (request.getMethod().equals(Method.GET)) {
      snip........ main code etc......

This handles all my get requests for /atom/portal, I have
simplified the code to make it easier to read.

I would like to disable logging at the RestApplication level
see above. Not at the PortalRoot restlet level.

As I am not directly referencing any restlet components I am
finding it hard to see where to put the logging code.

Thanks,

Takasho

Reply via email to