2012-01-05 13 views
12

實體:否[的EntityType]被發現的重點班[...]在元模型

@Entity 
@Table(name="user_account") 
public class UserAccount implements Serializable{ 
    private static final long serialVersionUID = -2606506548742732094L; 

    @Id 
    @GeneratedValue(strategy=GenerationType.TABLE) 
    private Integer id; 

的persistence.xml

<persistence-unit name="Maze" transaction-type="RESOURCE_LOCAL"> 

    <exclude-unlisted-classes>false</exclude-unlisted-classes> 
    <properties> 
     <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> 
     <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/mazedb"/> 
     <property name="javax.persistence.jdbc.user" value="root"/> 
     <property name="javax.persistence.jdbc.password" value="root"/> 
    </properties> 

</persistence-unit> 

錯誤

WARNING: #{accountController.performLogin}: java.lang.IllegalArgumentException: No [EntityType] was found for the key class [com.maze.model.UserAccount] in the Metamodel - please verify that the [Entity] class was referenced in persistence.xml using a specific <class>com.maze.model.UserAccount</class> property or a global <exclude-unlisted-classes>false</exclude-unlisted-classes> element. 
javax.faces.FacesException: #{accountController.performLogin}: java.lang.IllegalArgumentException: No [EntityType] was found for the key class [com.maze.model.UserAccount] in the Metamodel - please verify that the [Entity] class was referenced in persistence.xml using a specific <class>com.maze.model.UserAccount</class> property or a global <exclude-unlisted-classes>false</exclude-unlisted-classes> element. 
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118) 
    at javax.faces.component.UICommand.broadcast(UICommand.java:315) 
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794) 
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259) 
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) 
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1539) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) 
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) 
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98) 
    at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162) 
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174) 
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828) 
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725) 
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019) 
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225) 
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) 
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) 
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) 
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) 
    at com.sun.grizzly.ContextTask.run(ContextTask.java:71) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) 
    at java.lang.Thread.run(Thread.java:662) 

行爲 每次我重新啓動Web容器時,一切都可以正常工作幾分鐘,並且會引發此錯誤。我錯過了什麼?

編輯:

現在我用的應用範圍的實體,以及爲國家實體發生同樣的錯誤。 User和Country都被定義爲persistance.xml中的類。此外,排除不列出的類被設置爲false。

SEVERE: Critical error during deployment: 
java.lang.ExceptionInInitializerError 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at  sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39 ) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
at java.lang.Class.newInstance0(Class.java:355) 
at java.lang.Class.newInstance(Class.java:308) 
at com.sun.faces.mgbean.BeanBuilder.newBeanInstance(BeanBuilder.java:188) 
at com.sun.faces.mgbean.BeanBuilder.build(BeanBuilder.java:102) 
at com.sun.faces.mgbean.BeanManager.createAndPush(BeanManager.java:409) 
at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:269) 
at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:256) 
at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:255) 
at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:4750) 
at com.sun.enterprise.web.WebModule.contextListenerStart(WebModule.java:550) 
at org.apache.catalina.core.StandardContext.start(StandardContext.java:5366) 
at com.sun.enterprise.web.WebModule.start(WebModule.java:498) 
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:917) 
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:901) 
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:733) 
at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:2000) 
at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1651) 
at com.sun.enterprise.web.WebApplication.start(WebApplication.java:109) 
at org.glassfish.internal.data.EngineRef.start(EngineRef.java:130) 
at org.glassfish.internal.data.ModuleInfo.start(ModuleInfo.java:269) 
at org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:294) 
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:462) 
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:240) 
at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:382) 
at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:355) 
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:370) 
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1064) 
at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1200(CommandRunnerImpl.java:96) 
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1244) 
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1232) 
at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:459) 
at com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:209) 
at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:168) 
at com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:117) 
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:238) 
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828) 
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725) 
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019) 
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225) 
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) 
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) 
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) 
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) 
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) 
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) 
at com.sun.grizzly.ContextTask.run(ContextTask.java:71) 
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) 
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) 
at java.lang.Thread.run(Thread.java:662) 
Caused by: java.lang.IllegalArgumentException: No [EntityType] was found for the key class [com.maze.model.Country] in the Metamodel - please verify that the [Entity] class was referenced in persistence.xml using a specific <class>com.maze.model.Country</class> property or a global <exclude-unlisted-classes>false</exclude-unlisted-classes> element. 
at org.eclipse.persistence.internal.jpa.metamodel.MetamodelImpl.entityEmbeddableManagedTypeNotFound(MetamodelImpl.java:174) 
at org.eclipse.persistence.internal.jpa.metamodel.MetamodelImpl.entity(MetamodelImpl.java:194) 
at org.eclipse.persistence.internal.jpa.querydef.AbstractQueryImpl.from(AbstractQueryImpl.java:97) 
at com.maze.service.CountryService.readList(CountryService.java:74) 
at com.maze.util.MazeConstants.<clinit>(MazeConstants.java:26) 

的國家實體:

@Entity 
@Table(name = "country") 
public class Country implements Serializable{ 

private static final long serialVersionUID = 4086034429815316972L; 

@Id 
private Integer id; 
private String name; 
private String continent; 
private Integer population; 
private Float surface; 

@OneToMany(mappedBy = "country") 
private List<User> userList; 

現在這個實體上使用的應用範圍和實體拋出這個錯誤Glassfish的不完全啓動。

第二次編輯: 根據目前的行爲,似乎web容器啓動並工作正常,直到第一次熱部署。

+0

我可以打賭你在使用Netbeans嗎?可能相關:http://wiki.eclipse.org/EclipseLink/Development/JPA_2.0/metamodel_api#DI_101:_20100218:_Descriptor.javaClass_is_null_on_a_container_EM_for_a_specific_case – BalusC 2012-01-09 18:49:13

+0

我使用Eclipse Indigo Service Release 1,但這是我得到的確切錯誤。 – TGM 2012-01-09 19:10:52

+0

我不確定。您是否嘗試將交易類型設置爲JTA?這也是Java EE Web應用程序中最明智的選擇(否則,您必須手動編寫/複製大量醜陋的樣板代碼以開始,落實和回滾事務)。你的最後一個stacktrace也會告訴你正在執行'static'初始化塊中的JPA作業。這在理論上應該很好,但在EE環境中這是一個壞主意。而是在應用程序作用域bean的(後)構造函數中進行。 – BalusC 2012-01-09 19:14:10

回答

22

的問題是你的應用程序的部署熱點。舊的持久性單元正在服務器中存在,因爲你從未關閉過舊的工廠,所以在熱部署之後,工廠仍然有舊的類,所以你得到了類拋出錯誤。

您需要清除舊的持久性單元。關閉EntityManagerFactory應該這樣做,比如在一個Servlet銷燬回調中。

如果您使用託管持久性單元,則應自動清除所有內容。問題在於你如何管理持久性單元。

我認爲這個登錄的EclipseLink也有一個bug,你可能想爲這個bug投票。

1

你可以手動添加類到persistence.xml嗎?理想情況下,你不應該這樣做,但它至少會給你一個開始。

<persistence-unit><class>com.maze.model.UserAccount</class>...

+0

我也嘗試過。同樣的結果。工作很好,然後崩潰。 – TGM 2012-01-05 19:43:00

+0

你可以試着擺脫生成的序列號。也許它正在尋找不同版本的課程? – kcdragon 2012-01-05 19:51:29

+0

是的,但你會如何解釋應用程序在失敗前工作一段時間的事實。 – TGM 2012-01-05 19:58:39

4

我曾經遇到類似的問題。有時會拋出異常,有時不會。經過痛苦的時間調試後,我發現它是由另一個包含在classpath中另一個jar中的persistence.xml文件(包含一個名稱相同的持久性單元)引起的。

1

我有一個類似的問題,其中我重構了代碼,更改了類名,並且資源注入仍在嘗試注入舊的類名。重命名我的持久性單元解決了這個問題(並且隨後還原名稱重新引入了該問題)。

更新:在進一步搜索時,我遇到了一個用於我的Persistence類的jar文件。我已經創建它來解決以前的構建問題。複雜的問題,我有改名我的項目。儘管我從工作區中刪除了持久性JAR,但它仍舊掛在舊項目名稱下的eclipse的.xxx文件夾中。我刪除了它,以及對舊項目的所有引用,並且我的構建已修復,擺脫了No [EntityType]消息。

相關問題