Java EE

**Java 2 Platform, Enterprise Edition** (*Nền tảng Java, phiên bản 2 - phiên bản công nghiệp* là công nghệ của Sun Microsystems) hay **Java EE** (gọi tắt là J2EE) là một nền lập trình dành cho việc phát triển ứng dụng phân tán kiến trúc đa tầng, chủ yếu dựa vào các thành phần môđun chạy trên các máy chủ ứng dụng. Java EE còn được xem như là một ngôn ngữ hay một tiêu chuẩn vì để có thể công bố là sản phẩm của họ *tương thích với Java EE*, các nhà cung cấp phải tuân thủ một số yêu cầu đã đặt ra; mặc dù chúng không phải là các tiêu chuẩn của ISO (*International Standard Organization*) hay của Hiệp hội nhà sản xuất máy tính châu Âu (*European Computer Manufacturers Association - gọi tắt là ECMA*).

Java EE bao gồm một số đặc tả kĩ thuật API, như JDBC (*Cơ cấu liên nối với cơ sở dữ liệu*), RMI (*thi hành phương pháp từ xa*), thư điện tử (*e-mail*), JMS (*Java Message Service - Dịch vụ thông điệp của Java*), Dịch vụ mạng (*Web services*), XML vân vân, và đồng thời nó còn định nghĩa cấu trúc liên nối giữa những kĩ thuật này với nhau. J2EE còn bao gồm một số đặc tả chỉ tồn tại trong các thành phần của nó. Những thành phần này bao gồm Enterprise JavaBean (*chủ thể Bean dùng trong kinh doanh*), servlet, portlet, JSP và một số các kĩ thuật về dịch vụ mạng (*web service*). Điều này cho phép nhà phát triển tạo ra một chương trình ứng dụng kinh doanh (*enterprise application*) không những chỉ có thể sử dụng trên các nền tảng khác nhau, mà còn có thể khuếch trương thành những quy mô lớn hơn và tích hợp với những công nghệ kế thừa từ trước đây. Trình chủ của Java EE có thể quán xuyến các giao dịch (*transactions*), nhiệm vụ bảo an (*security*), chức năng đa biến số bất định lượng (*arity*), tính quy mô hóa (*scalability*), sự tương tranh (*concurrency*) và quản lý các thành phần đã được triển khai trong môi trường của nó. Điều này có nghĩa là các nhà phát triển có thể tập trung vào các lôgic thương mại của các thành phần thay vì phải quan tâm đến cơ sở hạ tầng và các nhiệm vụ tích hợp khác.

## API chung

Các API của Java EE chứa đựng một số kỹ thuật được mở rộng thêm từ những chức năng trong các API của Java SE.

### javax.ejb.*

API về chủ thể cấp kinh doanh (*Enterprise Java Beans* - hay EJB) cung cấp một tập các hàm API mà một khung chứa đối tượng phân tán (*distributed object container*) phải hỗ trợ để có thể cung cấp tính bền bỉ (*persistence*), khả năng liên lạc từ xa (dùng RMI), khả năng khống chế tương tranh (*concurrency control*) và điều khiển truy cập (*access control*) cho các đối tượng phân tán (*distributed objects*).

### javax.servlet
API về Servlets cung cấp một tập các hàm API giữa một khung chứa mạng (*web container*) và một servlet nhằm đảm nhiệm việc xử lý các yêu cầu và hồi âm các phản ứng.

### javax.servlet.jsp
Các gói javax.servlet.jsp và javax.servlet.jsp.tagext cung cấp các hàm API về JSP.

### javax.naming
Các gói javax.naming, javax.naming.directory, javax.naming.event, javax.naming.ldap và javax.naming.spi định nghĩa các hàm API đối với các giao tiếp (*Interface*) sử dụng tên trong khi truy cập đối tượng và thư mục (*Java Naming and Directory Interface* - JNDI).

### java.sql, javax.sql
Các gói java.sql và javax.sql cung cấp các hàm liên nối với cơ sở dữ liệu (*Java Database Connectivity* - JDBC).

### java.transaction.*
Các gói này cung cấp các API để quản lý việc giao dịch giữa các nguồn tài nguyên khác nhau (*Java Transaction API* - JTA).

### javax.xml.*

Các gói này cung cấp các hàm API để xử lý các tài liệu XML (*Java API for XML Processing* - JAXP).

### javax.jms.*

Các gói này cung cấp các hàm API sử dụng trong dịch vụ thông điệp của Java (*Java Message Service* - JMS).

## Phát triển với chi phí thấp

Một trong những lợi điểm của việc sử dụng nền tảng Java EE là nó cho phép chúng ta khởi công mà tốn rất ít công sức. Chúng ta có thể tải bản thực thi Java EE từ Sun miễn phí. Đồng thời cũng có rất nhiều các công cụ mã nguồn mở hữu ích cho phép mở rộng nền tảng hay đơn giản hóa quá trình phát triển.

Một số ví dụ về các công cụ phát triển Java mã nguồn mở của các hãng bên ngoài (thứ ba):

* NetBeans IDE, môi trường phát triển tích hợp dựa trên Java
* Nền Eclipse, môi trường phát triển tích hợp dựa trên Java
* Jedit, công cụ biên tập văn bản nguồn dựa trên Java mã nguồn mở 
* Jakarta Tomcat, một khung chứa JSP trong ứng dụng mạng (*Servlet/JSP web container*)
* Jakarta JMeter, công cụ kiểm thử chất lượng dòng tải cho các máy chủ web
* Apache (*Apache Software Foundation - Sáng hội phần mềm Apache*) Ant (*Apache Ant*), công cụ xây dựng phần mềm (*build*) tự động
* JUnit, một khung hình kiểm thử đơn vị (*unit tests*) tự động
* Jasper Reports, công cụ viết báo cáo (*report writer*)
* JBoss, trình chủ mã nguồn mở (*application server*) 
* GlassFish, trình chủ mã nguồn mở của công ty Sun Microsystems.
* Geronimo, an open-source application server
* JOnAS, một trình chủ mã nguồn mở
* exteNd một bộ phần mềm giúp việc tạo dựng các chương trình ứng dụng mạng của Novell. Đã gián đoạn từ năm 2005.
* Jetty, một trình chủ HTTP (*HTTP Server*) sử dụng Java và một khung chứa Servlet (*Servlet Container*)
* Struts, một khung hình dành cho việc tạo các trình ứng dụng mạng sử dụng JavaEE 
* Resin (*Resin application server* - trình chủ Resin), một trình chủ có hỗ trợ XML (*integrated XML support*)

## Java EE vs..NET

Những đánh giá xoay quanh Java EE vs. Microsoft's.NET. Một ý kiến chung ("consensus") cho rằng Java EE tốt hơn cả cho kiến trúc đa nền, trong khi .NET nên dùng giới hạn cho nền Microsoft (và không thể tích hợp với các nền không phải của Microsoft).

## Ấn bản
* Paul J. Perrone, Krishna Chaganti: *J2EE Developer's Handbook*, Sam's Publishing, ISBN 0-672-32348-6
* *The J2EE Tutorial*, Addison-Wesley, ISBN 0-321-24575-X
* Solveig Haugland, Mark Cade, Anthony Orapallo: *J2EE 1.4: The Big Picture*, Prentice Hall, ISBN 0-13-148010-3
* Alan Monnox: *Rapid J2EE Development: An Adaptive Foundation for Enterprise Applications*, Prentice Hall, ISBN 0-13-147220-8
* Renaud Pawlak, Lionel Seinturier, Jean-Philippe Retaillé: *Foundations of AOP for J2EE Development*, ISBN 1-59059-507-6
* Christopher Judd, Hakeem Shittu: *Pro Eclipse JST: Plug-ins for J2EE Development*, ISBN 1-59059-493-2

## Xem thêm
* J2EE Modeling Language
* LAMP
* Ruby on Rails

## Tham khảo

## Liên kết ngoài
* Sun's J2EE page - official documentation
* J2EE Interview Questions 
* JavaRSS.com  A Java portal of Java websites rich in Java & J2EE News, Articles, Blogs, Groups and Forums.
* Leading Adapter Provider  - Librados Adapters
* Javalobby.org  - popular Java, JSP & J2EE developer forums
* EJB Certification
* TheServerSide.com - popular discussion site for J2EE developers
* Microsoft.NET vs. J2EE: How Do They Stack Up? 
* Jim Farley 08/01/2000. (O'Reilly 2004.)
* JavaToolbox  List of the available development tools and libraries for Java/J2EE
* Java BluePrints - Sun's best practices for Java 2, Enterprise Edition application development.

Các ví dụ về Java EE application servers bao gồm:
* Pramati Server (http://www.pramati.com)
* JBoss Application Server (http://www.jboss.org/products/jbossas )
* JRun by Macromedia (http://www.macromedia.com/software/jrun/)
* JOnAS by ObjectWeb consortium (Java Open Application Server, http://jonas.objectweb.org )
* Geronimo Application Server by Apache Software Foundation (http://geronimo.apache.org)
* Sun Java System Application Server (http://www.sun.com/software/products/appsrvr/home_appsrvr.xml )
* BEA WebLogic (http://bea.com/framework.jsp?CNT=index.htm&FP=/content/products/server )
* WebSphere Application Server by IBM (http://www-306.ibm.com/software/webservers/appserv/was/features)
* Borland Enterprise Server (http://www.borland.com/bes/appserver )
* Orion Application Server by IronFlare (http://www.orionserver.com )
* Oracle Application Server (http://www.oracle.com/appserver)
* J2EE Architects Handbook (http://www.dvtpress.com/javaarch )
* CAS OnceAS (http://www.once.com.cn/)
* More: Certified J2EE servers list (http://java.sun.com/j2ee/compatibility.html)
* Resin application server (http://www.caucho.com/)