2010-03-24 5 views
6

Sto utilizzando Gilead per mantenere le mie entità nel mio progetto GWT, im usando anche annotazioni di sospensione. il mio problema è sul mio association.this OneToMany è la mia classe User che contiene un riferimento a un elenco di FileLocationsRicevo un errore con un'associazione oneToMany quando si utilizzano annotazioni con gilead per la sospensione tramite gwt

@Entity 
@Table(name = "yf_user_table") 
public class YFUser implements Serializable { 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Column(name = "user_id",nullable = false) 
private int userId; 
@Column(name = "username") 
private String username; 
@Column(name = "password") 
private String password; 
@Column(name = "email") 
private String email; 

@OneToMany (cascade = CascadeType.ALL, recuperare = FetchType.LAZY) @JoinColumn (name = "USER_ID") elenco privato fileLocations = new ArrayList();

Questo è il mio file di posizione di classe

@Entity 
@Table(name = "fileLocationTable") 
public class FileLocation implements Serializable { 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Column(name = "locationId", updatable = false, nullable = false) 
private int ieId; 
@Column (name = "location") 
private String location; 

@ManyToOne (prendere = FetchType.LAZY) @JoinColumn (name = "USER_ID", nullable = false) privato YFUser uploadedUser;

Quando i dati vengono mantenuti in una normale applicazione desktop, funzionano correttamente, crea le tabelle e posso aggiungere e archiviare dati in esso. ma quando provo a mantenere i dati nella mia applicazione gwt ottengo errori li mostrerò più bassi. questa è la mia classe ServiceImpl che estende PersistentRemoteService.

public class TestServiceImpl extends PersistentRemoteService implements TestService { 

public static final String SESSION_USER = "UserWithinSession"; 

public TestServiceImpl(){ 

    HibernateUtil util = new HibernateUtil(); 
     util.setSessionFactory(com.example.server.HibernateUtil 
       .getSessionFactory()); 

    PersistentBeanManager pbm = new PersistentBeanManager(); 
    pbm.setPersistenceUtil(util); 
    pbm.setProxyStore(new StatelessProxyStore()); 

    setBeanManager(pbm); 
} 

    @Override 
public String registerUser(String username, String password, String email) { 
    Session session = com.example.server.HibernateUtil.getSessionFactory().getCurrentSession(); 
    session.beginTransaction(); 

    YFUser newUser = new YFUser(); 
    newUser.setUsername(username);newUser.setPassword(password);newUser.setEmail(email); 

    session.save(newUser); 
    session.getTransaction().commit(); 

    return "Thank you For registering "+ username; 

} 

questo è l'errore che im che ottiene. l'errore scompare quando rimuovo il mio onetoManyRelationship e costruisco il mio factory di sessione quando lo inserisco, sulla linea di buildsessionfactory in Hibernate Util che lancia questa eccezione. anche la mia classe util ibernare va bene. questo è il java.lang.NoSuchMethodError errore: javax.persistence.OneToMany.orphanRemoval() Z

Mar 24, 2010 10:03:22 PM org.hibernate.cfg.annotations.Version <clinit> 
INFO: Hibernate Annotations 3.5.0-Beta-4 
Mar 24, 2010 10:03:22 PM org.hibernate.cfg.Environment <clinit> 
INFO: Hibernate 3.5.0-Beta-4 
Mar 24, 2010 10:03:22 PM org.hibernate.cfg.Environment <clinit> 
INFO: hibernate.properties not found 
Mar 24, 2010 10:03:22 PM org.hibernate.cfg.Environment buildBytecodeProvider 
INFO: Bytecode provider name : javassist 
Mar 24, 2010 10:03:22 PM org.hibernate.cfg.Environment <clinit> 
INFO: using JDK 1.4 java.sql.Timestamp handling 
Mar 24, 2010 10:03:22 PM org.hibernate.annotations.common.Version <clinit> 
INFO: Hibernate Commons Annotations 3.2.0-SNAPSHOT 
Mar 24, 2010 10:03:22 PM org.hibernate.cfg.Configuration configure 
INFO: configuring from resource: /hibernate.cfg.xml 
Mar 24, 2010 10:03:22 PM org.hibernate.cfg.Configuration getConfigurationInputStream 
INFO: Configuration resource: /hibernate.cfg.xml 
Mar 24, 2010 10:03:22 PM org.hibernate.cfg.Configuration doConfigure 
INFO: Configured SessionFactory: null 
Mar 24, 2010 10:03:22 PM org.hibernate.cfg.search.HibernateSearchEventListenerRegister    enableHibernateSearch 
INFO: Unable to find org.hibernate.search.event.FullTextIndexEventListener on the  classpath. Hibernate Search is not enabled. 
Mar 24, 2010 10:03:22 PM org.hibernate.cfg.AnnotationBinder bindClass 
INFO: Binding entity from annotated class: com.example.client.Entity1 
Mar 24, 2010 10:03:22 PM org.hibernate.cfg.annotations.EntityBinder bindTable 
INFO: Bind entity com.example.client.Entity1 on table entityTable1 
Mar 24, 2010 10:03:22 PM org.hibernate.cfg.AnnotationBinder bindClass 
INFO: Binding entity from annotated class: com.example.client.YFUser 
Mar 24, 2010 10:03:22 PM org.hibernate.cfg.annotations.EntityBinder bindTable 
INFO: Bind entity com.example.client.YFUser on table yf_user_table 
Initial SessionFactory creation failed.java.lang.NoSuchMethodError:  javax.persistence.OneToMany.orphanRemoval()Z 
[WARN] Nested in javax.servlet.ServletException: init: 
java.lang.ExceptionInInitializerError 
at com.example.server.HibernateUtil.<clinit>(HibernateUtil.java:38) 
at com.example.server.TestServiceImpl.<init>(TestServiceImpl.java:29) 
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 org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:153) 
at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339) 
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:463) 
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362) 
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) 
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729) 
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) 
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49) 
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
at org.mortbay.jetty.Server.handle(Server.java:324) 
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505) 
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843) 
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647) 
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) 
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380) 
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:396) 
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488) 
Caused by: java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z 
at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1642) 
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:772) 
at org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:629) 
at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:350) 
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1373) 
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:973) 
at com.example.server.HibernateUtil.<clinit>(HibernateUtil.java:33) 
... 26 more 
[WARN] Nested in java.lang.ExceptionInInitializerError: 
java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z 
at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1642) 
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:772) 
at org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:629) 
at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:350) 
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1373) 
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:973) 
at com.example.server.HibernateUtil.<clinit>(HibernateUtil.java:33) 
at com.example.server.TestServiceImpl.<init>(TestServiceImpl.java:29) 
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 org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:153) 
at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339) 
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:463) 
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362) 
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) 
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729) 
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) 
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49) 
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
at org.mortbay.jetty.Server.handle(Server.java:324) 
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505) 
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843) 
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647) 
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) 
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380) 
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:396) 
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488) 
+0

Il Jetty incorporato che viene fornito con GWT può essere un PITA da configurare (vedi http://stackoverflow.com/questions/2364129/how-to-to utilizzare-JSTL-in-a-GWT-progetto/2365106 # 2365106). Passerei a un server Java esterno (probabilmente quello che userai in produzione) e vedrò se persistono errori/eccezioni. Per maggiori informazioni vedi http://code.google.com/webtoolkit/doc/latest/FAQ_DebuggingAndCompiling.html#How_do_I_use_my_own_server_in_hosted_mode_instead_of_GWT%27s –

+0

così sono passato al deployer Tomcat, ma ora sto ricevendo il problema che la mia applicazione deve essere ricompilata , tutto quello che ho fatto è stato prendere il file di guerra per il mio gwt projwct e averlo inserito nella directory web apps, per quale ragione? – molleman

+0

Sì, leggi attentamente i documenti che ho collegato sopra: guarda il punto 4. Devi mettere il contenuto della cartella * di guerra * nella cartella webapps, non nel file war * * (nota: dovrai farlo una sola volta). –

risposta

13

Eliminazione ejb3-persistance.jar e la rimozione dal percorso di generazione risolto il mio problema, potrebbe funzionare anche per te.

Inoltre, non dimenticare di aggiungere hibernate-jpa-2.0-api-1.0.0.Final.jar al percorso di costruzione.

+0

yup l'ho risolto. – molleman

+0

Ancora un'altra esperienza di aggiornamento senza problemi. Grazie per il consiglio! –

4

uso javax.persistence API 2.0, ma non 1.0 uno

+0

che può essere scaricato dai sun repos all'indirizzo: http://download.java.net/maven/2/org/eclipse/persistence/javax.persistence/2.0.0/ e quindi installato con: mvn install: install-file -DgroupId = javax.persistence -DartifactId = persistence-api -Dversion = 2.0.0 -Dpackaging = jar -Dfile = percorso/su/scaricato/file.jar – joostschouten

2

Basta aggiungere un commento per aiutare eventualmente gli altri ad affrontarlo. Potrebbe anche essere che il server delle applicazioni fornisca una versione di JPA che "oscura" la versione di ibernazione. Per quanto mi riguarda ho dovuto fare qualcosa di simile:

 
mkdir /usr/local/resin/libremoved 
mv /usr/local/resin/lib/jpa* /usr/local/resin/libremoved/ 

0

Anche se si sta compilando con una libreria API "completa" Java EE (ad esempio quella che contiene sia APP e altre API come servlet, ecc), allora assicurati che la libreria completa sia più in basso del classpath rispetto alla libreria specifica JPA 2.0