Сущности не создаются в базе данных

Прямо следующая часть моей саги о том, как заставить 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 - переместите файлы сохранения .jar в каталог server/default вашего сервера JBoss 6.

  • Класс не может быть преобразован. При использовании EclipseLink и JBoss 6 возникают некоторые проблемы совместимости, и я не смог заставить это работать; Я бы не стал пытаться.

  • MYSQL не найден - убедитесь, что у вас есть только один драйвер соединителя mysql, указанный не ТОЛЬКО в папке JBoss libs, но также и в netbeans. Вы можете использовать это по умолчанию, используя SET claspath, остальное вам расскажет Google.


person Lewis Wheeler    schedule 11.03.2012    source источник
comment
@Column(unique=true) private String email; достаточно для простого ограничения.   -  person viktor    schedule 12.03.2012
comment
Спасибо, Виктор - я знал, что есть способ сделать это как часть тела класса, но этот метод тоже сработал. Любая идея по моей реальной проблеме?   -  person Lewis Wheeler    schedule 12.03.2012


Ответы (1)


А где звонок на entityManager.persist(account);? должен существовать бизнес-компонент, отвечающий за сохранение объектов, будь то сеансовый EJB или POJO.

person Óscar López    schedule 11.03.2012
comment
Привет, Оскар. Вы правы. Я должен позвонить, чтобы я отредактировал свой вопрос выше с помощью своего сеансового компонента (который имеет постоянную часть). В любом случае, если я не ошибаюсь, даже если у меня нет вызова диспетчеру сущностей, таблица все равно должна быть создана в базе данных? Во всяком случае, я делал это раньше... но это было с JBoss 7. - person Lewis Wheeler; 12.03.2012
comment
Ваш вопрос вводит в заблуждение, в заголовке указано, что «Сущности не сохраняются»; теперь, если я правильно понимаю, проблема в том, что таблицы не создаются в базе данных, а не в том, что они не могут быть сохранены. Взгляните на этот сообщение. для получения дополнительной информации о том, как решить вашу проблему. - person Óscar López; 12.03.2012
comment
Привет Оскар - Еще раз спасибо за ваш ответ. Ваше право, конечно, мой вопрос должен был быть вместо «EJB: объекты не создаются в базе данных». Ваш ответ помог мне лучше понять проблему. Я не могу использовать TopLink Essentials, чтобы поставщик постоянства создал для меня мои таблицы, так как он этого не поддерживает. Вместо этого его можно использовать для создания файлов ddl, которые вы делаете вручную. Если вам нужна та же функциональность, что и мне, я бы вместо этого выбрал hibernate 2.0, поскольку именно так мне НАКОНЕЦ-ТО удалось заставить работать мой ejb. - person Lewis Wheeler; 12.03.2012
comment
@LewisWheeler верно, в режиме гибернации создание таблицы без проблем работает с этой строкой в ​​persistence.xml: <property name="hibernate.hbm2ddl.auto" value="???"/>, где ??? может быть любым значением, описанным в здесь - person Óscar López; 12.03.2012