Olá pessoal bacana do GUJ. Estou lançando um problema que deve interessar a todos e pode ser que alguém já tenha passado por isso.
Estou executando o JMeter para rodar uma servlet que deveria fazer o seguinte.
Atualizar um contator em um tabela (Campanha)
inserir linhas e outra tabela (Control_Flow)
As Tabelas
CREATE TABLE campanha
(
id_campanha bigserial NOT NULL,
insertion_reach bigint,
CONSTRAINT campanha_pkey PRIMARY KEY (id_campanha)
)
WITH (
OIDS=FALSE
);
ALTER TABLE campanha
OWNER TO postgres;
CREATE TABLE control_flow
(
id_control bigserial NOT NULL,
callid character varying(255),
id_campanha bigint,
id_cdr bigint,
msisdn character varying(255),
operation_date timestamp without time zone,
CONSTRAINT control_flow_pkey PRIMARY KEY (id_control)
)
WITH (
OIDS=FALSE
);
ALTER TABLE control_flow
OWNER TO postgres;
CREATE OR REPLACE FUNCTION UP_reach() RETURNS trigger AS $UP_reach$
BEGIN
update campanha set insertion_reach=insertion_reach+1 where id_campanha=new.id_campanha;
RETURN new;
END;
$UP_reach$ LANGUAGE plpgsql;
-- Trigger: up_reach on control_flow
-- DROP TRIGGER up_reach ON control_flow;
CREATE TRIGGER up_reach
AFTER INSERT
ON control_flow
FOR EACH ROW
EXECUTE PROCEDURE up_reach();
O que acontece vejam só.
Eu executo o JMetter com 10 threads , 1 segundo e 1 iteração para uma servlet que aciona o hibernate que insere na tabela contro_flow.
Nessa Contro_Flow conforme o que executei no JMetter são inseridas 10 linhas, perfeito , mas na tabela campanha não reflete o mesmo numero de inserções feitas.
Debugando o java verifiquei que realmente roda o comando de inserção do control_flow vejam o retorno no log:
Informações: Hibernate: insert into control_flow (callid, id_campanha, id_cdr, msisdn, operation_date) values (?, ?, ?, ?, ?)
Na tabela campanha isso não aconteceu ficou com o contador diferente como se não tivesse executado a trigger.
Quando eu mudo a forma de executar o Jmeter colocando thread =1 e iteração = 10 , ai funciona perfeitamente. Como pode?
Eu ja tentei fazer o update pelo java e o resultado é o mesmo. O problema esta no multithread.
Alguém poderia ajudar?
Muito obrigado