【发布时间】:2011-09-05 20:24:00
【问题描述】:
作为学习经验,我正在为我的 java/jsf 应用程序创建某种 jdbc 连接池类。就是玩玩而已。我确信有更复杂的方法来处理这个问题。
@ManagedBean(name = "pooltje", eager = true)
@ApplicationScoped
public class pooltje {
private Integer max_connecties = 10;
private connectie[] pool = new connectie[max_connecties];
public pooltje() {
for (Integer teller = 0; teller < max_connecties; teller++) {
pool[teller] = new connectie();
}
}
public Synchronzed Connection borrow() {
Connection ret_con = null;
while (ret_con == null) {
for (Integer t = 0; t < max_connecties; t++) {
if (pool[t].getUsed() == Boolean.FALSE && ret_con == null) {
ret_con = pool[t].getConn();
pool[t].setUsed(Boolean.TRUE);
}
}
}
return ret_con;
}
public synchronized void giveback(Connection terug) {
for (Integer t = 0; t < max_connecties; t++) {
if (pool[t].getConn() == terug) {
pool[t].setUsed(Boolean.FALSE);
}
}
}
}
我将这个类设为一个具有应用程序范围的托管 bean,所以我知道它只会在应用程序启动时被实例化一次。
我的实际问题是,我如何调用借用和交还方法。 对于 borrow() 方法,我发现以下内容:
FacesContext fc2 = FacesContext.getCurrentInstance();
Application app = fc2.getApplication();
Connection conn = (Connection) app.evaluateExpressionGet(fc2, "#{pooltje.borrow()}", Connection.class);
这很好用,但我觉得它应该/可以更容易。至少我确实得到了一个传回的连接。
对于 giveback() 方法,我必须传递一个变量(不再使用连接)。我怎样才能做到这一点?
【问题讨论】:
-
然后不谈论 PHP 风格...阅读一些 Java Naming Conventions。重申 Arjan,在您的代码中混合各种人类语言绝对不清楚,对其他人有帮助或自我记录(例如,为了在 Stack Overflow 上获得帮助!)。全程使用英语。不要使用荷兰街头谈话。
-
@Arjan Tijms 和 BalusC 坦克指出了这一点。但是,我的项目设置必须有一些更根本的问题。 BalusC 提出的建议对我不起作用。好吧,那是另一天的事情。无论如何....感谢您的努力。
-
您需要更清楚到底是什么不起作用。如果可以,共享整个异常和堆栈跟踪。他们讲述了很多关于问题的原因。也许您正试图在 bean 的构造函数中访问它,这确实行不通?
-
@BalusC。当然,我知道如果我不提供信息,您将无法帮助我。但是....您的评论和来自 Arjan Thijms 的评论说服我以更有条理的方式去做。发布我将不再使用的东西的堆栈跟踪对我来说似乎有点奇怪:-)。所以......仍在重新发明轮子。对于连接池,我将尝试设置诸如boneCP 之类的东西。 (哦....而且我的名字已经被咬了。这是很多混乱的根源)
标签: java jsf web-applications connection-pooling