The difference is their deployment environment. EJBs are designed to be deployed in a container (much the same as Servlets, if you are familiar with those?) and as such can use container provided services. This means you can declaratively configure their behaviour, for example define a method as running in a transaction or be restricted for use by user's with cetrain roles. The "increased fucntionality" you are perhaps refering to tends to be non-functional stuff rather than pre-canned behaviour. Have a read of this tutorial for the basics.