Acceso a la tabla de la base de datos a través de JPA vs. EJB en una aplicación web

Estoy diseñando un Aplicación web que acceden a muchas tablas de la base de datos. Estoy tratando de averiguar cuál es la forma preferida de acceder a esas tablas. ¿Es a través de JPA o EJB?

Gracias nathan

preguntado el 09 de enero de 11 a las 12:01

2 Respuestas

La respuesta es "ambos".

El propio EJB no accede a ninguna tabla de base de datos. Todo lo que hace en Java que se relaciona con la base de datos ocurre a través de la API de persistencia de Java (JPA), o si desea hacer cosas de bajo nivel a través de JDBC, pero no entremos en eso aquí.

Lo que EJB aporta es una gestión de transacciones muy sencilla. Siempre los necesita con JPA, y es un poco complicado administrarlos manualmente. EJB también le brinda un acceso muy fácil a la clase principal que usará en JPA para interactuar con la base de datos: el administrador de la entidad.

El uso de EJB en la práctica es para muchas situaciones simples y ligeras, nada más que agregar la anotación @Stateless a un bean:

@Stateless
public class FooService {

    @PersistenceContext
    private EntityManager entityManager;

    public Foo getByID(Long fooID) {
        return entityManager.find(Foo.class, ID);
    }
}

Sin EJB, el código para hacer esta simple búsqueda sería mucho más más detallado. Y sin JPA, simplemente no habría ningún código. Como se dijo anteriormente, EJB no tiene ninguna funcionalidad para acceder a la base de datos.

Respondido el 09 de enero de 11 a las 15:01

A menos que esté construyendo un sistema empresarial y necesite la complejidad adicional de EJB, simplemente use JPA. Me parece que acaba de crear una aplicación web y necesita un acceso simple a la base de datos: elija JPA. Usamos OpenJPAy no tengo problemas con él.

Respondido el 09 de enero de 11 a las 18:01

Realmente no estoy de acuerdo con eso. EJB no agrega complejidad, quita complejidad. En cualquier servidor compatible con el perfil web, simplemente agrega una anotación @Stateless a un bean y eso es todo. Al usar JPA manualmente, debe rodear cada operación con try catch finalmente, iniciar la transacción, hacer comprobaciones, y confirmar o deshacer y cerrar la sesión. Eso es mucha complejidad en mi libro, en comparación con solo agregar una sola anotación @Stateless. La aplicación web más básica se beneficia enormemente de EJB. Es por eso que forma parte del perfil web y se implementa mediante servidores superligeros como Resin. - Arjan Tijms

Agrega complejidad absolutamente si lo está usando para una aplicación simple que no necesita las soluciones a los problemas que resuelve, y sugeriría que usar EJB solo para administrar una transacción simple es excesivo. En una aplicación simple, esa lógica podría manejarse igualmente bien mediante un código simple en un ServletFilter, o simplemente manualmente. - Joel

Sigo sin estar de acuerdo. No hay nada excesivo en agregar la anotación @Stateless a un bean. El manejo manual de transacciones de bajo nivel es más propenso a errores, más detallado, más complejo y hace que el código sea más difícil de leer y, por lo tanto, de mantener. En estos días, los EJB son extremadamente livianos. Quizás recuerde los viejos beans EJB 2, que de hecho habrían sido excesivos. Pero no EJB 3 y ciertamente no EJB3.1 lite. Especialmente estos últimos están diseñados específicamente para aplicaciones realmente simples. No requieren ningún xml o interfaz y se pueden poner directamente en un paquete arbitrario en una guerra simple. - Arjan Tijms

Todavía no he usado EJB3, esto es cierto, aunque siempre desconfío de usar otra API para resolver un problema simple. ¡Tendremos que aceptar estar en desacuerdo con eso! Sin embargo, definitivamente recomendaría el uso de JPA sobre JDBC sin formato de una forma u otra. La gran ventaja que encontré fue que ya no tenía que mantener archivos de esquema SQL, sino que generaba el esquema directamente desde mis entidades. - Joel

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.