| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.batchee.cdi.partitioned; |
| |
| import org.apache.batchee.cdi.component.JobScopedBean; |
| |
| import jakarta.batch.api.BatchProperty; |
| import jakarta.batch.api.chunk.AbstractItemReader; |
| import jakarta.enterprise.context.Dependent; |
| import jakarta.inject.Inject; |
| import jakarta.inject.Named; |
| import java.util.logging.Level; |
| import java.util.logging.Logger; |
| |
| @Named |
| @Dependent |
| public class PartitionedJobScopedReader extends AbstractItemReader { |
| |
| private static final Logger LOG = Logger.getLogger(PartitionedJobScopedReader.class.getName()); |
| |
| private static volatile boolean stop; |
| private static volatile boolean stopPartition2; |
| |
| private static long originalBeanId; |
| private static long currentBeanId; |
| |
| private boolean firstRun = true; |
| |
| @Inject |
| @BatchProperty |
| private Integer partition; |
| |
| @Inject |
| private JobScopedBean jobScopedBean; |
| |
| |
| @Override |
| public Object readItem() throws Exception { |
| |
| if (firstRun) { |
| originalBeanId = jobScopedBean.getId(); |
| } |
| |
| currentBeanId = jobScopedBean.getId(); |
| |
| if (partition == 2 && stopPartition2 || partition != 2 && stop) { |
| LOG.log(Level.INFO, "Finished partition "+ partition); |
| return null; |
| } |
| |
| Thread.sleep(10); |
| return "Partition " + partition + ": JobScopedBean destroyed? " + JobScopedBean.isDestroyed(); |
| } |
| |
| |
| public static void stop() { |
| LOG.log(Level.INFO, "Stopping all partitions except Partition 2"); |
| stop = true; |
| } |
| |
| public static void stopPartition2() { |
| stopPartition2 = true; |
| } |
| |
| public static long originalBeanId() { |
| return originalBeanId; |
| } |
| |
| public static long currentBeanId() { |
| return currentBeanId; |
| } |
| } |