There is no other mechanism in JEE5. ServletContextListener is the best, portable solution.
In JEE6, you can use Singleton EJB. You can annotate Singleton EJB with @Startup, and the EJB will be created when the application starts. Thus, for a pure EJB application without a WAR component, this will be the mechanism for this.