исключение сохранения при подключении к базе данных с помощью glassfish


Я новичок в glass-fish & persistence и при попытке запустить запрос на базе данных MySQL в моей машине я получаю следующую ошибку:

Исключение [EclipseLink-4002] (Eclipse Persistence Services-2.3.2.v20111125-r10461): орг.затмение.стойкость.исключения.Исключение DatabaseException Внутреннее исключение: java.язык SQL.SQLException: база данных Не выбрана Код Ошибки: 1046

Перед запуском сервера я убедился, что конфигурация сервера выполнена с помощью этого руководства : mysql site manual for using connector with glassfish , и настроил мою персистентность.xml вот такой:

<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="StudentRecipieWebsite" transaction-type="RESOURCE_LOCAL">
    <non-jta-data-source>jdbc/mySql</non-jta-data-source>
    <class>il.musehunter.studentRecipes.dbModel.Image</class>
    <class>il.musehunter.studentRecipes.dbModel.Ingrediant</class>
    <class>il.musehunter.studentRecipes.dbModel.Recipe</class>
    <class>il.musehunter.studentRecipes.dbModel.User</class>
    <properties>
        <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/recipes_data"/>
        <property name="javax.persistence.jdbc.user" value="root"/>
        <property name="javax.persistence.jdbc.password" value="moshe1475"/>
        <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
        <property name="eclipselink.jdbc.batch-writing" value="JDBC"/>
    </properties>
</persistence-unit>

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

Правка:

Добавление части домена.xml с моего сервера glassfish:

<applications>
<application context-root="/StudentRecipieWebsite" location="${com.sun.aas.instanceRootURI}/applications/StudentRecipieWebsite/" name="StudentRecipieWebsite" object-type="user">
  <property name="appLocation" value="${com.sun.aas.instanceRootURI}/applications/__internal/StudentRecipieWebsite/StudentRecipieWebsite.war"></property>
  <property name="org.glassfish.ejb.container.application_unique_id" value="89812698949156864"></property>
  <property name="org.glassfish.persistence.app_name_property" value="StudentRecipieWebsite"></property>
  <property name="defaultAppName" value="StudentRecipieWebsite"></property>
  <module name="StudentRecipieWebsite">
    <engine sniffer="ejb"></engine>
    <engine sniffer="security"></engine>
    <engine sniffer="jpa"></engine>
    <engine sniffer="web"></engine>
  </module>
</application>

И:

<resources>
<jdbc-resource pool-name="__TimerPool" jndi-name="jdbc/__TimerPool" object-type="system-admin"></jdbc-resource>
<jdbc-resource pool-name="DerbyPool" jndi-name="jdbc/__default"></jdbc-resource>
<jdbc-connection-pool datasource-classname="org.apache.derby.jdbc.EmbeddedXADataSource" res-type="javax.sql.XADataSource" name="__TimerPool">
  <property name="databaseName" value="${com.sun.aas.instanceRoot}/lib/databases/ejbtimer"></property>
  <property name="connectionAttributes" value=";create=true"></property>
</jdbc-connection-pool>
<jdbc-connection-pool is-isolation-level-guaranteed="false" datasource-classname="org.apache.derby.jdbc.ClientDataSource" res-type="javax.sql.DataSource" name="DerbyPool">
  <property name="PortNumber" value="1527"></property>
  <property name="Password" value="APP"></property>
  <property name="User" value="APP"></property>
  <property name="serverName" value="localhost"></property>
  <property name="DatabaseName" value="sun-appserv-samples"></property>
  <property name="connectionAttributes" value=";create=true"></property>
</jdbc-connection-pool>
<jdbc-connection-pool datasource-classname="com.mysql.jdbc.jdbc2.optional.MysqlDataSource" res-type="javax.sql.DataSource" name="MySQLConnPool">
  <property name="portNumber" value="3306"></property>
  <property name="databaseName" value="recipes_data"></property>
  <property name="serverName" value="localhost"></property>
  <property name="user" value="root"></property>
  <property name="password" value="moshe1475"></property>
  <property name="URL" value="jdbc:mysql://:3306/"></property>
</jdbc-connection-pool>
<jdbc-resource pool-name="MySQLConnPool" description="" jndi-name="jdbc/mySql"></jdbc-resource></resources>
1 3

1 ответ:

Мое первое предположение заключается в том, что URL-адрес соединения в определении источника данных не совсем верен, потому что "No database selected Error Code: 1046" является ошибкой MySQL.

Вам не нужно настраивать источник данных в persistence.xml, Если вы уже определили источник данных на сервере приложений (что является обычным способом). Можете ли вы опубликовать определение источника данных из вашего $GLASSFISH_HOME/glassfish/domains/$GLASSFISH_DOMAIN/config/domain.xml?

Это пример настойчивости.xml я взял из своего проекта (более или менее из Netbeans шаблон), что может помочь вам:

<?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="MyPU" transaction-type="JTA">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>jdbc/sample</jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
       <property name="eclipselink.ddl-generation" value="create-tables"/>
    </properties>
  </persistence-unit>
</persistence>

Удачи!

Отвечая на комментарий:

Вам нужно добавить имя базы данных к URL:

<property name="URL" value="jdbc:mysql://nameOrIPOfYourServerOrLocalhost:3306/nameOfYourDatabase"></property>

Это должно решить проблему.