Java, поток не продолжается с Hibernate - PullRequest
0 голосов
/ 06 сентября 2018

Извините за мой английский

У меня большая проблема с моей программой, я бы создал симулятор генератора данных с Spring MVC.Это код:

Исполнитель класса:

public class ExecutorHerga {
public ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);

public void startExecutor(int freq, int idsensore) {
    //HergaRunnable.getInstance(idsensore);
    scheduledExecutorService.scheduleAtFixedRate(HergaRunnable.getInstance(idsensore) , 0, freq, TimeUnit.SECONDS);
 }
}

Выполняемая нить класса:

public class HergaRunnable implements Runnable {

public Random random = new Random();
public static double min = 0;
public static double max = 100;
private static HergaRunnable hergaRunnable = null;
private static Acquisizione acquisizione;



public static HergaRunnable getInstance(int id_sensore) {
    if (hergaRunnable == null) {
        hergaRunnable = new HergaRunnable();
        acquisizione = new Acquisizione();
        acquisizione.setId_sensore(id_sensore);
        return hergaRunnable;
    }
    return hergaRunnable;
}

@Override
public void run() {
    double number = min + (max - min) * random.nextDouble();
    min = number;
    Calendar c = Calendar.getInstance();
    System.out
            .println("Numero :" + number + " alla data : " + c.getTime() + " " + Thread.currentThread().getName());
    acquisizione.setValore_acquisizione(number);
    acquisizione.setCommenti("ok");
    AcquisizioneDao acquisizioneDao = new AcquisizioneDaoImpl();
    acquisizioneDao.generaAcquisizioni(acquisizione);

}

Это класс, управляющий Hibernate:

@Repository("acquisizioneDao")
public class AcquisizioneDaoImpl extends AbstractDao<Integer, Acquisizione> implements AcquisizioneDao {

private static final Logger logger = LoggerFactory.getLogger(UserDaoImpl.class);

@Autowired
SensoriService sensoriService;

public static AcquisizioneDaoImpl acquisizioneDaoImpl=null;


@SuppressWarnings("unchecked")
public List<Acquisizione> getAcquisizioni(int id_sensore) {
    logger.info(" getAcquisizioni per il sensore : "+id_sensore);
    Criteria crit = createEntityCriteria();
    crit.add(Restrictions.eq("id_sensore", id_sensore));
    List<Acquisizione> acquisizione = (List<Acquisizione>) crit.list();
    for(int i=0; i<acquisizione.size();i++) {
        logger.info("valore : "+i+ acquisizione.get(i).toString());
    }

    return acquisizione;
}


public void generaAcquisizioni(Acquisizione acquisizione) {
    persist(acquisizione);
}

и это вызов:

public void pressionHerga(Sensore sensore, int numberOfRead) {
    logger.info("pressionHerga");

    ExecutorHerga ex = new  ExecutorHerga();
    ex.startExecutor(numberOfRead,sensore.getId_sensore());
}

теперь, если я могу начать, поток циклически повторяется один раз и останавливается:

    10:15:08.926 [http-bio-8080-exec-9] INFO  c.w.springmvc.dao.UserDaoImpl - Ricerca nome sel sensore
10:15:08.926 [http-bio-8080-exec-9] INFO  c.w.springmvc.dao.UserDaoImpl - La ricerca ha dato il seguente nominativo :Herga-6101-0001 
10:15:08.926 [http-bio-8080-exec-9] INFO  c.w.springmvc.dao.UserDaoImpl - switch riconosciuto
10:15:08.926 [http-bio-8080-exec-9] INFO  c.w.springmvc.dao.UserDaoImpl - pressionHerga
Numero :23.142418038941848 alla data : Thu Sep 06 10:15:08 CEST 2018 pool-1-thread-1
10:15:08.942 [http-bio-8080-exec-9] INFO  c.w.springmvc.dao.UserDaoImpl - findById Sensore
Hibernate: 
    select
        sensore0_.id_sensore as id_senso1_5_0_,
        sensore0_.descrizione as descrizi2_5_0_,
        sensore0_.nome_sensore as nome_sen3_5_0_,
        sensore0_.unita_misura as unita_mi4_5_0_,
        sensore0_.valore_limite as valore_l5_5_0_,
        sensore0_.valore_massimo as valore_m6_5_0_,
        sensore0_.valore_minimo as valore_m7_5_0_,
        sensore0_.valore_range as valore_r8_5_0_ 
    from
        sensore sensore0_ 
    where
        sensore0_.id_sensore=?
10:15:08.961 [http-bio-8080-exec-9] INFO  c.w.springmvc.dao.UserDaoImpl -  getAcquisizioni per il sensore : 3
Hibernate: 
    select
        this_.id_acquisizione as id_acqui1_4_0_,
        this_.commenti as commenti2_4_0_,
        this_.id_sensore as id_senso3_4_0_,
        this_.valore_acquisizione as valore_a4_4_0_ 
    from
        acquisizione this_ 
    where
        this_.id_sensore=?

Если я прокомментирую код

"// acquisizioneDao.generaAcquisizioni (acquisizione);"

присутствует в методе run () класса HergaRunnable,

вывод:

    Numero :37.27787955579307 alla data : Thu Sep 06 10:36:41 CEST 2018 pool-1-thread-1
10:36:41.494 [http-bio-8080-exec-10] INFO  c.w.springmvc.dao.UserDaoImpl - findById Sensore
Hibernate: 
    select
        sensore0_.id_sensore as id_senso1_5_0_,
        sensore0_.descrizione as descrizi2_5_0_,
        sensore0_.nome_sensore as nome_sen3_5_0_,
        sensore0_.unita_misura as unita_mi4_5_0_,
        sensore0_.valore_limite as valore_l5_5_0_,
        sensore0_.valore_massimo as valore_m6_5_0_,
        sensore0_.valore_minimo as valore_m7_5_0_,
        sensore0_.valore_range as valore_r8_5_0_ 
    from
        sensore sensore0_ 
    where
        sensore0_.id_sensore=?
10:36:41.504 [http-bio-8080-exec-10] INFO  c.w.springmvc.dao.UserDaoImpl -  getAcquisizioni per il sensore : 3
Hibernate: 
    select
        this_.id_acquisizione as id_acqui1_4_0_,
        this_.commenti as commenti2_4_0_,
        this_.id_sensore as id_senso3_4_0_,
        this_.valore_acquisizione as valore_a4_4_0_ 
    from
        acquisizione this_ 
    where
        this_.id_sensore=?
10:36:41.512 [http-bio-8080-exec-10] INFO  c.w.s.d.HibernateTokenRepositoryImpl - getPrincipal
Numero :82.95177323858331 alla data : Thu Sep 06 10:36:43 CEST 2018 pool-1-thread-1
Numero :89.2202317734951 alla data : Thu Sep 06 10:36:45 CEST 2018 pool-1-thread-1
Numero :93.21668730833589 alla data : Thu Sep 06 10:36:47 CEST 2018 pool-1-thread-1
Numero :94.08899028381322 alla data : Thu Sep 06 10:36:49 CEST 2018 pool-1-thread-1

Я все перепробовал, но не могу понять, как решить, не могли бы вы мне помочь, пожалуйста?

...