我正在尝试构建一个资源包,它从数据库而不是属性文件中获取消息。我做了一些扩展ResourceBundle,ResourceBundle.Control和ListResourceBundle的测试,我想我正走在正确的道路上。
当我需要查询实际数据库以从我的ResourceBundle实现中获取消息时,我才刚刚达到目的。我想利用我在EJB层上的所有JPA基础结构来运行查询并实例化将存储密钥,消息和语言环境的对象。所以,如果我能将@Start-inject会话bean注入ResourceBundle,那将是完美的,但我找不到办法。
这是我的ResourceBundle代码:
@ManagedBean(eager=true)
@ApplicationScoped
public class ResourceDicWeb extends ListResourceBundle {
@EJB
private MyDAO myDAO;
@Override
protected Object[][] getContents() {
List<DicWeb> dicWeb = updateDictionary();
Object[][] content = new Object[dicWeb.size()][2];
for(int i = 0; i <= dicWeb.size(); i++) {
content[i][0] = dicWeb.get(i).getAtrKey();
content[i][1] = dicWeb.get(i).getAtrMessage();
}
return content;
}
private List<DicWeb> updateDictionary() {
return myDAO.fetchDictionary(); // at this point myDAO is always null
}
}
我的下一步是使用老式的jdbc直接从resourcebundle创建数据库连接,但这绝对是最后一个选项。
干杯!
答案 0 :(得分:0)
如果注射不起作用,那么您仍然可以通过JNDI
执行此操作。
Context ctx = new InitialContext();
MyDao myDao = (MyDao) ctx.lookup("myapp/myejbmodule/MyDao!org.myapp.ejb.MyDao");