Ovm, dynamic arrays, sequences

I am very new to ovm, and I am very confused and feeling lost. Any help is greatly appreciated.

I have a sequence that looks like this. I removed parts of the code that are not relevant to this question.

Q1. Currently I have the wdata declared as a fixed size array and fill it in pre_body(), but ideally
I would like it to be burst_len size and fill it with random data.
Q2. Right now the sequence executes only one transaction. I would like to have it called in a loop with
different random data each time. Where should add the loop? Currently even if I add a loop
some where, my_xxx_data stays constant the way I have it setup.
How do I achieve this?

virtual class jtag_base_sequence extends ovm_sequence #(jtag_transaction);
rand drp_address_t my_drp_addr;
rand drp_data_t my_drp_wdata[32];
rand int my_burst_len;
endclass

class drp_command_seq extends jtag_base_sequence;
`ovm_sequence_utils(drp_command_seq,jtag_sequencer)

task body();
`ovm_do_with(req, {jtag_command==my_jtag_command; drp_addr==my_drp_addr;
drp_rw==my_drp_rw; burst_len==my_burst_len; burst==my_burst;
foreach(drp_wdata[i]) drp_wdata[i] == my_drp_wdata[i];
});
get_response(rsp);
endtask
endclass

class my_single_write_seq extends drp_command_seq;
`ovm_sequence_utils(my_single_write_seq,jtag_sequencer)

virtual task pre_body();
my_drp_wdata[0]= 16’h1234;
my_burst_len=1;
endtask
endclass

class single_write extends jtag_base_test;
`ovm_component_utils(single_write)

 virtual function void build();
    set_config_string("my_jtag_env.jtg_agent.seqr", "default_sequence",
                      "my_single_write_seq");
    super.build();
 endfunction : build

endclass: single_write