Is there a way to impose positive domain on a selection of variables in odesolver

I think you should be able to use isoutofdomain. Something like

outofdomain(u, p, t) = u[1] < 0.0 || u[2] < 0.0

soln = solve(prob, ..etc; isoutofdomain=outofdomain)