Ho finito per creare una classe denominata DatabaseMessageSource inclusa di seguito. Devo ancora implementare un qualche tipo di memorizzazione nella cache in modo da non colpire il database con ogni chiamata. Anche questo link era utile. Grazie skaffman e PrimosK per avermi indicato nella giusta direzione.
public class DatabaseMessageSource extends ReloadableResourceBundleMessageSource {
@Autowired
private MyDao myDao;
protected MessageFormat resolveCode(String code, Locale locale) {
MyObj myObj = myDao.findByCode(code);
MessageFormat format;
if (myObj!= null && myObj.getId() != null) {
format = new MessageFormat(myObj.getValue(), locale);
} else {
format = super.resolveCode(code, locale);
}
return format;
}
protected String resolveCodeWithoutArguments(String code, Locale locale) {
MyObj myObj = myDao.findByCode(code);
String format;
if (myObj != null && myObj.getId() != null) {
format = myObj.getValue();
} else {
format = super.resolveCodeWithoutArguments(code, locale);
}
return format;
}
}
Ho aggiornato il mio applicationContext per puntare alla classe appena creata. ho cambiato in:
<bean id="messageSource" class="com.mycompany.mypackage.DatabaseMessageSource">
<property name="basenames">
<list>
<value>classpath:defaultMessages</value>
</list>
</property>
<property name="defaultEncoding" value="UTF-8"/>
</bean>`enter code here`
Per il caching vorrei suggerire EHCache ... Date un'occhiata a [questo] (http://ehcache.org/documentation/recipes/thunderingherd) e [questo] (http: //ehcache.org/documentation/recipes/spring-annotations) .... – PrimosK
Grazie per questo. Implementerò il primo collegamento. Sei stato davvero d'aiuto. Grazie ancora – blong824
Una domanda di follow-up. Come posso passare un oggetto dal controller alla mia classe DatabaseMessageSource? L'oggetto è in sessione al momento dello schermo con la molla: i tag dei messaggi vengono caricati. – blong824