[ http://jira.codehaus.org/browse/JBEHAVE-492?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=264730#action_264730 ]
Brian Repko commented on JBEHAVE-492: ------------------------------------- Got it - thanks, Paul. ThreadCaching is interesting - in Spring, bean scopes are singleton, prototype (new bean for each get call) and a bunch related to web (request/session/global-session-for-portlets) but nothing like once-per-thread. Problem I see with that is that its a global policy on all objects in the container rather than per-bean. And obviously the kicker is the instance variables during multi-threaded execution. One could make the steps classes singletons that then reach out to threadlocals (or threadlocal wrappers) to get data that would be instance variables. But then the global nature of the ThreadCaching will hit you (some objects are thread-specific and some aren't). So if you really need new steps classes (and others) per thread - then what I'm not sure about is how we get the candidate steps in the configuration to be thread-specific...I'd have to think about that design a bit more... > ConfigurableEmbedder.addSteps(..) should take classes not instances. > -------------------------------------------------------------------- > > Key: JBEHAVE-492 > URL: http://jira.codehaus.org/browse/JBEHAVE-492 > Project: JBehave > Issue Type: New Feature > Components: Core > Affects Versions: 3.x > Reporter: Paul Hammant > Fix For: 3.x > > > public void addSteps(List<Class> steps) { > } > ... would be better. > Why? There's an instance that's made during the setup of a suite (refer > EtsyStories). If you are running in multi-threaded mode, that **initial** > instance is **never** used during the running of scenarios. > In multi-threaded mode, there's a constructor for BasePage that takes a > WebDriverProvider. When it is passed in during the primordial instantiation > phase, no WebDriver has been initialized. We don't want to do that of course > because (a) we know this **initial** instance is going to be garbage > collected and never used, and (b) on SauceLabs at least it would result in > browser opening in the cloud then closing (or maybe not closing, but never > used; I'm not sure). > JBehave does not actually need the **initial** instance. I believe this is > provable. Instead it could perfectly well use the class definition without > the instance ref somehow. > Proposal: Long overdue, I think, but could for 4.x we shift to using > class-defs. Either rework CandidateSteps to hold a Class rather than an > instance. Or further do a away (move the logic elsewhere) with > CandidateSteps, and use the POJO Step's class-def directly. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://jira.codehaus.org/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe from this list, please visit: http://xircles.codehaus.org/manage_email