2016-06-09 5 views
0

У меня есть служба REST, которая обращается к базе данных MySQL. Я использую Wildfly 10 и MySQL 5.7.12. Я пытаюсь получить EntityManager как инъекцию, и я получаю следующую ошибку при выполнении метода find для моего объекта, отображающего содержимое таблицы.Устойчивость Wildfly 10 MySQL таблица не найдена

org.h2.jdbc.JdbcSQLException: Table "MYTABLE" not found; SQL statement:

В классе RESTService у меня есть

@PersistenceContext(unitName="myUnit") 
protected EntityManager entityManager; 

и мой файл persistence.xml является:

<?xml version="1.0" encoding="UTF-8"?> 

<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence 
      http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd" 
    version="2.1"> 

    <persistence-unit name="myUnit"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <properties> 
     <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/mytable" /> 
     <property name="javax.persistence.jdbc.user" value="user" /> 
     <property name="javax.persistence.jdbc.password" value="pass" /> 
     <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> 

     <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" /> 
     <property name="hibernate.show_sql" value="true"/> 
     <property name="hibernate.archive.autodetection" value="class, hbm"/> 
    </properties> 
    </persistence-unit> 

</persistence> 

Вопрос заключается в том, что, если вместо того, чтобы использовать инъекции я получить объект менеджер с помощью ручного способа все работает ненасытно.

EntityManagerFactory emFactory; 
emFactory = Persistence.createEntityManagerFactory("myUnit"); 
EntityManager em = emFactory.createEntityManager(); 

Не могли бы вы дать мне несколько советов о том, как использовать PersistenceContext? код как-то чище, и я предпочитаю его использовать.

ответ

0

Похоже, вы получаете исходный источник данных, введенный в ваш блок персистентности, поэтому я предполагаю, что это зависит от того, как EntityManager «построен». Один из способов исправить это - создать источник данных в WidFly и использовать его (через) его JNDI-имя в вашем устройстве сохранения. Не стесняйтесь сообщить об ошибке http://issues.jboss.org/

+0

Есть ли способ создать этот проект источника данных мудрый? Я не хочу изменять конфигурацию Wildfly? Для других вещей я смог jboss-deployment-structure.xml – jlanza

0

Вы настраиваете блок сохранения RESOURCE_LOCAL. Вы должны настроить его так:

<persistence-unit transaction-type="RESOURCE_LOCAL"> 

Для того, чтобы использовать локальную единицу сохранения ресурса вы не можете придать EntityManager, только EntityManagerFactory. В итоге вы столкнетесь с гораздо меньшим количеством сантехники, если переключитесь на источник данных JTA и позвольте серверу управлять им.

Если вы абсолютно не хотите редактировать файл standalone.xml, в WF8, вы можете удалить файл yourdatasource-ds.xml в папку WEB-INF или в каталог развертывания вместе с вашим .war-файлом. Были разговоры об удалении этого из WF, хотя я не знаю, работает ли он в 10.x.

Смежные вопросы