EJBs have a number of restrictions placed on them by the EJB specification. In the code you can't start a new thread, and you can't use socket to act as a server. (However you can connect to a socket as a client.) Other restrictions are listed in the spec.
These restrictions are there so that the EJB server application handles low-level functionality, the developer can concentrate on writing business logic instead. Instead of saying that EJBs do not support certain features, you could say that certain functionalities found in
Java have been deliberately restricted to produce more reliable applications.