Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jakarta ee 无状态会话bean何时获得数据库连接?_Jakarta Ee_Ejb_Stateless Session Bean - Fatal编程技术网

Jakarta ee 无状态会话bean何时获得数据库连接?

Jakarta ee 无状态会话bean何时获得数据库连接?,jakarta-ee,ejb,stateless-session-bean,Jakarta Ee,Ejb,Stateless Session Bean,我想了解无状态会话和DB连接之间的关系。 有没有人能根据下面的场景给我提供以下问题的信息? 提前谢谢 在容器管理的事务中,无状态sessionbean何时获得数据库连接及其生存期? 在每个场景中,将获取多少个DB连接,或者获取和释放一个DB连接多少次? 场景1: 场景2: 场景3: 场景4: 我想你可以试试看。 这样做: @无国籍 @TransactionManagementTransactionManagementType.CONTAINER //默认事务属性是必需的 公共类无状态会话Bean

我想了解无状态会话和DB连接之间的关系。 有没有人能根据下面的场景给我提供以下问题的信息? 提前谢谢

在容器管理的事务中,无状态sessionbean何时获得数据库连接及其生存期? 在每个场景中,将获取多少个DB连接,或者获取和释放一个DB连接多少次? 场景1: 场景2: 场景3: 场景4:
我想你可以试试看。 这样做:

@无国籍 @TransactionManagementTransactionManagementType.CONTAINER //默认事务属性是必需的 公共类无状态会话Beana{ @资源 事务同步注册表; 私有静态最终记录器Logger=Logger.Logger.GetLoggerStatesessionBeana.class.getName; ..... 私人无效日志交易{ 对象tsKey=tsRegistry.getTransactionKey; LOGGER.infoTransaction:+tsKey==null?无:tsKey.toString; } @TransactionAttributeTransactionAttributeType.NOT\u为必填项 公共无效法{ 日志事务 方法b; } @TransactionAttributeTransactionAttributeType.REQUIRED 私有无效方法B{ 日志事务; 方法c; } @TransactionAttributeTransactionAttributeType.REQUIRES\u NEW 私有无效方法{ 日志事务; ..... } ..... }
在调用方法的Bean中执行同样的操作,然后可以比较日志输出。

非常感谢您的回复。我了解事务从何处开始、在何处结束及其生存期。但我想了解的是连接的数量,而不是事务块的数量。例如:在场景3和场景4中,每个sessionbean是获得单独的连接还是共享相同的连接?或者每个被注释的方法都需要一个新的连接,而不仅仅是启动一个事务?这有意义吗?不是每一个用requiresnew注释的方法都会得到一个新事务。到数据库的连接数取决于您在方法中所做的事情以及应用程序服务器中JDBC连接池的设置
@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
// DEFAULT TRANSACTION ATTRIBUTE IS "REQUIRED"
public class StatelessSessionBeanA {
    .....
    @TransactionAttribute(TransactionAttributeType.NOT_REQUIRED)
    public void methodA() {
        methodB();
    }

    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    private void methodB() {
        methodC();
    }

    @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
    private void methodC() {
        .....
    }
    .....
}
@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
@TransactionAttribute(TransactionAttributeType.NOT_REQUIRED)   // THIS IS IMPORTANT HERE
public class StatelessSessionBeanB {
    .....
    @TransactionAttribute(TransactionAttributeType.NOT_REQUIRED)
    public void methodA() {
        methodB();
    }

    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    private void methodB() {
        methodC();
    }

    @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
    private void methodC() {
        .....
    }
    .....
}
@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
// DEFAULT TRANSACTION ATTRIBUTE IS "REQUIRED"
public class StatelessSessionBeanC {
    .....
    @TransactionAttribute(TransactionAttributeType.NOT_REQUIRED)
    public void methodA() {
        methodB();
    }

    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    private void methodB() {
        methodC();
    }

    @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
    private void methodC() {
        .....
    }
    .....
}


@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
@TransactionAttribute(TransactionAttributeType.NOT_REQUIRED)   // THIS IS IMPORTANT HERE
public class StatelessSessionBeanD {
    
    @Inject
    private StatelessSessionBeanC beanC;

    .....
    @TransactionAttribute(TransactionAttributeType.NOT_REQUIRED)
    public void methodA() {
        methodB();
        beanC.methodA();
    }

    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    private void methodB() {
        methodC();
        beanC.methodA();
    }

    @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
    private void methodC() {
        .....
    }
    .....
}
@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
@TransactionAttribute(TransactionAttributeType.NOT_REQUIRED)   // THIS IS IMPORTANT HERE
public class StatelessSessionBeanE {
    .....
    @TransactionAttribute(TransactionAttributeType.NOT_REQUIRED)
    public void methodA() {
        methodB();
    }

    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    private void methodB() {
        methodC();
    }

    @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
    private void methodC() {
        .....
    }
    .....
}


@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
// DEFAULT TRANSACTION ATTRIBUTE IS "REQUIRED"
public class StatelessSessionBeanF {
    
    @Inject
    private StatelessSessionBeanE beanE;

    .....
    @TransactionAttribute(TransactionAttributeType.NOT_REQUIRED)
    public void methodA() {
        methodB();
        beanE.methodA();
    }

    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    private void methodB() {
        methodC();
        beanE.methodA();
    }

    @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
    private void methodC() {
        .....
    }
    .....
}