Toplink bekommt irgendwo den falschen Prot her

RealHAZZARD

Erfahrenes Mitglied
Tag auch,

ich wollte mal so ein bißchen rumbasteln, aber ich kam nicht weit. Mein Spielplatz besteht aus einem Glassfish Server V2 und Toplink für die Persistenz. Weil ich nur erstmal sehen wollte, ob ich die Voraussetzungen erfüllen kann, hab ich mir mal schnell etwas iurecht geschrieben. Da steht Folgendes drin:
Java:
EntityManager em = factory.createEntityManager();
factory = Persistence.createEntityManagerFactory("sis");
EntityManager em = factory.createEntityManager();

Meine persistence.xml sieht so aus:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence">
    <persistence-unit name="sis" transaction-type="RESOURCE_LOCAL">
        <provider>oracle.toplink.essentials.PersistenceProvider</provider>
        <class>data.entities.Unit</class>
        <properties>                                      
            <property name="toplink.jdbc.driver" value="com.mysql.jdbc.Driver"/>
            <property name="toplink.jdbc.url" value="jdbc:mysql://localhost:3306/sis"/>
            <property name="toplink.jdbc.user" value="********"></property>
            <property name="toplink.jdbc.password" value="*******"></property>
            <property name="toplink.logging.level" value="INFO"></property>
        </properties>
    </persistence-unit>
</persistence>
Und ich bekomme folgenden Fehler, wenn ich das Ganze ausführe:
Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.0 (Build b58g-fcs (09/07/2007))): oracle.toplink.essentials.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Error in allocating a connection. Cause: Connection could not be allocated because: java.net.ConnectException: Fehler beim Herstellen der Verbindung zum Server localhost am Port 1527. Nachricht: Connection refused: connect.
Error Code: 0
at oracle.toplink.essentials.exceptions.DatabaseException.sqlException(DatabaseException.java:305)
at oracle.toplink.essentials.jndi.JNDIConnector.connect(JNDIConnector.java:150)
at oracle.toplink.essentials.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:184)
at oracle.toplink.essentials.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:582)
at oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:280)
at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:229)
at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerFactoryImpl.getServerSession(EntityManagerFactoryImpl.java:93)
at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:126)
at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:120)
at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:91)
at servlets.EntityManagerServlet.service(EntityManagerServlet.java:26)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:411)
usw.
Wie kommt der eigentlich auf diesen Port? Ich habe ihm doch den Prot angegeben(3306)! Versteht das einer?
Ich habe auch schon versucht ihm statt localhost meinen Rechnername einzutragen (Ist zwar im Endeffekt das Selbe, aber ich wollte sehen, ob er das Ziel in der Fehlermeldung auch dem entsprechend ändert), aber in der Fehlermeldung nennt er das Ziel dennoch localhost.
Also mich beschleicht der Verdacht, dass er die persistence.xml an dieser Stelle nicht liest.
Kann mir einer helfen?
 
Zuletzt bearbeitet:
Wo liegt die persistence.xml?
Projektordner/WebContent/META-INF und
Projektordner/src/META-INF. Ich war so verzweifelt, dass ich sie mal doppelt halte.

Warum lässt du dir die EntityManagerFactory nicht injecten?
Wie bitte? Du musst wissen ich bin Anfänger. Ich kann mir unter dieser Frage nicht vorstellen. Kann du sie bitte neu formulieren?

Danke für die schnelle Antwort.
 
Projektordner/WebContent/META-INF und
Projektordner/src/META-INF. Ich war so verzweifelt, dass ich sie mal doppelt halte.
Wirf die WebContent/META-INF weg. Wenn du das Projekt über den EclipseWizard angelegt hast, sollte dir der eigentlich die orm.xml und persistence.xml nur in src/META-INF angelegt haben.

Wie bitte? Du musst wissen ich bin Anfänger. Ich kann mir unter dieser Frage nicht vorstellen. Kann du sie bitte neu formulieren?

Danke für die schnelle Antwort.

Du musst bzw. solltest in Serverumgebungen solche gemanagten Komponenten nicht selber instantiieren, sondern dir über die Mittel die dir der Container zur Verfügung stellt geben lassen. Das ganze heißt Dependency Injection (daher injecten) und sollte für das effiziente Arbeiten mit EJB zumindest halbwegs verstanden werden. Kurz: es reicht eine Property entityManagerFactory im Servlet, die mit der Annotation @PersistenceUnit annotiert ist. Diese wird dann automatisch vom Container gesetzt. Du brauchst sie dann nur noch zu benutzen

Java:
@PersistenceUnit
private EntityManagerFactory entityManagerFactory;

// in der Methode dann
entityManager = entityManagerFactory.createFactory();
entityManager.persist(deineEntity);

Ich glaub hier im Forum gibts schon ein paar Themen mit Beiträgen von mir zur Verwendung von JPA in Servlets, gerade was Threadsafety usw. angeht. Einfach mal Stöbern. Die gängigen Tutorials von Sun z.B. sollten grundsätzliche Sachen auch klären.

Gruß
Ollie
 
Danke für die schnelle Antwort, aber leider will das nicht funktionieren. Ich habe es genau so gemacht, wie du es geschrieben hast, aber ich bekomme noch exakt den selben Fehler, wie oben beschrieben.
Und was mir bei deiner Lösung fehlt: Muss ich die PersistenceUnit nicht auch namendlich angeben?
 
In der Annotation nicht, solang es nur eine PU gibt.
Was sagt denn das Log? Werden die gemappten Classfiles verarbeitet? Bist du dir überhaupt sicher, dass die persistence.xml geladen wird? Ich frag nur, weil 1527 der Standardport von der Derby DB ist, die im JDK 6 enthalten ist. Kann sein, dass er, wenn er keine DB Konfiguration findet, die Standard DB ansprechen möchte.

Habt ihr das ganze schonmal ohne große Server Infrastruktur versucht? Einfache Javaklasse, persistenz selbst hochziehen?

Gruß
Ollie
 
Die log sagt folgendes:
start
verbose
[#|2008-02-17T13:21:13.218+0100|INFO|sun-appserver9.1|javax.enterprise.system.core|_ThreadID=10;_ThreadName=main;|Starting Sun Java System Application Server 9.1_01 (build b09d-fcs) ...|#]

[#|2008-02-17T13:21:15.453+0100|INFO|sun-appserver9.1|javax.enterprise.system.core|_ThreadID=11;_ThreadName=pool-1-thread-2;com.sun.enterprise.interceptor.DynamicInterceptor;|MBeanServer started: com.sun.enterprise.interceptor.DynamicInterceptor|#]

[#|2008-02-17T13:21:16.406+0100|INFO|sun-appserver9.1|javax.enterprise.system.core|_ThreadID=10;_ThreadName=main;|CORE5098: AS Socket Service Initialization has been completed.|#]

[#|2008-02-17T13:21:16.953+0100|INFO|sun-appserver9.1|javax.enterprise.system.core|_ThreadID=10;_ThreadName=main;Java HotSpot(TM) Client VM;1.6.0_01;Sun Microsystems Inc.;|CORE5076: Using [Java HotSpot(TM) Client VM, Version 1.6.0_01] from [Sun Microsystems Inc.]|#]

[#|2008-02-17T13:21:17.109+0100|INFO|sun-appserver9.1|javax.enterprise.system.core.security|_ThreadID=10;_ThreadName=main;|SEC1002: Security Manager is OFF.|#]

[#|2008-02-17T13:21:20.718+0100|INFO|sun-appserver9.1|javax.enterprise.system.stream.out|_ThreadID=10;_ThreadName=main;|C:/Programme/Java/glassfish/domains/domain1/config/.__com_sun_appserv_pid|#]

[#|2008-02-17T13:21:22.546+0100|INFO|sun-appserver9.1|javax.enterprise.system.tools.admin|_ThreadID=10;_ThreadName=main;|ADM0001:SunoneInterceptor is now enabled|#]

[#|2008-02-17T13:21:23.390+0100|INFO|sun-appserver9.1|javax.enterprise.system.core.security|_ThreadID=10;_ThreadName=main;com.sun.enterprise.security.provider.PolicyWrapper;|SEC1143: Loading policy provider com.sun.enterprise.security.provider.PolicyWrapper.|#]

[#|2008-02-17T13:21:26.750+0100|INFO|sun-appserver9.1|javax.enterprise.system.container.web|_ThreadID=10;_ThreadName=main;server;|WEB0114: SSO is disabled in virtual server [server]|#]

[#|2008-02-17T13:21:26.781+0100|INFO|sun-appserver9.1|javax.enterprise.system.container.web|_ThreadID=10;_ThreadName=main;__asadmin;|WEB0114: SSO is disabled in virtual server [__asadmin]|#]

[#|2008-02-17T13:21:28.859+0100|INFO|sun-appserver9.1|javax.enterprise.system.tools.admin|_ThreadID=10;_ThreadName=main;|ADM1079: Initialization of AMX MBeans started|#]

[#|2008-02-17T13:21:30.531+0100|INFO|sun-appserver9.1|javax.enterprise.system.tools.admin|_ThreadID=12;_ThreadName=Thread-16;service:jmx:rmi:///jndi/rmi://handlampe:8686/jmxrmi;|ADM1504: Here is the JMXServiceURL for the Standard JMXConnectorServer: [service:jmx:rmi:///jndi/rmi://handlampe:8686/jmxrmi]. This is where the remote administrative clients should connect using the standard JMX connectors|#]

[#|2008-02-17T13:21:30.531+0100|INFO|sun-appserver9.1|javax.enterprise.system.tools.admin|_ThreadID=12;_ThreadName=Thread-16;true;|ADM1506: Status of Standard JMX Connector: Active = [true]|#]

[#|2008-02-17T13:21:34.484+0100|INFO|sun-appserver9.1|com.sun.jbi.framework|_ThreadID=10;_ThreadName=main;|JBIFW0010: JBI framework ready to accept requests.|#]

[#|2008-02-17T13:21:34.812+0100|INFO|sun-appserver9.1|javax.enterprise.system.container.web|_ThreadID=10;_ThreadName=main;|WEB0302: Starting Sun-Java-System/Application-Server.|#]

[#|2008-02-17T13:21:37.000+0100|INFO|sun-appserver9.1|javax.enterprise.system.container.web|_ThreadID=10;_ThreadName=main;8080;|WEB0712: Starting Sun-Java-System/Application-Server HTTP/1.1 on 8080|#]

[#|2008-02-17T13:21:37.312+0100|INFO|sun-appserver9.1|javax.enterprise.system.container.web|_ThreadID=10;_ThreadName=main;8181;|WEB0712: Starting Sun-Java-System/Application-Server HTTP/1.1 on 8181|#]

[#|2008-02-17T13:21:37.359+0100|INFO|sun-appserver9.1|javax.enterprise.system.container.web|_ThreadID=10;_ThreadName=main;4848;|WEB0712: Starting Sun-Java-System/Application-Server HTTP/1.1 on 4848|#]

[#|2008-02-17T13:21:40.078+0100|INFO|sun-appserver9.1|javax.enterprise.system.core.naming|_ThreadID=10;_ThreadName=main;java:comp/env/servlets.EntityManagerServlet/factory;|naming.bind|#]

[#|2008-02-17T13:21:44.578+0100|INFO|sun-appserver9.1|javax.enterprise.system.core.selfmanagement|_ThreadID=10;_ThreadName=main;|SMGT0007: Self Management Rules service is enabled|#]

[#|2008-02-17T13:21:45.000+0100|INFO|sun-appserver9.1|javax.enterprise.system.core|_ThreadID=10;_ThreadName=main;|Application server startup complete.|#]

[#|2008-02-17T13:21:45.406+0100|INFO|sun-appserver9.1|javax.enterprise.resource.webcontainer.jsf.config|_ThreadID=13;_ThreadName=httpWorkerThread-4848-1;;|Initializing Sun's JavaServer Faces implementation (1.2_04-b20-p03) for context ''|#]

[#|2008-02-17T13:22:03.703+0100|INFO|sun-appserver9.1|javax.enterprise.system.tools.deployment|_ThreadID=14;_ThreadName=Thread-25;|deployed with moduleid = SIS|#]

[#|2008-02-17T13:22:04.171+0100|INFO|sun-appserver9.1|javax.enterprise.system.core.naming|_ThreadID=15;_ThreadName=httpWorkerThread-4848-0;java:comp/env/servlets.EntityManagerServlet/factory;|naming.bind|#]

[#|2008-02-17T13:22:26.640+0100|INFO|sun-appserver9.1|oracle.toplink.essentials.session.file:/D:/EIGENE%20PROJEKTE/Eclipse/J2EE/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/SIS/WEB-INF/classes/-sis|_ThreadID=16;_ThreadName=httpSSLWorkerThread-8080-0;|TopLink, version: Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))|#]

[#|2008-02-17T13:22:26.656+0100|INFO|sun-appserver9.1|oracle.toplink.essentials.session.file:/D:/EIGENE%20PROJEKTE/Eclipse/J2EE/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/SIS/WEB-INF/classes/-sis|_ThreadID=16;_ThreadName=httpSSLWorkerThread-8080-0;|Server: unknown|#]

[#|2008-02-17T13:22:27.968+0100|WARNING|sun-appserver9.1|javax.enterprise.resource.resourceadapter|_ThreadID=16;_ThreadName=httpSSLWorkerThread-8080-0;DerbyPool;Connection could not be allocated because: java.net.ConnectException: Fehler beim Herstellen der Verbindung zum Server localhost am Port 1527. Nachricht: Connection refused: connect.;_RequestID=db9eb751-c294-45c4-99b5-b2050e226d50;|RAR5038:Unexpected exception while creating resource for pool DerbyPool. Exception : Connection could not be allocated because: java.net.ConnectException: Fehler beim Herstellen der Verbindung zum Server localhost am Port 1527. Nachricht: Connection refused: connect.|#]

[#|2008-02-17T13:22:27.968+0100|WARNING|sun-appserver9.1|javax.enterprise.resource.resourceadapter|_ThreadID=16;_ThreadName=httpSSLWorkerThread-8080-0;DerbyPool;Connection could not be allocated because: java.net.ConnectException: Fehler beim Herstellen der Verbindung zum Server localhost am Port 1527. Nachricht: Connection refused: connect.;_RequestID=db9eb751-c294-45c4-99b5-b2050e226d50;|RAR5117 : Failed to obtain/create connection from connection pool [ DerbyPool ]. Reason : Connection could not be allocated because: java.net.ConnectException: Fehler beim Herstellen der Verbindung zum Server localhost am Port 1527. Nachricht: Connection refused: connect.|#]

[#|2008-02-17T13:22:27.984+0100|WARNING|sun-appserver9.1|javax.enterprise.resource.resourceadapter|_ThreadID=16;_ThreadName=httpSSLWorkerThread-8080-0;Error in allocating a connection. Cause: Connection could not be allocated because: java.net.ConnectException: Fehler beim Herstellen der Verbindung zum Server localhost am Port 1527. Nachricht: Connection refused: connect.;_RequestID=db9eb751-c294-45c4-99b5-b2050e226d50;|RAR5114 : Error allocating connection : [Error in allocating a connection. Cause: Connection could not be allocated because: java.net.ConnectException: Fehler beim Herstellen der Verbindung zum Server localhost am Port 1527. Nachricht: Connection refused: connect.]|#]

[#|2008-02-17T13:22:27.984+0100|SEVERE|sun-appserver9.1|javax.enterprise.system.container.web|_ThreadID=16;_ThreadName=httpSSLWorkerThread-8080-0;_RequestID=db9eb751-c294-45c4-99b5-b2050e226d50;|StandardWrapperValve[EntityManagerServlet]: PWC1406: Servlet.service() for servlet EntityManagerServlet threw exception
Local Exception Stack:
Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Error in allocating a connection. Cause: Connection could not be allocated because: java.net.ConnectException: Fehler beim Herstellen der Verbindung zum Server localhost am Port 1527. Nachricht: Connection refused: connect.
Error Code: 0
at oracle.toplink.essentials.exceptions.DatabaseException.sqlException(DatabaseException.java:305)
at oracle.toplink.essentials.jndi.JNDIConnector.connect(JNDIConnector.java:150)
at oracle.toplink.essentials.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:184)
at oracle.toplink.essentials.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:582)
at oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:280)
at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:229)
at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerFactoryImpl.getServerSession(EntityManagerFactoryImpl.java:93)
at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:126)
at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:120)
at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:91)
at com.sun.enterprise.util.EntityManagerFactoryWrapper.createEntityManager(EntityManagerFactoryWrapper.java:172)
at servlets.EntityManagerServlet.service(EntityManagerServlet.java:25)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:411)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:290)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:271)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:202)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:272)
at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637)
at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568)
at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813)
at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341)
at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)
at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214)
at com.sun.enterprise.web.portunif.PortUnificationPipeline$PUTask.doTask(PortUnificationPipeline.java:380)
at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
Caused by: java.sql.SQLException: Error in allocating a connection. Cause: Connection could not be allocated because: java.net.ConnectException: Fehler beim Herstellen der Verbindung zum Server localhost am Port 1527. Nachricht: Connection refused: connect.
at com.sun.gjc.spi.base.DataSource.getConnection(DataSource.java:136)
at oracle.toplink.essentials.jndi.JNDIConnector.connect(JNDIConnector.java:147)
... 38 more
|#]

Bist du dir überhaupt sicher, dass die persistence.xml geladen wird? Ich frag nur, weil 1527 der Standardport von der Derby DB ist, die im JDK 6 enthalten ist. Kann sein, dass er, wenn er keine DB Konfiguration findet, die Standard DB ansprechen möchte.
Das ist ja auch meine Befürchtung. Aber ich kann das nicht überprüfen. Ich wüsste zumindest nicht wie. Vielleicht wirst du ja aus dem Log schlau...
 
Aus der solltest du eigentlich auch schlau werden. ;) Da steht eindeutig drin, dass versucht wird auf die Derby DB zuzgreifen. Wie euer Glassfish konfiguriert ist, weiß ich natürlich nicht. Ich vermute es gibt irgendwo eine Standardkonfiguration für JPA, die geladen wird, falls kein separates persistence.xml gefunden wird.

Exportier doch mal das Webprojekt als WAR File und schau ob und wo da die persistence.xml liegt. Das ist dann nämlich die Verzeichnisstruktur, wie sie der Container vorgesetzt bekommt.

Gruß
Ollie
 
Du hast recht. Die xml ist nicht mit drin, in dem veröffentlichten META-INF - Ordner gibt es die orm.xml, aber nicht die persistence.xml.
Was die Konfiguration des Servers angeht, kann ich sagen, dass daran noch garnichts geschehen ist. Das ist mein lokaler Spielplatz und da mich nicht wüsste was ich einstellen soll, habe ich bisher noch nichts eingestellt.
 
Okay, dann ist das scheinbar das Problem. SChau mal, ob du in Projekteigenschaften -> Java Build Path -> Source irgendwo ein Exclude definiert ist?

Wär das neu anlegen des Projektes zu aufwändig? Ich vermute, es ist einfach was bei den Projekteinstellungen durcheinander geraten.

Gruß
Ollie
 
Zurück