2012-01-05 12 views
12

Varlık Metamodel içinde [...] tuşuna sınıf için bulunmuştur:yok [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> 

hata

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) 

Davranış Web Kapsayıcısını her yeniden başlattığımda, her şey birkaç dakika boyunca çalışır ve bu hata atılır. Neyi kaçırıyorum?

DÜZENLEME:

Şimdi de uygulama kapsamına bir varlık kullanabilir ve aynı hata Ülke biriminin oluşur. Kullanıcı ve Ülke, persistance.xml dosyasında sınıflar olarak tanımlanır. Ayrıca, hariç tutulan listelenmemiş sınıflar false değerine ayarlanır.

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) 

Ülke varlık: Bu varlık uygulama kapsamına kullanılır ve Varlık GlassFish tamamen başlatmak için başarısız bu hatayı atar Şimdi

@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; 

.

İKİNCİ DÜZENLEME: Mevcut davranışa dayanarak o web konteyner başlar görünüyor ve ilk sıcak dağıtım kadar iyi çalışır.

+0

Netbeans'i kullandığınıza bahse girerim? Muhtemelen ilgili: 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 kullanıyorum ama bu aldığım tam bir hata. – TGM

+0

Emin değilim. İşlem türünü JTA'ya ayarlamayı denediniz mi? Aynı zamanda bir Java EE web uygulamasında en mantıklı seçimdir (aksi halde, başlangıç, işleme ve geri alma işlemleri için çok sayıda çirkin yazılım kodu yazmanız/kopyalamanız gerekir). Son stacktrace'iniz de bir "statik" başlatıcı bloğu içinde JPA işini yaptığınızı söyler. Bu teoride iyi çalışır, ancak bir enerji verimliliği ortamında bu kötü bir fikirdir. Bunun yerine bir uygulama scoped fasulye bir (post) yapıcıda yapın. – BalusC

cevap

22

sorun Başvurunuzun sıcak görevlendirecek. Eski kalıcılık birimi sunucuya yapışıyor çünkü eski fabrikayı asla kapatmadınız, bu nedenle sıcak dağıtımdan sonra fabrika hala eski sınıflara sahip oluyor, bu yüzden sınıf hatası veriyorsunuz.

Eski kalıcılık birimini temizlemeniz gerekir. EntityManagerFactory'yi kapatmak, bunu bir Servlet'in geri çağırma imgesinde olduğu gibi yapmalıdır.

Yönetilen kalıcı bir birim kullanıyorsanız, her şey otomatik olarak temizlenmelidir. Sorun, süreklilik biriminizi nasıl yönetiyorsunuz.

Ayrıca bu EclipseLink için bir hata olduğunu düşünüyorum, bu hata için oy vermek isteyebilirsiniz.

1

Sınıfları manuel olarak persistence.xml dosyasına ekler misiniz? İdeal olarak, bunu yapmak zorunda değilsiniz, ama en azından size bir başlangıç ​​verecektir.

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

+0

Bunu da denedim. Aynı sonuç. Bir süre iyi çalışıyor, o zaman çöküyor. – TGM

+0

Oluşturulan seri kimliğinden kurtulmayı deneyebilirsiniz. Belki de sınıfın farklı bir versiyonunu mu arıyor? – kcdragon

+0

Evet, ancak uygulamanın başarısızlıktan önce bir süre çalıştığı gerçeğini nasıl açıklarsınız? – TGM

4

Benzer bir sorunla karşılaştım. İstisna bazen atılmış, bazen atılmadı. Ağrılı bir miktarda hata ayıklamadan sonra, bunun, ikinci bir persistence.xml dosyasının (aynı ada sahip bir kalıcılık birimi içeren) sınıf yolundaki başka bir kavanoza dahil edilmesinin neden olduğunu öğrendim.

1

Yeniden kod yazdığım, sınıf adlarını değiştirdiğim ve kaynak enjeksiyonun hala eski sınıf adını eklemeye çalıştığı benzer bir sorun yaşadım.Kalıcı birimimi yeniden adlandırmak sorunu çözdü (ve sonra adı yeniden sorulan soruyu geri döndürdü).

Güncelleme: Daha fazla araştırmaya devam ederek, Persistence sınıflarım için bir jar dosyasıyla karşılaştım. Bir önceki yapı probleminin etrafında çalışmak için yaratmıştım. Sorunu birleştiren, ben vardı ben de projelerimi yeniden adlandırdı. Çalışma alanımdan kalıcı JAR'ı sildim de, eski proje isminin altında eclipse'nin .xxx klasörlerinde asılı duruyordu. Onu ve eski projeye yapılan tüm referansları sildim ve yapmam giderildi, No [EntityType] mesajından kurtuldu.

İlgili konular