The technology is immature
Experts are hard to find, though those who claim expertise are easy to find
Java is not entirely platform independent
Write once, test everywhere
EJB and other Java architectures and APIs are attempting to resolve some of these issues by defining standard interfaces to various types of software
Performance is a major issue with EJB applications
Development tools are maturing rapidly and provide many aids to help automate EJB development, but these aids are sometimes dependent on a specific version of Java or the EJB specification
EJB requires an object-oriented methodology to generate an appropriate design, and those skills are lacking at many companies
Server-based applications in general have great potential
Deployment to centralized, predictable platforms eliminates many problems
The use of a browser as a client is both good and bad
It's good because the developer can rely on a single set of interface design components to reach a global audience
It's bad because the set of components is rather limited, and it is difficult to design a rich, effective interface for many applications
Licensing issues (such as the number of concurrent database connections) can be better managed
Servers can become bottlenecks under high loads
Many companies are now either evaluating EJB or beginning to build applications with the architecture. Some early adopters have already deployed EJB-based applications [6]