In typical J2EE application, one similar to petstore, we use a DataSource object to lookup a database and goahead with the transactions. Isn't this a case of Type 3 driver being used ? Since the end-client always accesses the database through the app-server - let me know if otherwise.
Please forgive me if this is hopelessly naive but, why would DB access via a DataSource object preclude (or imply) use of any particular type of JDBC driver? All 4 types can be called from Java code at the server side...
Ofcourse all 4 types of drivers can be called from Java code at the server side but DataSource implementation also provides you features like Connection Pooling, Distributed Transaction implementation, So you don't have to worry about that when writing your data access code.
I hope I have answered your question to some extent.