The main advantage is access to the API's and language features not found in PL/SQL. For example, I have used them for regular expression processing, file/directory manipulation and XML parsing.
There are a number of disadvantages:
- Poor tool support
- Lack of control over the JVM
- DBA's often aren't trained in Java. In order to support your production code you'll either either need to give your DBA's more training or hire Java-trained support staff
Moving the Java to an application server is often a better approach as this counteracts the disadvantages. There is excellent tool support, great control over the JVM and there are heaps of people trained up in the popular application servers so finding support staff is easy. There is the opportunity cost of the performance hit moving away from the database but keeping Java close to the database doesn't give you great performance gains anyway.
You definitely need a reason to use Java in the database over a) PL/SQL stored procedures or b) Java outside the database.