2013-04-17 83 views
0

當我嘗試從我的項目實體生成數據庫表時,下面的異常被拋出。從實體生成表導致NoInitialContextException

如果我理解正確,異常建議到指定java.naming.factory.initial
所以我通過JBoss的文檔的幾個部分去了,搞不清我一直在尋找,確實有jndi.properties -file實驗,並最終實現我絕對無能爲力。

順便說一句:從表中生成實體(所以相反)工作沒有問題。

[EL Info]: EclipseLink, version: Eclipse Persistence Services - 2.3.2.v20111125-r10461 
[EL Severe]: Local Exception Stack: 
Exception [EclipseLink-7060] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.ValidationException 
Exception Description: Cannot acquire data source [java:jboss/datasources/MySQLDS]. 
Internal Exception: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial 
    at org.eclipse.persistence.exceptions.ValidationException.cannotAcquireDataSource(ValidationException.java:497) 
    at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:109) 
    at org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:162) 
    at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:584) 
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:206) 
    at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:488) 
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getDatabaseSession(EntityManagerFactoryDelegate.java:188) 
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.createEntityManagerImpl(EntityManagerFactoryDelegate.java:277) 
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:294) 
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:272) 
    at org.eclipse.jpt.jpa.eclipselink.core.ddlgen.Main.perform(Main.java:85) 
    at org.eclipse.jpt.jpa.eclipselink.core.ddlgen.Main.execute(Main.java:76) 
    at org.eclipse.jpt.jpa.eclipselink.core.ddlgen.Main.main(Main.java:63) 
Caused by: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial 
    at javax.naming.spi.NamingManager.getInitialContext(Unknown Source) 
    at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source) 
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source) 
    at javax.naming.InitialContext.lookup(Unknown Source) 
    at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:103) 
    ... 11 more 

Exception in thread "main" javax.persistence.PersistenceException: Exception [EclipseLink-7060] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.ValidationException 
Exception Description: Cannot acquire data source [java:jboss/datasources/MySQLDS]. 
Internal Exception: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial 
    at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:517) 
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getDatabaseSession(EntityManagerFactoryDelegate.java:188) 
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.createEntityManagerImpl(EntityManagerFactoryDelegate.java:277) 
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:294) 
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:272) 
    at org.eclipse.jpt.jpa.eclipselink.core.ddlgen.Main.perform(Main.java:85) 
    at org.eclipse.jpt.jpa.eclipselink.core.ddlgen.Main.execute(Main.java:76) 
    at org.eclipse.jpt.jpa.eclipselink.core.ddlgen.Main.main(Main.java:63) 
Caused by: Exception [EclipseLink-7060] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.ValidationException 
Exception Description: Cannot acquire data source [java:jboss/datasources/MySQLDS]. 
Internal Exception: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial 
    at org.eclipse.persistence.exceptions.ValidationException.cannotAcquireDataSource(ValidationException.java:497) 
    at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:109) 
    at org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:162) 
    at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:584) 
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:206) 
    at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:488) 
    ... 7 more 
Caused by: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial 
    at javax.naming.spi.NamingManager.getInitialContext(Unknown Source) 
    at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source) 
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source) 
    at javax.naming.InitialContext.lookup(Unknown Source) 
    at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:103) 
    ... 11 more 

我的persistence.xml

<?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="DynamicWebProject" transaction-type="JTA"> 
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
    <jta-data-source>java:jboss/datasources/MySQLDS</jta-data-source> 
    <class>hoho.model.generated.AvailabilityDeliveryMethod</class> 
    <class>hoho.model.generated.AvailabilityItem</class> 
    <class>hoho.model.generated.AvailabilityRestaurant</class> 
    <class>hoho.model.generated.Category</class> 
    <class>hoho.model.generated.ContactData</class> 
    <class>hoho.model.generated.Deliverer</class> 
    <class>hoho.model.generated.DeliveryMethod</class> 
    <class>hoho.model.generated.DeliveryMethodHasPrice</class> 
    <class>hoho.model.generated.Item</class> 
    <class>hoho.model.generated.Label</class> 
    <class>hoho.model.generated.OrderHasItem</class> 
    <class>hoho.model.generated.OrderLimitation</class> 
    <class>hoho.model.generated.PaymentMethod</class> 
    <class>hoho.model.generated.Person</class> 
    <class>hoho.model.generated.PersonPreference</class> 
    <class>hoho.model.generated.Price</class> 
    <class>hoho.model.generated.PurchaseOrder</class> 
    <class>hoho.model.generated.Restaurant</class> 
    <class>hoho.model.generated.Tag</class> 
    <class>hoho.model.generated.Image</class> 
    <class>hoho.model.generated.MimeType</class> 
    <class>hoho.model.generated.TaxRate</class> 
    <properties> 
     <!-- <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/> --> 
     <property name="javax.persistence.jtaDataSource" value="java:jboss/datasources/MySQLDS" /> 
    </properties> 
    </persistence-unit> 
</persistence> 
+0

錯誤指出它無法獲取數據源「java:jboss/datasources/MySQLDS」。你是否在服務器上運行這個服務器,並且你是否正確配置了數據源?在生成實體時,您正在使用eclipse及其與數據庫的連接。從實體生成表格時,它看起來像使用JPA和在persistence.xml中配置的數據庫連接 - 因此需要先設置這些連接。 – Chris

+0

@Chris謝謝你的回答。 1.正在工作的'從表中生成實體「和非工作的'從實體生成表」都來自於右鍵單擊項目時獲得的上下文菜單的「JPA-Tools」子菜單。 2.我不確定:我認爲我沒有在服務器上運行它。當我嘗試使用停止的服務器進行生成時,它將保持停止狀態。它啓動時沒有區別。 – Lester

+0

@Chris我將我的persistence.xml添加到問題中。 – Lester

回答

1

的JPA工具不與資源類型JTA工作。將其臨時更改爲RESOURCE_LOCAL。 另請參閱Generating tables from entities

+0

不幸的是,它似乎在緩存連接數據。我將persistence.xml中的連接屬性更改爲不同的url/user/pass,但它仍然連接到前一個。不能像這樣在新的位置上創建對象... – Dormouse

+0

Ah創建了一個login.properties文件,其中包含了Eclipse開普勒似乎在生成實體時使用的javax.persistence.jdbc.url ... – Dormouse