I'm sure there are other ways to do it and probably easier for just simply stopping and restarting (maybe a batch or .sh file with a pause and check for the B4J server app process to no longer be running) but for all of my B4J servers, they have the ability to self-update if an updated .jar file is found. To reliable do that, I built another B4J server app that's generic and can be used with any of my B4J servers to update them.
So, the main B4J Server finds the update file via a timer. Runs the Updater App. Closes itself. The updater app copies over the new, main B4J server .jar file and runs it. The Updater App closes itself. All done through running a shell in each B4J server app.