0

我有一个 JSF Web 应用程序和一个名为 User 的示例托管 Bean:

@ManagedBean
@SessionScoped
public class User {

private String name, surname;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        updateName(name);
        this.name = name;
    }

    public String getSurname() {
        return surname;
    }

    public void setSurname(String surname) {
        this.surname = surname;
    }

    private void updateName(String name){
        Connection connection = ConnectionFactory.getConnection();
        //Update name via Connection
    }
}

然后我有一个示例类 ConnectionFactory。

public class ConnectionFactory {

    private static Queue<Connection> connections;

    static {
        //initialize connections
    }

    public static Connection getConnection() {
          return connections.poll();
    }

    //Other methods related to connection pooling, this is really just an example class

}

我的问题是,这样的工厂类可以用来提供 DATABASE CONNECTIONS 吗?是否保证具有任何范围(从请求到应用程序范围)的每个 bean 都将在容器运行时共享这一类?

我只想在更新方法的持续时间内租用与 bean 的连接。我不喜欢具有长生命周期(会话可能需要很长时间)的会话范围托管 bean 的想法,该 bean 具有注入 Connection 对象的类属性。

4

1 回答 1

0

如果你正确地实现了一个单例模式,那么是的——所有 bean 都将使用同一个对象(在同一个 JVM 的范围内)。

但是,我认为您正在重新发明轮子,并建议使用标准连接池。例如,通过这种方式,您可以使用应用程序服务器配置工具来监视和管理诸如打开的数据库连接的最大数量之类的事情。

于 2013-06-07T16:32:06.757 回答