This week's book giveaway is in the OCMJEA forum. We're giving away four copies of OCM Java EE 6 Enterprise Architect Exam Guide and have Paul Allen & Joseph Bambara on-line! See this thread for details.
This is vendor-specific. However, to be as portable as possible it is best to place your logic in a class separate from your startup class. Then your vendor-specific startup class can act as a facade. Thus when you need to support multiple vendors it should be a simple process to write another facade for each specific application server.
That would be making the assumption that the application is using Servlets. Many J2EE Applications have the need for startup events and are not using Servlets. In these cases you are at the mercy of the Application Servers feature set.