This is VERY different than Oracle, but I think I know how it works now. My pgplsql function is going to be called via JDBC. This function is a replacement for an Oracle TABLE function. In Oracle PL/SQL, all commits and rollbacks are handled within the TABLE function. This means that the JDBC layer never has to deal with the transaction; only the session. Our Java coders never do Commit or Rollback. Since, from the Java code, we are only changing the JDBC Driver (in order to migrate to Postgres), my new understanding is that the Java code will have to be responsible for try/catch(ing) any errors raised from pgplsql. The Java code must then decide weather a rollback or a commit is required. This will require a slight bit more coordination between the Java and pgplsql developer.
Have I got this right?
Yes, your application initiates and ends all transactions. The JDBC merely provides a client API you can leverage to perform your work - and handles all of the protocol details.