Right, the flow should be as: when mybuddy feaure enabled rand password generated and saved in db, then on subsequent calls to load settings / pass from db
George On Sunday, April 1, 2012, Mircea Carasel <[email protected]> wrote: > Settings not loaded from database? Settings are loaded from database as long as you save them there...but if you don't, settings will be retrieved from Spring. > Therefore, IMO, there is no point to inherit prototype behavior for child settings. In this case, every time you call getSettings, initialize method will be called again and again, and the test > mircea > > On Sun, Apr 1, 2012 at 4:44 PM, George Niculae <[email protected]> wrote: >> >> I don't think this logic stands, from what I understand you'll see same behaviour when restarting config (that is when new settings instantied). >> I'd look at why settings not loaded, maybe hibernate interceptor not applied? >> >> George >> >> On Sunday, April 1, 2012, Mircea Carasel <[email protected]> wrote: >> > Hi, >> > During investigations in 4.6 on why mybuddy is not connecting to openfire (authorized exception) I found out that the mybuddy password is always overwritten in sipximbot.properties and >> > xmpp-account-info.xml at every "getSettings()" call >> > The cause of this is that at every m_beanFactory.getBean(m_class) call (in BeanWithSettingsDaoImpl) a new instance of a setting bean is created in spring >> > Related to ImBotSettings.java, every time when we call getSettings() (ImBotImpl.getSettings), it is called: ImbotSettings.initialize, that regenerated mybuddy password, given the fact that always a new instance of BeanWIthSettings.m_settings is created >> > protected void initialize() { >> > if (StringUtils.isEmpty(getSettingValue(PA_PASSWORD_SETTING))) { >> > setSettingValue(PA_PASSWORD_SETTING, randomAlphanumeric(PASS_LENGTH)); >> > } >> > } >> > BeanWithSettings.getSettings() method: >> > public Setting getSettings() { >> > if (m_settings != null) { >> > return m_settings; >> > } >> > setSettings(loadSettings()); >> > initialize(); >> > return m_settings; >> > } >> > It will never match the mybuddy password initially stored in openfire. >> > Here are the spring definitions: >> > imbot.beans.xml >> > <bean id="imBotSettings" class="org.sipfoundry.sipxconfig.imbot.ImBotSettings" parent="settingsBean"> >> > </bean> >> > parent settingsBean definition: >> > <bean id="settingsBean" class="org.sipfoundry.sipxconfig.setting.PersistableSettings" scope="prototype" parent="beanWithSettings" >> > abstract="true"> >> > <property name="modelFilesContext" ref="modelFilesContext"/> >> > </bean> >> > the scope "prototype" is inherited to every child bean, such as "imBotSettings" starting with spring 3.0: >> > https://jira.springsource.org/browse/SPR-3542 >> > The solution here is to specifically add scope="singleton" to "imBotSettings" definition. I added this and MyBuddy works just fine >> > More than this, the scope="singleton" should be added to all child, instantiable setting beans. >> > Please let me know your thoughts, but I strongly recommend not to let settings creation every time until when the user changes a setting value in UI and saves settings object in database >> > Thanks, >> > Mircea >> _______________________________________________ >> sipx-dev mailing list >> [email protected] >> List Archive: http://list.sipfoundry.org/archive/sipx-dev/ > >
_______________________________________________ sipx-dev mailing list [email protected] List Archive: http://list.sipfoundry.org/archive/sipx-dev/
