【问题标题】:Glassfish set max number of concurrent Batch JobsGlassfish 设置最大并发批处理作业数
【发布时间】:2014-11-05 12:46:17
【问题描述】:

GlassFish 允许您调整全局 EJB 池大小以及每个 EJB 的特定池大小。通过在glassfish-ejb-jar.xml 下设置max-pool-size,我可以控制可以并行使用多少个EJB 实例。

<glassfish-ejb-jar>
    <enterprise-beans>
        <ejb>
            <ejb-name>MyExpensiveEJB</ejb-name>
            <bean-pool>
               <max-pool-size>10</max-pool-size>
            </bean-pool>
        </ejb>
    </enterprise-beans>
</glassfish-ejb-jar> 

我想知道是否可以使用 Java EE Batch API 完成类似的操作。我想配置并行作业的最大数量(全局或特定作业),以便对 BatchRuntime.getJobOperator().start() 的调用在指定限制后将作业执行排入队列。

有人知道这是否可能吗?

【问题讨论】:

    标签: jakarta-ee glassfish threadpool batch-processing


    【解决方案1】:

    回答我自己的问题以供进一步参考。

    问题

    默认情况下,GlassFish Batch Runtime 使用 concurrent/__defaultManagedExecutor 作为其执行服务。

    您可以通过以下方式检索其属性:

    ./asadmin get resources.managed-executor-service.concurrent/\
    __defaultManagedExecutorService.*
    

    在我的环境中,我得到以下值:

    context-info=Classloader,JNDI,Security,WorkArea
    context-info-enabled=true
    core-pool-size=0
    deployment-order=100
    enabled=true
    hung-after-seconds=0
    jndi-name=concurrent/__defaultManagedExecutorService
    keep-alive-seconds=60
    long-running-tasks=false
    maximum-pool-size=2147483647
    object-type=system-all
    task-queue-capacity=2147483647
    thread-lifetime-seconds=0
    thread-priority=5
    

    注意maximum-pool-size=2147483647,这是一个无限制的托管执行器。

    解决方案

    1. 创建您自己的Managed Executor Service

      ./asadmin create-managed-executor-service --maximumpoolsize=20 \
      --taskqueuecapacity=5000 --longrunningtasks=true concurrent/myJobExecutor
      

      这会将池限制为 20 个并发线程。如果当前所有线程都在使用,则执行器服务将在拒绝新条目之前排队多达 5000 个任务。

    2. 很遗憾,最后一个选项 (--longrunningtasks=true) 在我的环境中不起作用。这个标志很重要,它可以防止长时间运行的任务被挂起。我必须手动设置属性:

      ./asadmin set resources.managed-executor-service.concurrent/\
      myJobExecutor.long-running-tasks=true
      
    3. 调整批处理运行时配置以使用您的新托管执行器服务(我还必须设置数据源):

      ./asadmin set-batch-runtime-configuration --executorservicelookupname \   
      concurrent/myJobExecutor --datasourcelookupname jdbc/__TimerPool
      
    4. 解雇你的工作,享受美好、理智、并行。


    您可以在GlassFish Administration Guide 中找到有关配置批处理运行时和配置托管执行器服务的更多信息

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 2018-12-18
    • 2022-08-18
    • 2022-12-16
    相关资源
    最近更新 更多