Olá pessoal,
começei recentemente a programar em Java e agora estou a construir uma aplicação J2EE. Tenho um problema pois penso que estou a fazer confusão entre JPA e EJB.
JPA é a especificação e por ex: Hibernate é uma implementação. Agora já li em alguns sites que EJB é coisa do passado, basta JPA.
Isso quer dizer que já não é preciso criar um Interface + um Bean com @PersistenceContext(unitName = “website”) EntityManager em; ? basta usar no POJO?
Agradecia qualquer ajuda acerca disto.
muito obrigado
António Godinho
[quote=buyapentiumjerk]Olá pessoal,
começei recentemente a programar em Java e agora estou a construir uma aplicação J2EE. Tenho um problema pois penso que estou a fazer confusão entre JPA e EJB.
JPA é a especificação e por ex: Hibernate é uma implementação. Agora já li em alguns sites que EJB é coisa do passado, basta JPA.
Isso quer dizer que já não é preciso criar um Interface + um Bean com @PersistenceContext(unitName = “website”) EntityManager em; ? basta usar no POJO?
Agradecia qualquer ajuda acerca disto.
muito obrigado
António Godinho[/quote]
EJB e JPA são independentes.
Um não é pré-requisito do outro tão pouco mutuamente exclusivos.
[quote=buyapentiumjerk]Olá pessoal,
começei recentemente a programar em Java e agora estou a construir uma aplicação J2EE. Tenho um problema pois penso que estou a fazer confusão entre JPA e EJB.
JPA é a especificação e por ex: Hibernate é uma implementação. Agora já li em alguns sites que EJB é coisa do passado, basta JPA.
Isso quer dizer que já não é preciso criar um Interface + um Bean com @PersistenceContext(unitName = “website”) EntityManager em; ? basta usar no POJO?
Agradecia qualquer ajuda acerca disto.
muito obrigado
António Godinho[/quote]
EJB coisa do passado . Nao.
EJB hoje tambem funfa com pojos… e a versao mais nova, quando local, nem interface precisa mais.
EJB e JPA sao duas propostas http://jcp.org/en/jsr/detail?id=317 e http://jcp.org/en/jsr/detail?id=318 que se cruzam. =) Nao achei nada melhor pra explicar isso. Assim, a parte de persistencia do EJB pode ser feita com JPA… mas EJB vai mais alem.
Hibernate não e um implementação da especificação JPA
Obrigado pela ajuda pessoal, o mundo de Java é um universo autêntico e ao principio é dificil acertar.
Eu pretendo fazer uma aplicação J2EE utilizando JSF, Primefaces, MySQL, JBoss AS 6 e Hibernate (com Envers também), já tinha feito uma aplicação com SWING e Hibernate com uso de um DAO, Controller e POJOs, tudo funcionou na perfeição, mas para fazer uma aplicação J2EE está a ser mais dificil visto que não utiliza o SessionFactory do Hibernate.
POJO:
...
@Entity
@Table(name = "USERS")
public class UsersPOJO implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "USER_ID", nullable = false, unique = true)
private Long userId;
@Column(name = "USER_NAME", nullable = true, length = 25)
private String userName;
@Column(name = "USER_LOGIN", nullable = false, length = 25)
private String userLogin;
@Column(name = "USER_PASSWORD", nullable = false, length = 10)
private String userPassword;
@Column(name = "USER_ACTIVE", nullable = false, length = 1)
private Boolean userActive;
@ManyToOne(targetEntity = RolesPOJO.class)
@JoinColumn(name = "USER_ROLE")
private RolesPOJO userRole;
...
Pelo que pesquisei pela net terei de utilizar:
@PersistenceContext(unitName = "<nome_da_persistence_unit>")
private EntityManager em;
A minha persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="website">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:/MySqlDS_muzzikka.com</jta-data-source>
<class>com.muzzikka.website.model.UsersPOJO</class>
<class>com.muzzikka.website.model.RolesPOJO</class>
<class>com.muzzikka.website.model.PermissionsPOJO</class>
</persistence-unit>
</persistence>
O meu problema em iniciar o desenvolvimento é perçeber onde utilizarei esse código? Será em algum Bean? ou será na classe de formulário para as facelets? Ou até no próprio POJO?
Muito obrigado pela ajuda,
António Godinho
É, sair do mundo desktop para o Web da um choque básico rsrs
A propósito, por que não usa JBoss 7 de uma vez? Acabou de ser lançado, se for ficar nessa esfera vale a pena verificar.
Outro ponto interessante, dê uma olhada em CDI
Tenha bem sendimentado conceitos de injeção de dependência.
One more thing: é muita coisa pra pouco tempo, então não se incomode ao constatar ao final do projeto que fez tudo errado e faria tudo diferente.
Abraços.
Olá Tchello,
obrigado pela resposta. Eu já andei a investigar JBoss 7, muito mais rápido (peraçe me que apenas lança os serviços à medida que vão sendo necessários), mas pareçe-me muito diferente do AS 6 peleo menos a criar uma DataSource, e o problema é o suporte para o Eclipse Indigo ainda não ser perfeito a versão final do JBoss Tools ainda não foi lançada, pelo que vou esperar para depois utilizar.
Entretanto queria aprender a fazer aplicações J2EE mas não está sendo fácil, por acaso voçê não me poderá indicar um tutorial de preferência em Português?
Obrigado,
António Godinho
Estou a implementar uma classe Bean e um Interface,
Interface:
package com.muzzikka.website.bean;
import java.util.List;
import javax.ejb.Remote;
import com.muzzikka.website.model.PermissionsPOJO;
import com.muzzikka.website.model.RolesPOJO;
@Remote
public interface PermissionsInterface {
public void doAction();
public PermissionsPOJO createPermission(Long permissionId, String permissionName,
String permissionDescription, Boolean permissionActive,
List<RolesPOJO> permissionRoleList);
public void removePermission(Long permissionId);
public PermissionsPOJO findPermission(Long permissionId);
public List<PermissionsPOJO> findAllPermissions();
}
classe Bean:
package com.muzzikka.website.bean;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import com.muzzikka.website.model.PermissionsPOJO;
import com.muzzikka.website.model.RolesPOJO;
@Stateless
public class PermissionsInterfaceBean implements PermissionsInterface {
@PersistenceContext(unitName = "website")
private EntityManager entityManager;
// @TransactionAttribute(TransactionAttributeType.REQUIRED)
// public void ejbMethod() throws Exception {
// PermissionsPOJO permission = entityManager.find(PermissionsPOJO.class,
// 1);
// permission.setPermissionName("teste");
// }
@Override
public void doAction() {
// TODO Auto-generated method stub
}
@Override
public PermissionsPOJO createPermission(Long permissionId,
String permissionName, String permissionDescription,
Boolean permissionActive, List<RolesPOJO> permissionRoleList) {
PermissionsPOJO permission = new PermissionsPOJO(permissionId,
permissionName, permissionDescription, permissionActive,
permissionRoleList);
entityManager.persist(permission);
permission = findPermission(permissionId);
System.out.println(permission);
entityManager.flush();
return permission;
}
@Override
public void removePermission(Long permissionId) {
PermissionsPOJO permission = findPermission(permissionId);
if (permission!=null) {
entityManager.remove(permission);
}
}
@Override
public PermissionsPOJO findPermission(Long permissionId) {
return entityManager.find(PermissionsPOJO.class, permissionId);
}
@Override
public List<PermissionsPOJO> findAllPermissions() {
Query query = entityManager.createQuery("SELECT e FROM PERMISSIONS e");
return (List<PermissionsPOJO>) query.getResultList();
}
}
Isto poderá ser considerado como um DAO? Depois como faço para chamar este"DAO"? através de uma classe com @ManagedBean a qual está ligada à página JSF?
Muito obrigado,
António Godinho