Spring JBoss 7 - wie JNDI Datasource einbinden

Diskutiere JBoss 7 - wie JNDI Datasource einbinden im Application Tier Forum; Hi, aktuell wird bei uns im Projekt die dataSource wie folgt in der 'applicationContext.xml' definiert: <bean id="dataSource"...

  1. y0dA
    y0dA Neues Mitglied
    Hi,
    aktuell wird bei uns im Projekt die dataSource wie folgt in der 'applicationContext.xml' definiert:
    Code (Java):
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
          destroy-method="close">
        <property name="driverClass" value="${database.driverClassName}" />
        <property name="jdbcUrl" value="${database.url}" />
        <property name="user" value="${database.username}" />
        <property name="password" value="${database.password}" />
        <property name="minPoolSize" value="5" />
        <property name="maxPoolSize" value="50" />
        <property name="initialPoolSize" value="10" />
        <property name="checkoutTimeout" value="0" />
        <property name="maxStatements" value="50" />
        <property name="maxIdleTime" value="300" />
    </bean>
    Die Platzhalter bekommen die Werte von folgendem .properties File:
    Code (Text):
    database.driverClassName=net.sourceforge.jtds.jdbc.Driver
    database.url=jdbc:jtds:sqlserver://xxx:xxx/
    database.username=username
    database.password=pwd
    Weitere, eventuell relevante, Stellen in der 'applicationContext.xml':
    [XML]<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="xxxx" />
    <property name="dataSource" ref="dataSource" />
    <property name="persistenceXmlLocation" value="classpath*:META-INF/persistence.xml"/>
    <property name="jpaVendorAdapter">
    <bean
    class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
    <property name="databasePlatform"
    value="org.hibernate.dialect.SQLServerDialect" />
    <property name="showSql" value="false" />
    <property name="generateDdl" value="false" />
    </bean>
    </property>
    </bean>

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
    <property name="dataSource" ref="dataSource" />
    </bean>[/XML]

    So nun hätte ich versucht die obige dataSource Definition durch folgende zu ersetzen (2 Varianten welche mir den gleichen Fehler liefern):
    [XML]<jee:jndi-lookup id="dataSource" jndi-name="java:jboss/datasources/myDataSource"
    expected-type="javax.sql.DataSource" resource-ref="false">
    </jee:jndi-lookup>[/XML]

    [XML] <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:jboss/datasources/wtb" />
    </bean> [/XML]

    Und so sieht die Exception im server.log aus:

    Code (Text):
    Caused by: javax.resource.ResourceException: Wrong driver class [class org.h2.Driver] for
    this connection URL [jdbc:jtds:sqlserver://xxx:xxx]
    at  
    org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.getLocalManagedConnection(
    LocalManagedConnectionFactory.java:251)
    ... 68 more
    Also simmt eine meiner beiden dataSource Definitionen? Wo muss ich die Driverclass definieren (bei der zu ersetzenden dataSource gibts ja hierfür extra ein Property 'driverClass')? Muss ich eventuell das Driver .jar irgendwo (am besten in ein /lib) am Server legen?
     
  2. Vielleicht hilft dir das kostenlose Training weiter --> (hier klicken)
  3. nillehammer
    nillehammer Guest
    Der JDBC-Driver muss natürlich zur eingestzten Datenbank passen. Anhand der JDBC-URL erkennst du, welche es ist. Kenne mich mit JBOSS-Konfiguration nicht aus, aber in den von Dir gezeigten Dateien scheint es ja hier zu sein:
    [XML]
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
    destroy-method="close">
    <property name="driverClass" value="${database.driverClassName}" />
    <property name="jdbcUrl" value="${database.url}" />
    [/XML]
    bzw in den Properties:
    Code (Text):

    database.driverClassName=net.sourceforge.jtds.jdbc.Driver
    database.url=jdbc:jtds:sqlserver://xxx:xxx/
     
    Ja, da die Connection zur DB vom App-Server gemanaged wird, braucht dieser auch das lib im Zugriff. Es reicht in diesem Fall nicht, das jar im ear/war zu deployen.
     
  4. JimPanse
    JimPanse Neues Mitglied
  5. y0dA
    y0dA Neues Mitglied
    Ja das ist mir schon klar nur wo und wie erstelle ich nun eine dataSource Bean mit driverClass und jndi?..


    Natürlich läuft unsere Applikation in einem Cluster - somit gibts wohl nix in der standalone.xml zu tun? Finde leider auch keine Dokumentation oder ein ToDo..
     
    Zuletzt bearbeitet: 21. Nov. 2012
  6. JimPanse
    JimPanse Neues Mitglied
    natürlich erwähnt man sowas nicht bevor man die Frage stellt :pueh:...

    Doku's gibt es reichlich. Der JBoss 7 läuft entweder im standalone oder im domain Modus (d.h. jboss/standalone/configration/standalone.xml oder jboss/domainconfigration/domain.xml).

    Die Konfiguration bleibt die gleiche.

    how_to_create_and_manage_datasources_in_as7

    bzw.

    Documentation
     
  7. y0dA
    y0dA Neues Mitglied
    Ok, hab nun den Driver sowie die Datasource per web console am JBoss angelegt. Wie muss nun die korrekte Defintion in der applicationContext.xml aussehen?

    Mit oben genannten Definitionen bekomme ich lustigerweise noch immer folgenden Fehler:

    Code (Text):
    Caused by: javax.resource.ResourceException: Wrong driver class [class org.h2.Driver] for this connection URL [jdbc:jtds:sqlserver://xxxx:xxx/]
        at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.getLocalManagedConnection(LocalManagedConnectionFactory.java:251)
        ... 56 more
    Obwohl ich beim erstellen der Datasource, per web console, den sqljdbc4.jar angegeben habe. Denk ich muss in der applicationContext.xml auch noch was zum Driver schreiben? Wo?
     
    Zuletzt bearbeitet: 21. Nov. 2012
  8. y0dA
    y0dA Neues Mitglied
    Ok hab nun auch dem 'default' profile des JBoss die Datasource hinzugefügt - nun bekomme ich eine andere Fehlermeldung (bin aber wohl mal über die Driversache hinweg):
    Code (Text):

    14:03:11,964 ERROR [org.springframework.web.context.ContextLoader] (MSC service thread 1-2) Context initialization failed: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'StatisticsKPImonthly': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TestFacade': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [spring/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: org/hibernate/cfg/BinderHelper
        at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:306) [spring-context-3.1.0.RELEASE.jar:3.1.0.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106) [spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) [spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) [spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) [spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) [spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) [spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) [spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585) [spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) [spring-context-3.1.0.RELEASE.jar:3.1.0.RELEASE]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464) [spring-context-3.1.0.RELEASE.jar:3.1.0.RELEASE]
        at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:384) [spring-web-3.1.0.RELEASE.jar:3.1.0.RELEASE]
        at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:283) [spring-web-3.1.0.RELEASE.jar:3.1.0.RELEASE]
        at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111) [spring-web-3.1.0.RELEASE.jar:3.1.0.RELEASE]
        at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:3392) [jbossweb-7.0.13.Final.jar:]
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:3850) [jbossweb-7.0.13.Final.jar:]
        at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:90) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811)
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [rt.jar:1.6.0_32]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [rt.jar:1.6.0_32]
        at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_32]
    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'MarketFacade': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [spring/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: org/hibernate/cfg/BinderHelper
        at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessPropertyValues(PersistenceAnnotationBeanPostProcessor.java:342) [spring-orm-3.1.0.RELEASE.jar:3.1.0.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106) [spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) [spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) [spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) [spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) [spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) [spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) [spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
        at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:442) [spring-context-3.1.0.RELEASE.jar:3.1.0.RELEASE]
        at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:416) [spring-context-3.1.0.RELEASE.jar:3.1.0.RELEASE]
        at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:549) [spring-context-3.1.0.RELEASE.jar:3.1.0.RELEASE]
        at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:150) [spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
        at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) [spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
        at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:303) [spring-context-3.1.0.RELEASE.jar:3.1.0.RELEASE]
        ... 21 more

    aused by: java.lang.NoClassDefFoundError: org/hibernate/cfg/BinderHelper
        at org.hibernate.cfg.annotations.EntityBinder.bindEjb3Annotation(EntityBinder.java:175) [hibernate-core-3.6.9.Final.jar:3.6.9.Final]
        at org.hibernate.cfg.annotations.EntityBinder.<init>(EntityBinder.java:149) [hibernate-core-3.6.9.Final.jar:3.6.9.Final]
        at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:543) [hibernate-core-3.6.9.Final.jar:3.6.9.Final]
        at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:4035) [hibernate-core-3.6.9.Final.jar:3.6.9.Final]
        at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3989) [hibernate-core-3.6.9.Final.jar:3.6.9.Final]
        at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1398) [hibernate-core-3.6.9.Final.jar:3.6.9.Final]
        at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1375) [hibernate-core-3.6.9.Final.jar:3.6.9.Final]
        at org.hibernate.ejb.Ejb3Configuration.buildMappings(Ejb3Configuration.java:1519) [hibernate-entitymanager-3.6.9.Final.jar:3.6.9.Final]
        at org.hibernate.ejb.EventListenerConfigurator.configure(EventListenerConfigurator.java:193) [hibernate-entitymanager-3.6.9.Final.jar:3.6.9.Final]
        at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:1100) [hibernate-entitymanager-3.6.9.Final.jar:3.6.9.Final]
        at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:689) [hibernate-entitymanager-3.6.9.Final.jar:3.6.9.Final]
        at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:73) [hibernate-entitymanager-3.6.9.Final.jar:3.6.9.Final]
        at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:257) [spring-orm-3.1.0.RELEASE.jar:3.1.0.RELEASE]
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:310) [spring-orm-3.1.0.RELEASE.jar:3.1.0.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514) [spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452) [spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
        ... 48 more
    Caused by: java.lang.ClassNotFoundException: org.hibernate.cfg.BinderHelper from [Module "deployment.my.war:main" from Service Module Loader]
        at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190)
        at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468)
        at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456)
        at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:423)
        at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
        at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120)
        ... 64 more
     
     
  9. JimPanse
    JimPanse Neues Mitglied
    Du Versuchst eine ältere Hibernate Version + Spring zu verwenden - der JBoss 7 Liefert Hibernate 4 mit aus - wenn du jedoch Hiberante 3 verwenden willst dann bsp. musst du so vorgehen:

    how-to-use-hibernate-3-as-jpa-provider.html
     
  10. y0dA
    y0dA Neues Mitglied
    Gut zu wissen, das aktuelle Problem rührt aber eher daher dass ich 'sql4jdbc.jar' am JBoss deployed habe und meiner JNDI genannt habe aber eigentlich 'jdts-1.2.jar' benötige. Deshalb bekomme ich den Fehler dass die Connection URL nicht passt.

    Natürlich gehts nun weiter, JBoss 7 unterstützt nur jdbc 4 compliant driver, deshalb funktionierte der 'sql4jdbc.jar', bei 'jdts-1.2.jar' siehts leider anders aus, den erkennt JBoss per Deploy nicht. Sprich nun muss ich mir anschauen wie ich den jdts als module einbinden kann.
     
  11. Schau dir jetzt hier den Kurs an und lerne Java zu programmieren: --> Hier klicken, um mehr zu erfahren (Klick)
Die Seite wird geladen...

JBoss 7 - wie JNDI Datasource einbinden - Ähnliche Themen

JBoss JNDI
JBoss JNDI im Forum Server einrichten und konfigurieren
JNDI JBoss
JNDI JBoss im Forum Server einrichten und konfigurieren
Wenn Classloader isolation dann keine JNDI Verbindung mit Webapp in Jboss
Wenn Classloader isolation dann keine JNDI Verbindung mit Webapp in Jboss im Forum Server einrichten und konfigurieren
JNDI Name für die Queue - Connection Factory in JBoss ändern
JNDI Name für die Queue - Connection Factory in JBoss ändern im Forum Allgemeines EE
Eclipse: JBoss Hibernate Tool: Kein Zugriff auf Datenbank
Eclipse: JBoss Hibernate Tool: Kein Zugriff auf Datenbank im Forum Datenbankprogrammierung
Thema: JBoss 7 - wie JNDI Datasource einbinden