In this post I'll give you a brief overview of the different ways to deploy (or "push") Java web applications to IBM Bluemix and some guidance on which way is right for you. Let's start with a little background information to put everything in context.
IBM Bluemix provides support for running Java web application via the WebSphere Liberty Buildpack. This buildpack uses the IBM WebSphere Liberty Profile, a fast lightweight, extensible server for running the most commonly used components defined in the JEE standard. This lightweight flexibility is directly attributable to the architecture of the WebSphere Liberty Profile where all the capabilities of the server are partitioned into composable building blocks called features. When you deploy your own application you only need to include the features you actually use, resulting in a minimal footprint based only on the needs of your applications. This customization is done via a text file named server.xml. So for example, if your applications only use Servlets, Java Server Pages and JPA, those are the only features that you need to include in server.xml. If you have subsequent needs for additional features (e.g you want to enable SSL) you can add the appropriate features to server.xml when you need them.
So how does this affect the way you deploy (or "push") your Java web applications to Bluemix ? Well Bluemix provides two ways to deploy your application and the necessity to use one over the other primarily hinges on whether or not you need to customize server.xml
Standalone application - In this option you deploy your single .war or .ear file and the Bluemix Liberty Buildpack will provide a standard server.xml file for you that you cannot edit directly. Here's an example of this type of deployment using the Cloud Foundry command line tools:
cf push -p myawesomeapp.war
Server deploy - In this option your configure a local WebSphere Liberty server just the way you want it and then deploy the whole thing (including your customized server.xml) to Bluemix. Here's an example of this type using the Cloud Foundry command line tools. (Note the extra parameter to require at least 512Mb of memory - this is recommended in the documentation for the Liberty Buildpack when you use this option)
cf push myServer -m 512m -p c:\Users\me\liberty\usr\servers\MyAwesomeServer
The documentation also has comprehensive information about all aspects of deploying with the WebSphere Liberty Buildpack. It clearly lays out the implications of using the two different "push" models with different build pack capabilities so understanding those models makes the documentation easy to digest.
For more information about which WebSphere Liberty Profile features are needed in different programming scenarios consult the WebSphere Liberty Profile Knowledge Center.