N
nubsi
Gast
ich versuche gerade eine hsql datenbank via hibernate + datasource anzubinden.
folgender code funktioniert zwar ist aber nicht optimal. da ich keine möglichkeit habe das ganze zeug via persistence.xml zu konfigurieren, mache ich es via java code:
um jetzt trotzdem ein wenig konfigurationsmöglichkeiten zu haben, wollte ich eine datasource verwenden:
${JBOSS_HOME}/server/default/deploy/mydatasource-ds.xml
[XML]<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<!-- The jndi name of the DataSource, it is prefixed with java:/ -->
<!-- Datasources are not available outside the virtual machine -->
<jndi-name>MyDatasourceDS</jndi-name>
<!-- For in-process persistent db, saved when jboss stops.
The org.jboss.jdbc.HypersonicDatabase mbean is required for proper db shutdown -->
<connection-url>jdbc:hsqldb:${jboss.server.data.dir}${/}hypersonic${/}mydatabase</connection-url>
<!-- The driver class -->
<driver-class>org.hsqldb.jdbcDriver</driver-class>
<!-- The login and password -->
<user-name>sa</user-name>
<password></password>
<!-- The minimum connections in a pool/sub-pool. Pools are lazily constructed on first use -->
<min-pool-size>5</min-pool-size>
<!-- The maximum connections in a pool/sub-pool -->
<max-pool-size>20</max-pool-size>
<!-- The time before an unused connection is destroyed -->
<idle-timeout-minutes>0</idle-timeout-minutes>
<!-- Use the security domain defined in conf/login-config.xml -->
<security-domain>HsqlDbRealm</security-domain>
<!-- HSQL DB benefits from prepared statement caching -->
<prepared-statement-cache-size>32</prepared-statement-cache-size>
<!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
<metadata>
<type-mapping>Hypersonic SQL</type-mapping>
</metadata>
<!-- When using in-process (standalone) mode -->
<depends>jboss:service=Hypersonic,database=mydatabase</depends>
</local-tx-datasource>
<!-- For hsqldb accessed from jboss only, in-process (standalone) mode -->
<mbean code="org.jboss.jdbc.HypersonicDatabase" name="jboss:service=Hypersonic,database=mydatabase">
<attribute name="Database">mydatabase</attribute>
<attribute name="InProcessMode">true</attribute>
</mbean>
</datasources>
[/XML]
und eben das funktioniert leider nicht. der aufruf von "transaction.begin()" erzeugt eine java.lang.UnsupportedOperationException:
zuvor ist im log noch das hier zu sehen:
das ganze soll in einem jboss-4.2.3 laufen.
mache ich was falsch?
hab ich was vergessen/übersehen?
folgender code funktioniert zwar ist aber nicht optimal. da ich keine möglichkeit habe das ganze zeug via persistence.xml zu konfigurieren, mache ich es via java code:
Java:
final Ejb3Configuration configuration = new Ejb3Configuration();
final EntityManagerFactory entityManagerFactory;
final EntityManager manager;
final EntityTransaction transaction;
configuration.addAnnotatedClass(MyAnnotatedClass.class);
configuration.setProperty("hibernate.dialect", "org.hibernate.dialect.HSQLDialect");
configuration.setProperty("hibernate.connection.driver_class", "org.hsqldb.jdbcDriver");
configuration.setProperty("hibernate.connection.username", "sa");
configuration.setProperty("hibernate.connection.password", "");
configuration.setProperty("hibernate.connection.url", "jdbc:hsqldb:mydatabase");
configuration.setProperty("hibernate.hbm2ddl.auto", "create");
configuration.setProperty("hibernate.max_fetch_depth", "3");
configuration.setProperty("hibernate.showSql", "true");
entityManagerFactory = configuration.createEntityManagerFactory();
manager = this.entityManagerFactory.createEntityManager();
transaction = manager.getTransaction();
transaction.begin();
try {
manager.persist(new MyAnnotatedClass());
transaction.commit();
} catch(Throwable t) {
transaction.rollback();
}
um jetzt trotzdem ein wenig konfigurationsmöglichkeiten zu haben, wollte ich eine datasource verwenden:
${JBOSS_HOME}/server/default/deploy/mydatasource-ds.xml
[XML]<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<!-- The jndi name of the DataSource, it is prefixed with java:/ -->
<!-- Datasources are not available outside the virtual machine -->
<jndi-name>MyDatasourceDS</jndi-name>
<!-- For in-process persistent db, saved when jboss stops.
The org.jboss.jdbc.HypersonicDatabase mbean is required for proper db shutdown -->
<connection-url>jdbc:hsqldb:${jboss.server.data.dir}${/}hypersonic${/}mydatabase</connection-url>
<!-- The driver class -->
<driver-class>org.hsqldb.jdbcDriver</driver-class>
<!-- The login and password -->
<user-name>sa</user-name>
<password></password>
<!-- The minimum connections in a pool/sub-pool. Pools are lazily constructed on first use -->
<min-pool-size>5</min-pool-size>
<!-- The maximum connections in a pool/sub-pool -->
<max-pool-size>20</max-pool-size>
<!-- The time before an unused connection is destroyed -->
<idle-timeout-minutes>0</idle-timeout-minutes>
<!-- Use the security domain defined in conf/login-config.xml -->
<security-domain>HsqlDbRealm</security-domain>
<!-- HSQL DB benefits from prepared statement caching -->
<prepared-statement-cache-size>32</prepared-statement-cache-size>
<!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
<metadata>
<type-mapping>Hypersonic SQL</type-mapping>
</metadata>
<!-- When using in-process (standalone) mode -->
<depends>jboss:service=Hypersonic,database=mydatabase</depends>
</local-tx-datasource>
<!-- For hsqldb accessed from jboss only, in-process (standalone) mode -->
<mbean code="org.jboss.jdbc.HypersonicDatabase" name="jboss:service=Hypersonic,database=mydatabase">
<attribute name="Database">mydatabase</attribute>
<attribute name="InProcessMode">true</attribute>
</mbean>
</datasources>
[/XML]
Java:
final Ejb3Configuration configuration = new Ejb3Configuration();
final EntityManagerFactory entityManagerFactory;
final EntityManager manager;
final EntityTransaction transaction;
configuration.addAnnotatedClass(MyAnnotatedClass.class);
configuration.setProperty("hibernate.dialect", "org.hibernate.dialect.HSQLDialect");
configuration.setProperty("connection.datasource", "java:MyDatasourceDS");
entityManagerFactory = configuration.createEntityManagerFactory();
manager = this.entityManagerFactory.createEntityManager();
transaction = manager.getTransaction();
transaction.begin();
try {
manager.persist(new MyAnnotatedClass());
transaction.commit();
} catch(Throwable t) {
transaction.rollback();
}
und eben das funktioniert leider nicht. der aufruf von "transaction.begin()" erzeugt eine java.lang.UnsupportedOperationException:
Code:
java.lang.UnsupportedOperationException: The user must supply a JDBC connection
at org.hibernate.connection.UserSuppliedConnectionProvider.getConnection(UserSuppliedConnectionProvider.java:30)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:423)
at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:144)
at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:119)
at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:57)
at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1326)
at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:38)
...
zuvor ist im log noch das hier zu sehen:
Code:
[SessionFactoryObjectFactory] Not binding factory to JNDI, no JNDI name configured
das ganze soll in einem jboss-4.2.3 laufen.
mache ich was falsch?
hab ich was vergessen/übersehen?