Java GWT, Hibernate und RPC - Komme nicht weiter

kellerlanplayer

www.Blog2Help.com
ID: 10624
L
29 April 2006
2.280
247
Hallo liebe Leute,
ich tüftel jetzt schon seit zwei Wochen damit rum und verzweifel zunehmenst.
Ich versuche mit dem GWT-Framework einen Wert in meine MYSQL-Datenbank zu bekommen. Da es schon einmal funktioniert hat und jetzt nicht mehr geht bin ich ratlos.

Vielleicht könnt ihr mir ja hier weiterhelfen.

So sieht mein Strukturbaum aus:


Die hibernate.cfg.xml Datei sieht folgendermaßen aus:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"https://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
	<session-factory>
		<!-- Database connection settings -->
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="hibernate.connection.url">jdbc:mysql://sql150.your-server.de/ddb_Testversion</property>
		<property name="hibernate.connection.username">robert</property>
		<property name="hibernate.connection.password">***</property>

		<!-- SQL dialect -->
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>

		<!-- JDBC connection pool (built-in) -->
		<property name="connection.pool_size">25</property>

		<!-- Disable the second-level cache -->
		<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

		<!-- Enable Hibernate's automatic session context management -->
		<property name="current_session_context_class">thread</property>
		
        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>
        
        <!-- C3p0 -->
		<property name="hibernate.c3p0.acquire_increment">1</property>
		<property name="hibernate.c3p0.idle_test_period">300</property>
		<property name="hibernate.c3p0.timeout">120</property>
		<property name="hibernate.c3p0.max_size">25</property>
		<property name="hibernate.c3p0.min_size">1</property>
		<property name="hibernate.c3p0.max_statement">0</property>
		<property name="hibernate.c3p0.preferredTestQuery">select 1;</property>
		<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>

		<!-- Mapping files -->
		
		<mapping resource="de/ddb/domain/Zyklus.hbm.xml" />
		
	</session-factory>
</hibernate-configuration>

Die Datei ZyklusFktServiceImpl sieht so aus

Code:
package de.ddb.server;

import org.hibernate.Session;


import com.google.gwt.user.server.rpc.RemoteServiceServlet;

import de.ddb.client.service.ZyklusFktService;
import de.ddb.domain.Zyklus;
import de.ddb.util.HibernateUtil;


public class ZyklusFktServiceImpl extends RemoteServiceServlet implements ZyklusFktService{

	
	private static final long serialVersionUID = 1L;

	@Override
	public void zyklusAnlegen(String name) {
		
		Zyklus zyklus = new Zyklus();
		
		zyklus.setBezeichnung(name);
		
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();	
		session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		session.save(zyklus);
		session.getTransaction().commit();
		
	}

}

Und in der Datei DDB in der die GUI ist, siehen die wichtigsten Funktionen so aus:
Code:
 ZyklusFktServiceAsync zyklusService = GWT.create(ZyklusFktService.class);

private void sendNameToServer() {
				// First, we validate the input.
				errorLabel.setText("");
				String textToServer = nameField.getText();
				if (!FieldVerifier.isValidName(textToServer)) {
					errorLabel.setText("Please enter at least four characters");
					return;
				}

				// Then, we send the input to the server.
				sendButton.setEnabled(false);
				textToServerLabel.setText(textToServer);
				serverResponseLabel.setText("");
				//greetingService.greetServer(textToServer,new AsyncCallback<String>() 
				
				AsyncCallback<Void> callback = new AsyncCallback<Void>() {
							public void onFailure(Throwable caught) {
								// Show the RPC error message to the user
								dialogBox
										.setText("Remote Procedure Call - Failure");
								serverResponseLabel
										.addStyleName("serverResponseLabelError");
								serverResponseLabel.setHTML(SERVER_ERROR);
								dialogBox.center();
								closeButton.setFocus(true);
							}

							@SuppressWarnings("unused")
							public void onSuccess(String result) {
								dialogBox.setText("Remote Procedure Call");
								serverResponseLabel
										.removeStyleName("serverResponseLabelError");
								serverResponseLabel.setHTML(result);
								dialogBox.center();
								closeButton.setFocus(true);
							}

							@Override
							public void onSuccess(Void result) {
								// TODO Auto-generated method stub
								
							}
						};
				
				zyklusService.zyklusAnlegen(nameField.getText(), callback);
			}

Folgende externe JARs sind eingebunden:



Ich hab schon einiges ausprobiert, wie die aktuellen Jars zu benutzen, Hibernate ohne RPC zu probieren etc... Und ich komme nie recht weit. Auch die Dokumentation hilft mir nicht recht weiter, das einstiegstutorial umgemünzt auf Hibernate geht auch nicht.
Da wir aber Hibernate mit GWT schon einmal zum laufen bekommen haben in unserem Studiumprojekt und ich es eigtl. genauso gemacht habe, wie dort und es nicht geht weiß ich nicht weiter. Vielleicht findet ja wer meinen Fehler.


Aktuell kommt folgende Fehlermeldung, jedoch, wenn die behoben wird, kommt sicher wieder eine andere, so wie ich es in den letzten 2 Wochen erfahren habe ... Also glaub ich, dass ich einen grundsätzlichen Fehler beim Aufbau von Hibernate habe.

Ausgabe der Console
Code:
47 [22222548@qtp-22108593-0] INFO org.hibernate.cfg.Environment - Hibernate 3.3.1.GA
63 [22222548@qtp-22108593-0] INFO org.hibernate.cfg.Environment - hibernate.properties not found
63 [22222548@qtp-22108593-0] INFO org.hibernate.cfg.Environment - Bytecode provider name : javassist
78 [22222548@qtp-22108593-0] INFO org.hibernate.cfg.Environment - using JDK 1.4 java.sql.Timestamp handling
250 [22222548@qtp-22108593-0] INFO org.hibernate.cfg.Configuration - configuring from resource: /hibernate.cfg.xml
250 [22222548@qtp-22108593-0] INFO org.hibernate.cfg.Configuration - Configuration resource: /hibernate.cfg.xml
406 [22222548@qtp-22108593-0] INFO org.hibernate.cfg.Configuration - Reading mappings from resource : de/ddb/domain/Zyklus.hbm.xml
531 [22222548@qtp-22108593-0] INFO org.hibernate.cfg.HbmBinder - Mapping class: de.ddb.domain.Zyklus -> zyklus
578 [22222548@qtp-22108593-0] INFO org.hibernate.cfg.Configuration - Configured SessionFactory: null
1063 [22222548@qtp-22108593-0] INFO org.hibernate.connection.ConnectionProviderFactory - Initializing connection provider: org.hibernate.connection.C3P0ConnectionProvider
1063 [22222548@qtp-22108593-0] INFO org.hibernate.connection.C3P0ConnectionProvider - C3P0 using driver: com.mysql.jdbc.Driver at URL: jdbc:mysql://sql150.your-server.de/ddb_Testversion
1063 [22222548@qtp-22108593-0] INFO org.hibernate.connection.C3P0ConnectionProvider - Connection properties: {user=robert, password=****}
1063 [22222548@qtp-22108593-0] INFO org.hibernate.connection.C3P0ConnectionProvider - autocommit mode: false
Initial SessionFactory creation failed.java.lang.NoClassDefFoundError: java.lang.management.ManagementFactory is a restricted class. Please see the Google  App Engine developer's guide for more details.
18.04.2012 16:50:41 com.google.appengine.tools.development.ApiProxyLocalImpl log
SCHWERWIEGEND: javax.servlet.ServletContext log: Exception while dispatching incoming RPC call
com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract void de.ddb.client.service.ZyklusFktService.zyklusAnlegen(java.lang.String)' threw an unexpected exception: java.lang.ExceptionInInitializerError
	at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:385)
	at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:588)
	at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208)
	at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248)
	at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
	at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:35)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
	at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:58)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
	at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
	at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:122)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
	at com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
	at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:70)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
	at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:351)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
	at org.mortbay.jetty.Server.handle(Server.java:326)
	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
	at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:938)
	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755)
	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
	at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
	at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Caused by: java.lang.ExceptionInInitializerError
	at de.ddb.util.HibernateUtil.<clinit>(HibernateUtil.java:20)
	at de.ddb.server.ZyklusFktServiceImpl.zyklusAnlegen(ZyklusFktServiceImpl.java:25)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:100)
	at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:569)
	... 34 more
Caused by: java.lang.NoClassDefFoundError: java.lang.management.ManagementFactory is a restricted class. Please see the Google  App Engine developer's guide for more details.
	at com.google.appengine.tools.development.agent.runtime.Runtime.reject(Runtime.java:51)
	at com.mchange.v2.c3p0.management.ActiveManagementCoordinator.<init>(ActiveManagementCoordinator.java:42)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at com.google.appengine.tools.development.agent.runtime.Runtime.newInstance_(Runtime.java:112)
	at com.google.appengine.tools.development.agent.runtime.Runtime.newInstance(Runtime.java:132)
	at com.mchange.v2.c3p0.C3P0Registry.<clinit>(C3P0Registry.java:134)
	at com.mchange.v2.c3p0.impl.DriverManagerDataSourceBase.<init>(DriverManagerDataSourceBase.java:206)
	at com.mchange.v2.c3p0.DriverManagerDataSource.<init>(DriverManagerDataSource.java:60)
	at com.mchange.v2.c3p0.DriverManagerDataSource.<init>(DriverManagerDataSource.java:56)
	at com.mchange.v2.c3p0.DataSources.unpooledDataSource(DataSources.java:152)
	at org.hibernate.connection.C3P0ConnectionProvider.configure(C3P0ConnectionProvider.java:176)
	at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:137)
	at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:79)
	at org.hibernate.cfg.SettingsFactory.createConnectionProvider(SettingsFactory.java:448)
	at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:89)
	at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2101)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1325)
	at de.ddb.util.HibernateUtil.<clinit>(HibernateUtil.java:16)
	... 41 more

Danke schon einmal für eure Mühen:!:
 
Das sieht nun für mich nicht nach einem GWT-Problem aus.

Wie ist das nun zu verstehen? Du hast das schon mal in einem nicht-GWT-Projekt ausprobiert?
Lief es da?
Ich würde das nämlich erst einmal in einem ganz normalen Java Projekt probieren und wenn es da läuft, den Code in die Server-Implementation übernehmen. Denn die Server-Implementation ist ja nichts anderes mehr, als direkter Java-Code und dann sollte das schon eher funktionieren.

Mit Hibernate habe ich leider noch gar nichts gemacht, ich könnte nur EclipseLink (in Verbindung mit dem GWT) anbieten :-?
 
Hi,

hast Du diesen Teil des Stacktrace schon beachtet:

Caused by: java.lang.NoClassDefFoundError: java.lang.management.ManagementFactory is a restricted class. Please see the Google App Engine developer's guide for more details.​

Was sagt der guide dazu?