Сущности, не создаваемые в базе данных
В следующей части моей саги о том, чтобы EJB работал, надеясь, что кто-то здесь может мне помочь
Вот мой журнал сервера, в котором говорится, что мое развертывание прошло успешно:
2012-03-11 22:02:41,837 INFO [org.jboss.web.tomcat.service.deployers.TomcatDeployment] (HDScanner) undeploy, ctxPath=/SE2-war
2012-03-11 22:02:41,882 INFO [org.jboss.jpa.deployment.PersistenceUnitDeployment] (HDScanner) Stopping persistence unit persistence.unit:unitName=SE2.ear/SE2-ejb.jar#wvp08heuPU
2012-03-11 22:02:42,429 WARN [org.jboss.ejb3.interceptor.InterceptorInfoRepository] (HDScanner) EJBTHREE-1852: InterceptorInfoRepository is deprecated
2012-03-11 22:02:42,650 INFO [org.jboss.profileservice.management.upload.remoting.DeployHandler] (WorkerThread#0[127.0.0.1:3125]) invoke, payload: {DeploymentTargetID=names=[SE2.ear], clientAddress=/127.0.0.1}, parameter: start
2012-03-11 22:02:42,900 INFO [org.jboss.ejb3.deployers.JBossASKernel] (HDScanner) Created KernelDeployment for: SE2-ejb.jar
2012-03-11 22:02:42,901 INFO [org.jboss.ejb3.deployers.JBossASKernel] (HDScanner) installing bean: jboss.j2ee:ear=SE2.ear,jar=SE2-ejb.jar,name=NewSessionBean,service=EJB3
2012-03-11 22:02:42,901 INFO [org.jboss.ejb3.deployers.JBossASKernel] (HDScanner) with dependencies:
2012-03-11 22:02:42,901 INFO [org.jboss.ejb3.deployers.JBossASKernel] (HDScanner) and demands:
2012-03-11 22:02:42,902 INFO [org.jboss.ejb3.deployers.JBossASKernel] (HDScanner) jboss-switchboard:appName=SE2,module=SE2-ejb,name=NewSessionBean; Required: Create
2012-03-11 22:02:42,902 INFO [org.jboss.ejb3.deployers.JBossASKernel] (HDScanner) jboss.ejb:service=EJBTimerService; Required: Described
2012-03-11 22:02:42,902 INFO [org.jboss.ejb3.deployers.JBossASKernel] (HDScanner) and supplies:
2012-03-11 22:02:42,903 INFO [org.jboss.ejb3.deployers.JBossASKernel] (HDScanner) Class:ejb.NewSessionBeanRemote
2012-03-11 22:02:42,903 INFO [org.jboss.ejb3.deployers.JBossASKernel] (HDScanner) jndi:NewSessionBean
2012-03-11 22:02:42,903 INFO [org.jboss.ejb3.deployers.JBossASKernel] (HDScanner) jndi:SE2/NewSessionBean/remote-ejb.NewSessionBeanRemote
2012-03-11 22:02:42,903 INFO [org.jboss.ejb3.deployers.JBossASKernel] (HDScanner) jndi:SE2/NewSessionBean/remote
2012-03-11 22:02:42,904 INFO [org.jboss.ejb3.deployers.JBossASKernel] (HDScanner) Added bean(jboss.j2ee:ear=SE2.ear,jar=SE2-ejb.jar,name=NewSessionBean,service=EJB3) to KernelDeployment of: SE2-ejb.jar
2012-03-11 22:02:42,980 INFO [org.jboss.ejb3.session.SessionSpecContainer] (HDScanner) Starting jboss.j2ee:ear=SE2.ear,jar=SE2-ejb.jar,name=NewSessionBean,service=EJB3
2012-03-11 22:02:43,054 INFO [org.jboss.ejb3.EJBContainer] (HDScanner) STARTED EJB: ejb.NewSessionBean ejbName: NewSessionBean
2012-03-11 22:02:43,410 INFO [org.jboss.ejb3.proxy.impl.jndiregistrar.JndiSessionRegistrarBase] (HDScanner) Binding the following Entries in Global JNDI:
SE2/NewSessionBean/remote - EJB3.x Default Remote Business Interface
SE2/NewSessionBean/remote-ejb.NewSessionBeanRemote - EJB3.x Remote Business Interface
2012-03-11 22:02:43,411 WARN [org.jboss.ejb3.TimerServiceContainer] (HDScanner) EJBTHREE-2193: using deprecated TimerServiceFactory for restoring timers
2012-03-11 22:02:43,424 INFO [org.jboss.jpa.deployment.PersistenceUnitDeployment] (HDScanner) Starting persistence unit persistence.unit:unitName=SE2.ear/SE2-ejb.jar#wvp08heuPU
2012-03-11 22:02:43,454 INFO [org.jboss.web.tomcat.service.deployers.TomcatDeployment] (HDScanner) deploy, ctxPath=/SE2-war
2012-03-11 22:02:43,561 INFO [org.jboss.web.tomcat.service.deployers.TomcatDeployment] (WorkerThread#0[127.0.0.1:3125]) undeploy, ctxPath=/SE2-war
2012-03-11 22:02:43,621 INFO [org.jboss.jpa.deployment.PersistenceUnitDeployment] (WorkerThread#0[127.0.0.1:3125]) Stopping persistence unit persistence.unit:unitName=SE2.ear/SE2-ejb.jar#wvp08heuPU
2012-03-11 22:02:43,629 INFO [org.jboss.ejb3.session.SessionSpecContainer] (WorkerThread#0[127.0.0.1:3125]) Stopping jboss.j2ee:ear=SE2.ear,jar=SE2-ejb.jar,name=NewSessionBean,service=EJB3
2012-03-11 22:02:43,781 INFO [org.jboss.ejb3.EJBContainer] (WorkerThread#0[127.0.0.1:3125]) STOPPED EJB: ejb.NewSessionBean ejbName: NewSessionBean
2012-03-11 22:02:44,394 WARN [org.jboss.ejb3.interceptor.InterceptorInfoRepository] (WorkerThread#0[127.0.0.1:3125]) EJBTHREE-1852: InterceptorInfoRepository is deprecated
2012-03-11 22:02:44,418 INFO [org.jboss.ejb3.deployers.JBossASKernel] (WorkerThread#0[127.0.0.1:3125]) Created KernelDeployment for: SE2-ejb.jar
2012-03-11 22:02:44,425 INFO [org.jboss.ejb3.deployers.JBossASKernel] (WorkerThread#0[127.0.0.1:3125]) installing bean: jboss.j2ee:ear=SE2.ear,jar=SE2-ejb.jar,name=NewSessionBean,service=EJB3
2012-03-11 22:02:44,426 INFO [org.jboss.ejb3.deployers.JBossASKernel] (WorkerThread#0[127.0.0.1:3125]) with dependencies:
2012-03-11 22:02:44,426 INFO [org.jboss.ejb3.deployers.JBossASKernel] (WorkerThread#0[127.0.0.1:3125]) and demands:
2012-03-11 22:02:44,426 INFO [org.jboss.ejb3.deployers.JBossASKernel] (WorkerThread#0[127.0.0.1:3125]) jboss-switchboard:appName=SE2,module=SE2-ejb,name=NewSessionBean; Required: Create
2012-03-11 22:02:44,426 INFO [org.jboss.ejb3.deployers.JBossASKernel] (WorkerThread#0[127.0.0.1:3125]) jboss.ejb:service=EJBTimerService; Required: Described
2012-03-11 22:02:44,427 INFO [org.jboss.ejb3.deployers.JBossASKernel] (WorkerThread#0[127.0.0.1:3125]) and supplies:
2012-03-11 22:02:44,427 INFO [org.jboss.ejb3.deployers.JBossASKernel] (WorkerThread#0[127.0.0.1:3125]) Class:ejb.NewSessionBeanRemote
2012-03-11 22:02:44,427 INFO [org.jboss.ejb3.deployers.JBossASKernel] (WorkerThread#0[127.0.0.1:3125]) jndi:NewSessionBean
2012-03-11 22:02:44,427 INFO [org.jboss.ejb3.deployers.JBossASKernel] (WorkerThread#0[127.0.0.1:3125]) jndi:SE2/NewSessionBean/remote-ejb.NewSessionBeanRemote
2012-03-11 22:02:44,427 INFO [org.jboss.ejb3.deployers.JBossASKernel] (WorkerThread#0[127.0.0.1:3125]) jndi:SE2/NewSessionBean/remote
2012-03-11 22:02:44,428 INFO [org.jboss.ejb3.deployers.JBossASKernel] (WorkerThread#0[127.0.0.1:3125]) Added bean(jboss.j2ee:ear=SE2.ear,jar=SE2-ejb.jar,name=NewSessionBean,service=EJB3) to KernelDeployment of: SE2-ejb.jar
2012-03-11 22:02:44,466 INFO [org.jboss.ejb3.session.SessionSpecContainer] (WorkerThread#0[127.0.0.1:3125]) Starting jboss.j2ee:ear=SE2.ear,jar=SE2-ejb.jar,name=NewSessionBean,service=EJB3
2012-03-11 22:02:44,467 INFO [org.jboss.ejb3.EJBContainer] (WorkerThread#0[127.0.0.1:3125]) STARTED EJB: ejb.NewSessionBean ejbName: NewSessionBean
2012-03-11 22:02:44,475 INFO [org.jboss.ejb3.proxy.impl.jndiregistrar.JndiSessionRegistrarBase] (WorkerThread#0[127.0.0.1:3125]) Binding the following Entries in Global JNDI:
SE2/NewSessionBean/remote - EJB3.x Default Remote Business Interface
SE2/NewSessionBean/remote-ejb.NewSessionBeanRemote - EJB3.x Remote Business Interface
2012-03-11 22:02:44,477 WARN [org.jboss.ejb3.TimerServiceContainer] (WorkerThread#0[127.0.0.1:3125]) EJBTHREE-2193: using deprecated TimerServiceFactory for restoring timers
2012-03-11 22:02:44,484 INFO [org.jboss.jpa.deployment.PersistenceUnitDeployment] (WorkerThread#0[127.0.0.1:3125]) Starting persistence unit persistence.unit:unitName=SE2.ear/SE2-ejb.jar#wvp08heuPU
2012-03-11 22:02:44,529 INFO [org.jboss.web.tomcat.service.deployers.TomcatDeployment] (WorkerThread#0[127.0.0.1:3125]) deploy, ctxPath=/SE2-war
Вот моя единица постоянства и ее контекст:
<?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="wvp08heuPU" transaction-type="JTA">
<provider>oracle.toplink.essentials.PersistenceProvider</provider>
<jta-data-source>java:/MYSQL</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="toplink.ddl-generation" value="create-tables"/>
</properties>
</persistence-unit>
</persistence>
Вот моя проблема: при просмотре базы данных у меня нет постоянных сущностей - код ниже показывает мою сущность:
пакетные объекты;
import java.io.Serializable;
import java.util.Calendar;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.UniqueConstraint;
@Entity
@Table(name="Account", uniqueConstraints=@UniqueConstraint(columnNames="email"))
public class Account implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int account_id;
private String email;
private String name;
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
private Calendar dateCreated;
private int status;
private String password;
private String bio;
private String profilePictureURL;
//getters and setters
@Override
public int hashCode() {
int hash = 0;
hash += (int) account_id;
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Account)) {
return false;
}
Account other = (Account) object;
if (this.account_id != other.account_id) {
return false;
}
return true;
}
@Override
public String toString() {
return "entities.Account[ id=" + account_id + " ]";
}
}
Есть идеи?
РЕДАКТИРОВАТЬ:
Мой сессионный компонент:
package ejb;
import entities.Account;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@Stateless
public class NewSessionBean implements NewSessionBeanRemote {
@PersistenceContext(unitName = "wvp08heuPU")
private EntityManager em;
@Override
public void AddAccount(Account a){
em.persist(a);
}
}
РЕШЕНИЕ:
ОСНОВНАЯ ПРОБЛЕМА БЫЛА ЭТО: Мой уровень персистентности не смог создать таблицы в базе данных, так как не имел функциональности
Чтобы решить мою реальную проблему, как отметил Оскар, я изменил свой поставщик персистентности на Hibernate 2.0 - это, наряду с разнообразным списком изменений, позволило моему EJB работать.
У меня была пара проблем, которые вы, возможно, также хотите решить:
ClassNotFound Exception - переместите ваши постоянные файлы.jar в каталог server/default вашего сервера JBoss 6
Класс не может быть приведен - при использовании EclipseLink и JBoss 6 кажется, что есть некоторые проблемы совместимости, и я не мог заставить это работать; Я бы не стал пытаться.
MYSQL не найден - убедитесь, что у вас есть только один драйвер коннектора mysql, который указан не только в папке libs JBoss, но и в netbeans. Вы можете установить это по умолчанию, используя SET claspath, который Google скажет вам остальным.
1 ответ
И где звонить entityManager.persist(account);
? должен существовать бизнес-компонент, отвечающий за сохранение сущностей, будь то сессионный EJB или POJO.