I decided that I would like to store my application messages in the database and I came up with the code shown below. I extended org.jboss.seam.core.ResourceBundle and override
protected java.util.ResourceBundle loadBundle(String bundleName) ApplicationMessage is just an entity I created that I has the properties of Long id; String bundleName; String locale; String key; String message; String description; I didn't put much time it this and I am open to suggestions for improvement. Since the messages are stored in the session, how can I refresh them when the database is updated? I could easily outject a new copy into the user's session that modified the messages, but is there any way to invalidate all the messages for all the sessions so that on the next request these will be reloaded? | @Name("org.jboss.seam.core.resourceBundle") | public class ResourceBundle extends org.jboss.seam.core.ResourceBundle | { | | @Override | protected java.util.ResourceBundle loadBundle(String bundleName) | { | if(bundleName.equals("messages")) | { | return new DatabaseListResourceBundle(bundleName); | } | else | { | return super.loadBundle(bundleName); | } | } | | public static class DatabaseListResourceBundle extends ListResourceBundle | { | private String bundleName; | | public DatabaseListResourceBundle(String bundleName) | { | this.bundleName=bundleName; | }; | | @Override | protected Object[][] getContents() | { | return getObjectArray(loadLocalDatabaseMessages(Locale.instance())); | } | | @SuppressWarnings("unchecked") | private List<ApplicationMessage> loadLocalDatabaseMessages(java.util.Locale locale) | { | EntityManager entityManager = (EntityManager) Component.getInstance("entityManager"); | List<ApplicationMessage> list = entityManager.createQuery("from ApplicationMessage m where m.locale=:locale and m.bundleName=:bundleName order by m.key") | .setParameter("bundleName", bundleName) | .setParameter("locale", locale.toString()) | .getResultList(); | return list; | } | | public Object[][] getObjectArray(List<ApplicationMessage> list) | { | Object[][] messageArray = new Object[list.size()][2]; | for(int k=0; k<list.size(); k++) | { | ApplicationMessage am = list.get(k); | messageArray[k][0] = am.getKey(); | messageArray[k][1] = am.getMessage(); | } | return messageArray; | } | } | | } | View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4020406#4020406 Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4020406 _______________________________________________ jboss-user mailing list jboss-user@lists.jboss.org https://lists.jboss.org/mailman/listinfo/jboss-user