2015-01-09 1 views
1

Возможно, это недостаток знаний, но я не могу определить, какую базу данных использует мое приложение. Источники данных и драйверы в моей standalone.xml из JBoss AS выглядеть следующим образом:Невозможно обнаружить базу данных, используемую JPA с JBoss

<subsystem xmlns="urn:jboss:domain:datasources:1.0"> 
 
      <datasources> 
 
       <datasource jta="true" jndi-name="java:/MySqlDS" pool-name="MySqlDS_Pool" enabled="true" use-java-context="true" use-ccm="true"> 
 
        <connection-url>jdbc:mysql://localhost:3306/studadmin</connection-url> 
 
        <driver>com.mysql</driver> 
 
        <security> 
 
         <user-name>sa</user-name> 
 
         <password>sa</password> 
 
        </security> 
 
        <timeout> 
 
         <idle-timeout-minutes>0</idle-timeout-minutes> 
 
         <query-timeout>600</query-timeout> 
 
        </timeout> 
 
        <statement> 
 
         <prepared-statement-cache-size>100</prepared-statement-cache-size> 
 
         <share-prepared-statements>true</share-prepared-statements> 
 
        </statement> 
 
       </datasource> 
 
       <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true"> 
 
        <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</connection-url> 
 
        <driver>h2</driver> 
 
        <security> 
 
         <user-name>sa</user-name> 
 
         <password>sa</password> 
 
        </security> 
 
       </datasource> 
 
       <drivers> 
 
        <driver name="com.mysql" module="com.mysql"> 
 
         <driver-class>com.mysql.jdbc.Driver</driver-class> 
 
         <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class> 
 
        </driver> 
 
        <driver name="h2" module="com.h2database.h2"> 
 
         <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class> 
 
        </driver> 
 
       </drivers> 
 
      </datasources> 
 
     </subsystem>

И это мой persistence.xml:

<?xml version="1.0" encoding="UTF-8"?> 
 
<persistence version="2.0" 
 
\t xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 
\t xsi:schemaLocation=" 
 
\t http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
 
\t 
 
\t <persistence-unit name="primary"> 
 
\t \t <jta-data-source>java:jboss/datasources/studadminDS</jta-data-source> 
 
\t \t <properties> 
 
\t \t \t <property name="hibernate.hbm2ddl.auto" value="update" /> 
 
\t \t \t <property name="hibernate.show_sql" value="true" /> 
 
\t \t </properties> 
 
\t </persistence-unit> 
 
\t 
 
</persistence>

Я просто используя этот метод для чтения из базы данных:

@PostConstruct 
public void init() { 
    students = new ListDataModel<Student>(); 
    students.setWrappedData(em.createNamedQuery("SelectStudents") 
      .getResultList()); 
} 

И это один упорствовать студента в базе данных:

public String saveStudent() { 
    try { 
     utx.begin(); 
    } catch (NotSupportedException e) { 
     e.printStackTrace(); 
    } catch (SystemException e) { 
     e.printStackTrace(); 
    } 
    student = em.merge(student); 
    em.persist(student); 
    students.setWrappedData(em.createNamedQuery("SelectStudents") 
      .getResultList()); 
    try { 
     utx.commit(); 
    } catch (SecurityException e) { 
     e.printStackTrace(); 
    } catch (IllegalStateException e) { 
     e.printStackTrace(); 
    } catch (RollbackException e) { 
     e.printStackTrace(); 
    } catch (HeuristicMixedException e) { 
     e.printStackTrace(); 
    } catch (HeuristicRollbackException e) { 
     e.printStackTrace(); 
    } catch (SystemException e) { 
     e.printStackTrace(); 
    } 
    return "studentList"; 
} 

После того как я сохранить несколько новых студентов в моем базы данных, используя соответствующий символ, они перечислены успешно. Но проблема в том, что, когда я ищу в своей базе данных MySQL, новых записей нет, хотя данные где-то сохраняются, потому что, если я развертываю свое приложение, данные все еще доступны.

Знаете ли вы, какая база данных использует мое приложение или ее можно обнаружить?

+0

вы уверены, что ваши сделки совершил? –

+0

Я думаю, что, поскольку данные доступны, после того, как я перераспределяю свое приложение. – John

ответ

2

Вы перепутали имена JNDI.

Ваш standalone.xml создает имя JNDI java:/MySqlDS, но в файле persistence.xml вы ссылаетесь на ресурс JNDI java:jboss/datasources/studadminDS.

Я хотел бы предложить вам изменить standalone.xml:

... 
<datasource jta="true" jndi-name="java:jboss/datasources/studadminDS" pool-name="MySqlDS_Pool" enabled="true" use-java-context="true" use-ccm="true"> 
... 

Это также может быть полезно, чтобы объявить гибернации диалект в вашем standalone.xml:

 <datasource ...> 
      <connection-property name="hibernate.dialect"> 
        org.hibernate.dialect.MySQLDialect 
      </connection-property> 
     </datasource ...> 
+0

Если я это сделаю и запустил свой сервер JBoss, он вызывает следующую ошибку: «Служба jboss.naming.context.java.jboss.datasources.studadminDS уже зарегистрирована», и когда я развертываю и вызываю свое приложение в браузере, он терпит неудачу с сообщение об ошибке «Запрошенный ресурс (/studadmin/index.jsf) недоступен». – John

+1

Это означает, что вы зарегистрировали java: jboss/datasources/studadminDS в другом месте. У вас есть файл hibernate.properties или hibernate.cfg.xml? Это также объясняет, почему вы можете запускать приложение без каких-либо ошибок. – jHilscher

+1

Вы правы! Поскольку я использую Maven, источник данных также определяется в моем studadmin-ds.xml, и он использовал встроенную H2-базу данных по умолчанию. Поэтому я просто прокомментировал всю запись datasource и теперь работает с моей базой данных MySQL по умолчанию. Большое вам спасибо за помощь! – John

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