It depends a lot on the implementation of your custom socket server.
First, it may not be necessary to lock each job record the entire time it's being accessed. Pervasive uses passive concurrency, which in a nutshell, only attempts a lock on a record when it is updated, not when it is read. If the Microkernel detects a conflict between the updates of two users, it returns a status 80 to the second, at which time the application can re-read the record and apply the second user's changes and re-update.
If you need stronger concurrency control than that, you can have the socket server read the record with one of the several available lock biases. There are several options available: Single wait record lock, single no-wait record lock, multiple wait record lock, multiple no-wait record lock. These are all fully documented in the SDK documentation. One problem I see is if the PDA application terminates while it has a record locked, your socket server is still going to have to release the read lock on the record somehow. Might be safer to just go with the passive concurrency. It works fine, it's just a different way of looking at things.
You haven't mentioned whether the socket server is using the Btrieve Transactional API or SQL. If you're using SQL, then passive concurrency is also the default in that case because passive concurrency is implemented at the microkernel level. You can implement implicit record locking in SQL by adding the "WITH UPDATE" clause to the SELECT.
Last, can't you use JDBC on the PDAs?
Wayne Freeman
www.analyticabiz.com