)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1000327,"name":"Michael Nitschinger","email":"michael.nitschinger@couchbase.com","username":"daschl","avatars":[{"url":"https://www.gravatar.com/avatar/ca669dcaa36c077d54b96af979d77b9d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/ca669dcaa36c077d54b96af979d77b9d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/ca669dcaa36c077d54b96af979d77b9d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/ca669dcaa36c077d54b96af979d77b9d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"758d30efd1b2f50a5c59f7e5f889725e88182640","unresolved":false,"context_lines":[{"line_number":3,"context_line":"AuthorDate: 2014-12-09 09:04:03 -0500"},{"line_number":4,"context_line":"Commit:     mattbertolini \u003cviper2843@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-12-09 09:04:03 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"The Spring factory bean was marked as a singleton but was creating a new instance with every call to getObject(). I created an instance holder so the same reference is returned every time. This also allows the class to expose a shutdown method to appropriately shut down the client when the spring context is destroyed."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I9ae2d71ae7d3fe899bce8ec8200e215aa987400d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"ec569544_dd9f5bed","line":6,"updated":"2014-12-09 14:31:56.000000000","message":"Can you please do a headline and then a break and then more info? 80 width if possible (see the other commits as an example).\n\nAlso it would be good if you can follow the motivation/modifications/result pattern, see the other commits as well","commit_id":"e04e84d5d19fec6178ba0ce23db55ccaa20de542"},{"author":{"_account_id":1002542,"name":"Matt Bertolini","email":"viper2843@gmail.com","username":"mattbertolini","avatars":[{"url":"https://www.gravatar.com/avatar/2fa74c7605acd288a109ce92f83002b5.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/2fa74c7605acd288a109ce92f83002b5.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/2fa74c7605acd288a109ce92f83002b5.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/2fa74c7605acd288a109ce92f83002b5.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"2712b014ab2e77302eaf0825586f243072f6f253","unresolved":false,"context_lines":[{"line_number":3,"context_line":"AuthorDate: 2014-12-09 09:04:03 -0500"},{"line_number":4,"context_line":"Commit:     mattbertolini \u003cviper2843@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-12-09 09:04:03 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"The Spring factory bean was marked as a singleton but was creating a new instance with every call to getObject(). I created an instance holder so the same reference is returned every time. This also allows the class to expose a shutdown method to appropriately shut down the client when the spring context is destroyed."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I9ae2d71ae7d3fe899bce8ec8200e215aa987400d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"ec569544_fd3e9fe6","line":6,"in_reply_to":"ec569544_dd9f5bed","updated":"2014-12-09 20:08:08.000000000","message":"Will do. Most of my motivation was original posted in my Github pull request. I will move it over to the commit.","commit_id":"e04e84d5d19fec6178ba0ce23db55ccaa20de542"}],"src/main/java/net/spy/memcached/spring/MemcachedClientFactoryBean.java":[{"author":{"_account_id":1000327,"name":"Michael Nitschinger","email":"michael.nitschinger@couchbase.com","username":"daschl","avatars":[{"url":"https://www.gravatar.com/avatar/ca669dcaa36c077d54b96af979d77b9d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/ca669dcaa36c077d54b96af979d77b9d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/ca669dcaa36c077d54b96af979d77b9d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/ca669dcaa36c077d54b96af979d77b9d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"758d30efd1b2f50a5c59f7e5f889725e88182640","unresolved":false,"context_lines":[{"line_number":66,"context_line":"  private final ConnectionFactoryBuilder connectionFactoryBuilder \u003d"},{"line_number":67,"context_line":"      new ConnectionFactoryBuilder();"},{"line_number":68,"context_line":"  private String servers;"},{"line_number":69,"context_line":"  private MemcachedClient instance;"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"  @Override"},{"line_number":72,"context_line":"  public Object getObject() throws Exception {"}],"source_content_type":"text/x-java","patch_set":1,"id":"ec569544_9d95e3d1","line":69,"updated":"2014-12-09 14:31:56.000000000","message":"do we need to make this thread safe of some form (including the getObject())","commit_id":"e04e84d5d19fec6178ba0ce23db55ccaa20de542"},{"author":{"_account_id":1002542,"name":"Matt Bertolini","email":"viper2843@gmail.com","username":"mattbertolini","avatars":[{"url":"https://www.gravatar.com/avatar/2fa74c7605acd288a109ce92f83002b5.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/2fa74c7605acd288a109ce92f83002b5.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/2fa74c7605acd288a109ce92f83002b5.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/2fa74c7605acd288a109ce92f83002b5.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"2712b014ab2e77302eaf0825586f243072f6f253","unresolved":false,"context_lines":[{"line_number":66,"context_line":"  private final ConnectionFactoryBuilder connectionFactoryBuilder \u003d"},{"line_number":67,"context_line":"      new ConnectionFactoryBuilder();"},{"line_number":68,"context_line":"  private String servers;"},{"line_number":69,"context_line":"  private MemcachedClient instance;"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"  @Override"},{"line_number":72,"context_line":"  public Object getObject() throws Exception {"}],"source_content_type":"text/x-java","patch_set":1,"id":"ec569544_bd342709","line":69,"in_reply_to":"ec569544_9d95e3d1","updated":"2014-12-09 20:08:08.000000000","message":"In my experience with Spring most (if not all) of the synchronization around FactoryBeans are done by the BeanFactory that uses them. The Spring lifecycle handles all of this to make sure the instance is handled correctly. I have used this pattern successfully many times. That being said, there are other ways of loading the bean. I have examined a dozen or so Spring factory beans in their own repo and I can follow the InitializingBean approach to loading the MemcachedClient. This way the instance won\u0027t be lazy loaded and we can avoid the possible but unlikely threading issue. I will make those changes shortly for your review.","commit_id":"e04e84d5d19fec6178ba0ce23db55ccaa20de542"},{"author":{"_account_id":1000327,"name":"Michael Nitschinger","email":"michael.nitschinger@couchbase.com","username":"daschl","avatars":[{"url":"https://www.gravatar.com/avatar/ca669dcaa36c077d54b96af979d77b9d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/ca669dcaa36c077d54b96af979d77b9d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/ca669dcaa36c077d54b96af979d77b9d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/ca669dcaa36c077d54b96af979d77b9d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"758d30efd1b2f50a5c59f7e5f889725e88182640","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    return true;"},{"line_number":88,"context_line":"  }"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"  public void shutdown() {"},{"line_number":91,"context_line":"    if(instance !\u003d null) {"},{"line_number":92,"context_line":"      instance.shutdown();"},{"line_number":93,"context_line":"    }"}],"source_content_type":"text/x-java","patch_set":1,"id":"ec569544_fda21f37","line":90,"updated":"2014-12-09 14:31:56.000000000","message":"same here, are we considered with thread safety? also is this an @override?","commit_id":"e04e84d5d19fec6178ba0ce23db55ccaa20de542"},{"author":{"_account_id":1002542,"name":"Matt Bertolini","email":"viper2843@gmail.com","username":"mattbertolini","avatars":[{"url":"https://www.gravatar.com/avatar/2fa74c7605acd288a109ce92f83002b5.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/2fa74c7605acd288a109ce92f83002b5.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/2fa74c7605acd288a109ce92f83002b5.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/2fa74c7605acd288a109ce92f83002b5.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"2712b014ab2e77302eaf0825586f243072f6f253","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    return true;"},{"line_number":88,"context_line":"  }"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"  public void shutdown() {"},{"line_number":91,"context_line":"    if(instance !\u003d null) {"},{"line_number":92,"context_line":"      instance.shutdown();"},{"line_number":93,"context_line":"    }"}],"source_content_type":"text/x-java","patch_set":1,"id":"ec569544_9d316319","line":90,"in_reply_to":"ec569544_fda21f37","updated":"2014-12-09 20:08:08.000000000","message":"See my other comment for a more detailed explaination on thread safety. The method is not apart of an interface and does not need an @Override. It is merely delegating to the client\u0027s shutdown method. The null check was just to prevent NPE. It may not be needed when changes I described above are implemented.","commit_id":"e04e84d5d19fec6178ba0ce23db55ccaa20de542"}]}
