2012-01-05 15 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コンテナを再起動するたびに、すべての処理が2〜3分かかり、このエラーがスローされます。私は何が欠けていますか?

EDIT:

は、今私は、同様のアプリケーションスコープのエンティティを使用し、同じエラーが国のエンティティのために発生します。ユーザーと国の両方が、persistance.xmlのクラスとして定義されています。さらに、exclude-unlisted-classesは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のが完全に起動に失敗していること。

第2版: 現在の動作に基づいて、最初のホットデプロイメントまで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

+0

Eclipse Indigo Service Release 1を使用していますが、それは私が得る正確なエラーです。 – TGM

+0

わかりません。 JTAに取引タイプを設定しようとしましたか?これはJava EE Webアプリケーションの中でも最も賢明な選択です(そうしないと、トランザクションを開始、コミット、ロールバックするために、たくさんのボイラープレートコードを手動で作成/コピーしてしまいました)。最後のスタックトレースは、 'static'イニシャライザブロック内でJPAジョブをやっていることを伝えます。理論的にはうまくいくはずですが、これはEE環境では悪い考えです。代わりにアプリケーションスコープBeanの(ポスト)コンストラクタで行います。 – BalusC

答えて

22

問題は、アプリケーションのあなたの熱い展開です。古いパーシスタンスユニットはサーバーの中に閉じ込められています。古いファクトリを閉じたことがないため、ホットデプロイメント後もファクトリに古いクラスが残っているため、クラスキャストエラーが発生します。

古いパーシスタンスユニットをクリアする必要があります。 EntityManagerFactoryを閉じると、Servlet destroyコールバックなどでこれを行う必要があります。

管理対象の永続ユニットを使用する場合、すべてが自動的にクリーンアップされるはずです。問題は、永続性ユニットの管理方法にあります。

私は、このログオンしたEclipseLinkのバグもあると思います。そのバグに投票したいかもしれません。

1

クラスを手動でpersistence.xmlに追加できますか?理想的には、これを行う必要はありませんが、それは少なくともあなたにスタートを与えるでしょう。

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

+0

私もそれを試みました。同じ結果。しばらくの間うまく動作し、クラッシュします。 – TGM

+0

生成されたシリアルIDを取り除くことができます。たぶんそれはクラスの別のバージョンを探していますか? – kcdragon

+0

はい、アプリケーションがしばらく失敗してしまうという事実をどう説明しますか? – TGM

4

私はかつて同様の問題に遭遇しました。例外がスローされ、時にはスローされないことがありました。私は、クラスパス上の別のjarに含まれる2番目のpersistence.xmlファイル(同じ名前の永続ユニットを含む)が原因であることが分かりました。

1

私は、リファクタリングされたコード、クラス名の変更、およびリソースインジェクションが古いクラス名を注入しようとしているのと同様の問題がありました。永続性ユニットの名前を変更すると問題が解決しました(名前を元に戻すと問題が再現されました)。

更新:さらに検索すると、私はPersistenceクラスのjarファイルを見つけました。以前のビルドの問題を回避するために作成しました。問題を複雑にして、私のプロジェクトに名前が変更されました。永続JARを私のワークスペースから削除しましたが、それは古いプロジェクト名の下にあるeclipseの.xxxフォルダの周りにぶら下がっていました。私はそれを削除して、古いプロジェクトへの参照をすべて削除し、ビルドは修正され、No [EntityType]メッセージが取り除かれました。

関連する問題