Hi, Thank you, I check it out today and it worked fine.
Best regards, Paulo 2008/2/21, Jerome Louvel <[EMAIL PROTECTED]>: > > > Hi Paulo, > > Thanks for the detailed bug report. I have made the Template thread safe > in > both 1.0 branch and SVN trunk. > > Could you test and let me know if everything works now? > > Best regards, > Jerome > > > -----Message d'origine----- > > De : Paulo Silveira [mailto:[EMAIL PROTECTED] > > Envoyé : mercredi 20 février 2008 22:45 > > À : [email protected] > > Objet : Uri pattern issue related with concurrence > > > > > Hi all, > > > > I'm using RESTlet API in my tomcat application using ServletConverter. > > > > Our servlet creates in his init method a router. In the > > constructor of this router, it attaches some uri patterns to > > others routers. > > > > Our application can be called for many clients in the same > > time, when we have many calls in the beginning of servlet > > life circle we are having the following problem: > > > > During the compilation of uri template it thinks that a > > pattern variable was used before and it adds to the regexp > > to: "\\" + (varIndex + 1) > > > > I think the problem is in getRegexPattern method > > (org.restlet.util.Template.java). In our case it can be > > called many times for the same Template object instance. This > > method can be interrupted by other call before it sets > > regexPattern variable and it may case that regexVariables > > tried to add the same pattern variable two times. > > > > To solve this issue the method getRegexPattern should be done > > in the constructor of Template or the method getRegexPattern > > should be synchronized. getRegexPattern method only parses > > this.regexPattern if it is null and in our case it is null > > for more than one thread. > > > > Following I will show a part of my code: > > > > public class TestServlet extends HttpServlet { > > private ServletConverter converter; > > public void init() throws ServletException { > > super.init(); > > this.converter = new ServletConverter(getServletContext()); > > Router router = new MainTestRouter(converter.getContext()); > > this.converter.setTarget(router); > > } > > > > protected void service(HttpServletRequest req, > > HttpServletResponse res) > > throws ServletException, IOException { > > this.converter.service(req, res); > > } > > } > > > > public class MainTestRouter extends Router { > > > > public MainTestRouter (Context context) { > > super(context); > > attach("/uri1/{version}", new Router1(getContext())); > > attach("/uri2/{version}", new Router1(getContext())); > > attach("/uri3/{version}", new Router1(getContext())); > > attach("/uri4/{version}", new Router1(getContext())); > > attach("/uri5/{version}", new Router1(getContext())); > > } > > > > // This method can be called concurrently and it will > > iterate in the same rotes. > > public void handle(Request request, Response response) { > > super.handle(request, response); > > } > > } > > > > Do you think it is a bug? Am I using it correctly? > > > > Thanks in advanced, > > Paulo > > > > > > > > -- "Scientia Vinces" Paulo Silveira Software Developer

