In the simplest case, there is no custom code on the server. The server would only contain Cayenne mapping files, persistent classes and web.xml descriptor specifying deployment parameters of the service. Customization is done via subclassing org.objectstyle.cayenne.remote.hessian.service.HessianServlet, and adding business logic to the server-side persistent objects (e.g. in the validation methods).