Postgres in JBoss konfigurieren

acky

Mitglied
Hallo.

ich versuche leicht verzweifelt, ein Beispiel EJB3 aus einem Buch - Source-Code unter:
http://files.hanser.de/hanser/docs/20070606_2766133337-61_Beispiele.zip
zu beziehen, package "entity" - auf Postgres-DB umzustellen.

Unter JBoss 4.2 mit der Default-DB Hypersonic funktioniert es fabelhaft.

Laut Anweisung habe ich eine Datei postgres-ds.xml in dem Verzeichnis ...\server\default\deploy hinterlegt und die persistence.xml-Datei wie folgt angepasst sowie die Entity, die Sequenz in Postgres ist ebenfalls definiert (s.u.).

Muss ich weitere Konfigurationen vornehmen - oder hab ich was falsch gemacht?

Vielen Dank für jeden Hinweis!
acky

Dabei erhalte ich folgende Fehlermeldungen:

JBoss:
Code:
11:36:50,875 INFO  [STDOUT] Hibernate: select nextval ('public.KUNDE_SEQ')
11:36:51,031 WARN  [JDBCExceptionReporter] SQL Error: 0, SQLState: 42P01
11:36:51,031 ERROR [JDBCExceptionReporter] ERROR: relation "public.kunde_seq" does not exist

Client:
Code:
Exception in thread "main" javax.ejb.EJBException: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not get next sequence value
	at org.jboss.ejb3.tx.Ejb3TxPolicy.handleExceptionInOurTx(Ejb3TxPolicy.java:63)
	at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:83)

Man sagte mir, dass erkennbar sei, dass bereits eine Verbindung zur Postgres-DB daraus zu erkennen sei - was ich jedoch bezweifel.

---------------------------------------------------------

postgres-ds.xml
Code:
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
	<local-tx-datasource>
		<jndi-name>PostgresDS</jndi-name>
		<connection-url>jdbc:postgresql://localhost:5432/postgres</connection-url>
		<driver-class>org.postgresql.Driver</driver-class>
		
		<user-name>postgres</user-name>
		<password>postgres</password>
		
		<min-pool-size>1</min-pool-size>
		<max-pool-size>4</max-pool-size>
	</local-tx-datasource>
</datasources>

persistence.xml
Code:
<persistence>
	<persistence-unit name="kunde">
		<jta-data-source>java:/PostgresDS</jta-data-source>		
		<properties>
			<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
			<property name="hibernate.show_sql" value="true" />
			
			<property name="hibernate.connection.driver_class" value="org.postgresql.Driver" />
			<property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/postgres" />
			<property name="hibernate.connection.username" value="postgres" />
			<property name="hibernate.connection.password" value="postgres" />
			<property name="hibernate.default_schema" value="public" />
			
			<property name="hibernate.hbm2ddl.auto" value="create" />
			<property name="hibernate.hbm2ddl.auto" value="create-drop" />
		</properties>
	</persistence-unit>
</persistence>

Entity:
Code:
@Entity
@SequenceGenerator(name = "KUNDE_SEQ", sequenceName = "KUNDE_SEQ")
public class Kunde implements Serializable {
	private int id;
	private String vorname;  
	private String nachname; 

	@Id
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "KUNDE_SEQ")
	@Column(name = "id")
	public int getId() {  
		return id;
	}

Sequenz in Postgres:
Code:
-- Sequence: "KUNDE_SEQ"

-- DROP SEQUENCE "KUNDE_SEQ";

CREATE SEQUENCE "KUNDE_SEQ"
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 1
  CACHE 1;
ALTER TABLE "KUNDE_SEQ" OWNER TO postgres;
 
sequenz ist ja im bild auch im public-schema zu sehen ...
du meinst, weil "kunde_seq" in der fehlermeldung klein geschrieben ist? weiss auch nicht, wie es kommt, habe es in allen vorkommnissen gross geschrieben, und steht auch so in postgres - siehe bild

kann ich denn irgendwie testen, ob denn wirklich eine verbindung zur postgres-DB aufgebaut wurde - oder mich näher an das problem rantasten?

danke!
 
ok, es funktioniert!
ich habe sequenz- und tabellennamen auf kleinschreibung umgestellt, da in der fehlermeldung der sequenzname so auftauchte ... und dieses ebenfalls in der entity angepasst.

Code:
@Entity
@SequenceGenerator(name = "SEQ_KUNDE", sequenceName = "seq_kunde")
public class Kunde implements Serializable {
	private int id;
	private String vorname;  
	private String nachname; 

	@Id
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_KUNDE")
	@Column(name = "id")
	public int getId() {  
		return id;
	}

Code:
-- Database: postgres

-- DROP DATABASE postgres;

CREATE SCHEMA public
  AUTHORIZATION postgres;
GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO public;

CREATE SEQUENCE public."seq_kunde" 
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 1
  CACHE 1;

CREATE TABLE public."kunde" (
	id bigint NOT NULL DEFAULT nextval('public."seq_kunde"'::regclass),
	vorname text NOT NULL,
	nachname text NOT NULL,
	primary key(ID)	
);
ALTER TABLE public."kunde" OWNER TO postgres;
 
Zurück