2012-05-14 19 views
2

私は、MySQLデータベースにアクセスする必要があるJAX-RSの安らかなサービスを持っています。 CDIとエンティティマネージャを使用してこれを実行しようとしています。しかし、私がアプリケーションを公開すると、不正な永続ユニットが使用されているように見えます(3306の代わりにポート1527に接続しようとしています)。注入されたエンティティマネージャが正しいパーシスタンスユニットを使用していません

のtry/catchによってキャッチされた例外は次のとおりです。

@Path("/databases") 
@Stateless 
public class DatabaseResource { 

    @PersistenceUnit(unitName = "beta.example.services") 
    EntityManagerFactory entityManagerFactory; 

    @GET 
    @Produces(MediaType.APPLICATION_JSON) 
    public Response list() { 
     try { 

      EntityManager entityManager = entityManagerFactory.createEntityManager(); 
      Connection connection = entityManager.unwrap(java.sql.Connection.class); 

      ... 

      return Response.ok().build(); 

     } catch (SchemaCrawlerException e) { 
      return Response.status(500).entity(e.getMessage()).build(); 
     } 
    } 
} 

(SRC/META-INFにあります)永続ユニット:

ここ

javax.servlet.ServletException: 
javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): 
org.eclipse.persistence.exceptions.DatabaseException 
Internal Exception: 
java.sql.SQLException: 
Error in allocating a connection. Cause: Connection could not be allocated because: 
java.net.ConnectException : Error connecting to server localhost on port 1527 with message Connection refused: connect. 
Error Code: 0 

は安らかなサービスです

<?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="beta.example.services"> 
     <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
     <properties> 
      <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> 
      <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/" /> 
      <property name="javax.persistence.jdbc.user" value="test" /> 
      <property name="javax.persistence.jdbc.password" value="test" /> 
     </properties> 
    </persistence-unit> 
</persistence> 

任意の助けいただければ幸い

+0

私はデータベース接続をチェックします。 DbVisualizerのような他のJDBCツールを使用してアプリケーションと同じマシンからデータベースに接続できますか? – DRCB

+0

私は現在、同じマシン上でアプリケーションを実行しており、接続することができます。私は最初にEclipseのウィザードを使用してそれを設定しました(そしてまだデータベースにpingできます)。奇妙な部分は、それが正しいデータベースに接続しようとしているように見えないということです。それはポート1527(これは私が信じるダービーです)に接続しようとしています。また、パブリッシュ時にpersistence.xmlファイルが '/ WEB-INF/classes/META-INF'に存在することを確認しました –

+0

どのアプリケーションサーバーが存在しますか?サーバー設定でデータソースを設定しましたか? – zeller

答えて

2

OK、パーシスタンスユニットは、RESOURCE_LOCALとJTAの2つのモードで設定できます。
例:

<persistence-unit name="beta.example.services" transaction-type="JTA"> 

VS

<persistence-unit name="beta.example.services" transaction-type="RESOURCE_LOCAL"> 

JTAはデフォルト値です。 「javax.persistence.jdbc。*」のようなプロパティは、「RESOURCE_LOCAL」を使用する場合にのみ読み込まれます。 JTAを使用する場合、glassfishのトランザクションマネージャが使用されます。それはあなたがこのようにJNDI名を指定する必要があり、この場合の意味:

<jta-data-source>youJNDIName</jta-data-source> 

何が起こってかもしれないと思うことは何かJTA-データソースを指定してはいけないので、あなたは、それをデフォルトの「JTA」トランザクション・タイプを使用しますが、ということですグラスフィッシュのデフォルトのものを使用しようとするかもしれません(ダービーを指す)。あなたはエンティティマネージャを使用する方法を見てみると

Persistence unit as RESOURCE_LOCAL or JTA?

http://openejb.apache.org/jpa-concepts.html

、RESOURCE_LOCALにトランザクション・タイプを設定することはあなたのための解決策になるようです。

関連する問題