[jboss-jira] [JBoss JIRA] (WFLY-2027) EE Default DataSource is not working
Scott Marlow (JIRA)
jira-events at lists.jboss.org
Fri Oct 18 19:36:02 EDT 2013
[ https://issues.jboss.org/browse/WFLY-2027?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12823298#comment-12823298 ]
Scott Marlow commented on WFLY-2027:
------------------------------------
I agree that is the spirit of what the blog conveys, however, it is ambiguous (IMO) how the blog describes what the container must do when it quotes the following part of the JPA 2.1 spec. I shouldn't feel ambiguous but I do, since this JPA requirement is not tied to EE7 (it was also in the JPA 2.0 spec).
It may also be that the EE 7 spec section quoted above was *intended* to also apply to JPA, however, I'm trying to separate wanting to do this change from what we are required by (EE/JPA) specification to do. Which is why I asked the question about why. :)
I agree that changing JPA to use the EE default DataSource, would be useful. However, others raised the concern that someone could easily forget to specify the datasource and find themselves (unexpectedly) using the wrong database. Anyway, please vote for WFLY-2212 if you want to see it completed (more likely to be WF9 at this point).
{quote}
JPA 2.1 section 8.2.1.5 jta-data-source, non-jta-data-source
In Java EE environments, the jta-data-source and non-jta-data-source elements are used to specify the JNDI name of the JTA and/or non-JTA data source to be used by the persistence provider. If neither is specified, the deployer must specify a JTA data source at deployment or the default JTA data source must be provided by the container, and a JTA EntityManagerFactory will be created to correspond to it.
In Java SE environments, these elements may be used or the data source information may be specified
by other means—depending upon the requirements of the provider.
{quote}
Also, the WildFly configuration (e.g. wf/standalone/configuration/standalone.xml or whichever config your using) contains:
{quote}
<subsystem xmlns="urn:jboss:domain:jpa:1.1">
<jpa default-datasource="" default-extended-persistence-inheritance="DEEP"/>
</subsystem>
{quote}
The jpa default-datasource can be specified, which does what your asking for (with the limitation that it is blank out of the box).
> EE Default DataSource is not working
> ------------------------------------
>
> Key: WFLY-2027
> URL: https://issues.jboss.org/browse/WFLY-2027
> Project: WildFly
> Issue Type: Bug
> Components: ConfigAdmin, Domain Management, EE, JCA, JPA / Hibernate, Web Console
> Affects Versions: 8.0.0.Alpha4
> Reporter: Lincoln Baxter III
> Assignee: Eduardo Martins
> Fix For: 8.0.0.Beta1
>
>
> The EE spec states that a default datasource must be supplied under: java:comp/DefaultDataSource, and if none is specified by the @Resource or persistence.xml, it must be assumed:
> {code}EE 5.19
> The Java EE Platform requires that a Java EE Product Provider provide a database
> in the operational environment (see Section EE.2.6, “Database”). The Java EE
> Product Provider must also provide a preconfigured, default data source for use by
> the application in accessing this database.
> The Java EE Product Provider must make the default data source accessible to
> the application under the JNDI name java:comp/DefaultDataSource.
> The Application Component Provider or Deployer may explicitly bind a
> DataSource resource reference to the default data source using the lookup element
> of the Resource annotation or the lookup-name element of the resource-ref
> deployment descriptor element. For example,
> @Resource(lookup="java:comp/DefaultDataSource")
> DataSource myDS;
> In the absence of such a binding, the mapping of the reference will default to
> the product's default data source.
> For example, the following will map to a preconfigured data source for the
> product's default database:
> @Resource
> DataSource myDS;{code}
> This, isn't working however:
> {code}
> <persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://www.oracle.com/webfolder/technetwork/jsc/xml/ns/persistence/persistence_2_1.xsd">
> <persistence-unit name="default" transaction-type="JTA">
> </persistence-unit>
> </persistence>{code}
> Results in:
> {code}
> 10:41:31,002 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 50) MSC000001: Failed to start service jboss.persistenceunit."jpa-standard.war#default": org.jboss.msc.service.StartException in service jboss.persistenceunit."jpa-standard.war#default": org.hibernate.HibernateException: Connection cannot be null when 'hibernate.dialect' not set
> at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:134) [wildfly-jpa-8.0.0.Alpha4.jar:8.0.0.Alpha4]
> at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_21]
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_21]
> at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_21]
> at org.jboss.threads.JBossThread.run(JBossThread.java:122) [jboss-threads-2.1.0.Final.jar:2.1.0.Final]
> Caused by: org.hibernate.HibernateException: Connection cannot be null when 'hibernate.dialect' not set
> at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:98)
> at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:66)
> at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:193)
> at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:88)
> at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:159)
> at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:131)
> at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1844)
> at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1802)
> at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:844)
> at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:836)
> at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:368)
> at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:835)
> at org.jboss.as.jpa.hibernate4.management.TwoPhaseBootstrapImpl.build(TwoPhaseBootstrapImpl.java:44)
> at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:115) [wildfly-jpa-8.0.0.Alpha4.jar:8.0.0.Alpha4]
> ... 4 more
> 10:41:31,010 ERROR [org.jboss.as.controller.management-operation] (DeploymentScanner-threads - 1) JBAS014613: Operation ("full-replace-deployment") failed - address: ([]) - failure description: {"JBAS014671: Failed services" => {"jboss.persistenceunit.\"jpa-standard.war#default\"" => "org.jboss.msc.service.StartException in service jboss.persistenceunit.\"jpa-standard.war#default\": org.hibernate.HibernateException: Connection cannot be null when 'hibernate.dialect' not set
> Caused by: org.hibernate.HibernateException: Connection cannot be null when 'hibernate.dialect' not set"}}
> {code}
> Additionally, actually specifying the expected JDNI name of the default DS like this:
> {code} <persistence-unit name="default" transaction-type="JTA">
> <jta-data-source>java:comp/DefaultDataSource</jta-data-source>
> <exclude-unlisted-classes>false</exclude-unlisted-classes>
> </persistence-unit>{code}
> Results in this:
> {code}
> JBAS014775: New missing/unsatisfied dependencies:
> service jboss.naming.context.java.module.jpa-standard.jpa-standard.DefaultDataSource (missing) dependents: [service jboss.persistenceunit."jpa-standard.war#default".__FIRST_PHASE__]
> service jboss.persistenceunit."jpa-standard.war#default".__FIRST_PHASE__ (missing) dependents: [service jboss.deployment.unit."jpa-standard.war".POST_MODULE]
> {code}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list