2012-08-18 173 views
1

我正在使用JPA(Eclipselink)和遠程mysql數據庫直接在桌面應用程序上工作。與JPA無連接遠程MySQL連接EclipseLink

我的persistence.xml我有兩個PersistenceUnit一個使用本地主機,另一個使用我的遠程數據庫。當我嘗試加載EntityManagerFactory時,它在本地主機上工作正常,但從未連接到遠程,並且沒有錯誤提供很長時間的等待。這是我的persistence.xml

遠程MySQL在Windows Server 2003中

<persistence-unit name="SOFALEnterprisePU3" transaction-type="RESOURCE_LOCAL"> 
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
<properties> 
    <property name="javax.persistence.jdbc.url" value="jdbc:mysql://192.168.10.138:3306/sofaldb"/> 
    <property name="javax.persistence.jdbc.password" value="password"/> 
    <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> 
    <property name="javax.persistence.jdbc.user" value="root"/> 
</properties> 

本地MySQL的一部分

<persistence-unit name="SOFALEnterprisePU2" transaction-type="RESOURCE_LOCAL"> 
<properties> 
    <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/sofaldb"/> 
    <property name="javax.persistence.jdbc.password" value="password"/> 
    <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> 
    <property name="javax.persistence.jdbc.user" value="root"/> 
</properties> 

回答

2

當你說遙控你的意思相同的局域網還是互聯網?因爲IP 192.168.10.138指定一個專用LAN,因此您的遠程機器必須在同一網絡上有一個地址,例如192.168.10。*

首先請確保在您的Windows防火牆中打開端口3306。

如果它是不同的網絡,您的路由器將需要配置爲轉發端口,您將不得不連接到路由器的公共IP。

如果它是相同的LAN,那麼mysql可能沒有被設置爲接受該用戶名密碼組合的遠程連接。

+0

好的,謝謝。一切都在本地網絡上。你有任何關於性能的想法,基於我使用一個通過JPA直接連接到數據庫的swing應用程序的事實。 – MHAbdulkareem 2012-08-19 12:52:37

+0

從未使用僅來自Java EE的胖客戶端的JPA。我認爲這取決於您將擁有多少併發用戶。如果您同時擁有多個客戶端,尤其是當您讓他們通過Internet訪問數據庫時,您可能更願意讓您的客戶與Java EE Web服務交談,並讓該服務使用JPA與數據庫交談。 – Eelke 2012-08-19 14:15:50

0

在正常的JPA中,每個項目只使用一個persistence.xml。但是您可以嘗試Spring's JPA,它可以在一個項目中使用多個persistence.xml。參見link來處理多個持久性單元。

+0

我爲不同的目的使用不同的persistenceUnits,當我準備好用遠程mysql進行部署時,我只是改變了我想要使用的那個! – MHAbdulkareem 2012-08-19 12:51:39