为什么我的所有方法中的连接都不相同?

时间:2016-03-30 16:15:05

标签: java-ee connection ejb

我正在接受有关JAVA EE的培训,我们正在谈论连接池。 Adam Bien在他的书中写道" 真实世界Java EE模式 - 重新思考最佳实践"在JAVA EE应用程序中,容器为每个模块处理一个数据库连接。为了证明这一点,我们使用了您在下面看到的两个EJB。

MainBean

@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
public class MainBean implements MainBeanRemote {

    @Resource(lookup = "jdbc/sample")
    DataSource dataSource1;

    @Resource(lookup = "jdbc/sample")
    DataSource dataSource2;

    @EJB
    HelperBean hb;

    public void taking2ConnectionsFromThePool() {
        try {
            Connection con1 = dataSource1.getConnection();
            Connection con2 = dataSource1.getConnection();
        } catch (SQLException ex) {
            // ...
        }
    }

    public void taking1ConnectionEachFrom2DataSources() {
        try {
            Connection con1 = dataSource1.getConnection();
            Connection con2 = dataSource2.getConnection();
        } catch (SQLException ex) {
            // ...
        }
    }

    public void compareMainBeanWIthHelperBean() {
        try {
            Connection con1 = dataSource1.getConnection();
            Connection con2 = hb.getConnection();
        } catch (SQLException ex) {
            // ...
        }
    }

}

HelperBean:

@Stateless
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class HelperBean {
     @Resource(lookup = "jdbc/sample")
    private DataSource dataSource2;

    public DataSource getDataSource() {
        return dataSource2;
    }
     public Connection getConnection() throws SQLException {
         Connection con = dataSource2.getConnection();
        return con;
    }

}

当我们对这三个功能进行调试时,我们发现了以下几点:

  1. 在函数taking2ConnectionsFromThePool中,两个连接都与预期的相同。
  2. taking1ConnectionEachFrom2DataSources中的内容相同。
  3. 到目前为止一切顺利,但

    1. compareMainBeanWIthHelperBean函数中,con1HelperBean内部的连接相同(如预期),但con2的连接不同。
    2. 当我问我的讲解员为什么在这种情况下连接不同时他并不知道。任何人都可以解释为什么在最后一个函数中连接是不同的吗?

      P.S。我知道第三种方法并不是真实情况,但在所有情况下,Adam Bien的连接应该是相同的,这就是为什么我们在培训中编写了这三种方法。

      P.P.S:我们使用了当前的glassfish应用服务器和Java(JDA和JRE)(u77)

0 个答案:

没有答案