tutorials.de Buch-Aktion 02/2012
ERLEDIGT
JA
ANTWORTEN
5
ZUGRIFFE
2540
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Smokey67 Smokey67 ist offline Grünschnabel
    Registriert seit
    Sep 2008
    Beiträge
    3
    Hallo Mitkämpfer,

    ich habe ein Problem nach einem Update meiner Hibernate-Bibliotheken und weiß im Moment nicht weiter. Vor dem Update der Hibernate-Annotations auf 3.3.x und Spring auf
    2.5.5 funktionierte noch alles. (Vorher Spring 2.0.8)
    Wäre für einen hilfreichen Tip sehr dankbar !

    Die Fehlermeldung beim Start des JBoss sagt, dass die DataSource PostgresDS nicht per JDNI gefunden werden kann, aber JBoss sagt, die Datasource sei gebunden worden.

    benutzte Bibliotheken (soweit nur Spring und Hibernate aufgelistet, vielleicht passt hier was nicht: )
    spring-2.5.5.jar
    spring-core-2.5.5.jar
    spring-beans-2.5.3.jar
    spring-context-2.5.3.jar
    spring-web-2.5.5.jar
    hibernate-3.2.6.ga.jar
    hibernate-annotations-3.3.1.GA.jar
    hibernate-commons-annotations-3.3.0.ga.jar
    hibernate-entitymanager-3.3.1.ga.jar
    hibernate-validator-3.0.0.ga.jar
    persistence-api-1.0.jar
    ejb3-persistence-1.0.1.GA.jar


    Der JBoss-Output (etwas gekürzt):

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
    14:51:57,129 INFO  [Server] Starting JBoss (MX MicroKernel)...
      [...]
    14:52:22,571 INFO  [ConnectionFactoryBindingService] Bound ConnectionManager 'jboss.jca:service=DataSourceBinding,name=DefaultDS' to JNDI name 'java:DefaultDS'
      [...]
    14:52:23,664 INFO  [ConnectionFactoryBindingService] Bound ConnectionManager 'jboss.jca:service=ConnectionFactoryBinding,name=JmsXA' to JNDI name 'java:JmsXA'
    [B]14:52:23,763 INFO  [ConnectionFactoryBindingService] Bound ConnectionManager 'jboss.jca:service=DataSourceBinding,name=PostgresDS' to JNDI name 'java:PostgresDS'[/B]
      [...]
    14:52:31,313 INFO  [STDOUT] 2008-09-21 14:52:31,311 DEBUG (org.springframework.beans.factory.support.DefaultListableBeanFactory:447) - Retrieved dependent beans for bean 'org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0': [org.springframework.transaction.config.internalTransactionAdvisor]
    14:52:31,330 INFO  [STDOUT] 2008-09-21 14:52:31,317 ERROR (org.springframework.web.context.ContextLoader:215) - Context initialization failed
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'personService': Injection of persistence methods failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is [B]org.springframework.jdbc.datasource.lookup.DataSourceLookupFailureException: Failed to look up JNDI DataSource with name 'java:/PostgresDS'; nested exception is javax.naming.NameNotFoundException: JNDI object with [java:/PostgresDS] not found:[/B] JNDI implementation returned null
        at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessPropertyValues(PersistenceAnnotationBeanPostProcessor.java:324)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:998)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
        at java.security.AccessController.doPrivileged(Native Method)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:221)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:729)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:381)
        at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)
        ...


    Meine persistence.xml:

    Code xml:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
     
        <persistence-unit name="HouseMan" transaction-type="RESOURCE_LOCAL">
            <provider>org.hibernate.ejb.HibernatePersistence</provider> 
            <!-- <non-jta-data-source>java:/PostgresDS</non-jta-data-source> --> 
            <jta-data-source>java:/PostgresDS</jta-data-source> 
            <class>net.magiccode.houseman.model.User</class>
            <class>net.magiccode.houseman.model.Right</class>
            <class>net.magiccode.houseman.model.UserGroup</class>
            <class>net.magiccode.houseman.model.BankAccount</class>
            <class>net.magiccode.houseman.model.Person</class>
            <class>net.magiccode.houseman.model.Address</class>
            <class>net.magiccode.houseman.model.RentalObject</class>
            <class>net.magiccode.houseman.i18n.Language</class>
            <class>net.magiccode.houseman.i18n.I18nText</class>
            <class>net.magiccode.houseman.i18n.MultiLingualText</class>
            <class>net.magiccode.houseman.i18n.LanguageFactory</class>
            <properties>
                <property name="jboss.entity.manager.factory.jndi.name" value="persistence-units/JpaPersistence"/>
                <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
                <property name="hibernate.show_sql" value="true" />
                <property name="hibernate.format_sql" value="true" />           
                <property name="hibernate.connection.driver_class" value="org.postgresql.Driver" />
                <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/houseman" />
                <property name="hibernate.connection.username" value="volker" />
                <property name="hibernate.connection.password" value="abulafia" />
                <property name="hibernate.archive.autodetection" value="class" />
                <property name="hibernate.default_schema" value="public" />
                <property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.DefaultComponentSafeNamingStrategy"/>
                <property name="hibernate.archive.autodetection" value="class"/>
                <property name="hibernate.hbm2ddl.auto" value="read-write" />
                <property name="hibernate.hbm2ddl.auto" value="update" />
            </properties>
        </persistence-unit>
     </persistence>

    Meine applicationContext.xml

    Code xml:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="
        [url]http://www.springframework.org/schema/beans[/url] [url]http://www.springframework.org/schema/beans/spring-beans-2.0.xsd[/url]
        [url]http://www.springframework.org/schema/tx[/url] [url]http://www.springframework.org/schema/tx/spring-tx-2.0.xsd[/url]
        [url]http://www.springframework.org/schema/aop[/url] http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
        <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
     
        <bean id="personService" class="net.magiccode.houseman.service.PersonServiceImpl" />
        <bean id="userService" class="net.magiccode.houseman.service.UserServiceImpl" />
        <bean id="rightService" class="net.magiccode.houseman.service.RightServiceImpl" />
        <bean id="groupService" class="net.magiccode.houseman.service.GroupServiceImpl" />
        <bean id="languageService" class="net.magiccode.houseman.service.LanguageServiceImpl" />
        <bean id="i18nTextService" class="net.magiccode.houseman.service.I18nTextServiceImpl" />
     
        <bean id="RentalObjectService" class="net.magiccode.houseman.service.RentalObjectServiceImpl" />
        <bean id="LanguageFactory" class="net.magiccode.houseman.i18n.LanguageFactory" />
     
        <bean id="personAction" scope="prototype"
            class="net.magiccode.houseman.action.PersonAction">
            <constructor-arg ref="personService" />
        </bean>
        <bean id="languageAction" scope="prototype"
            class="net.magiccode.houseman.action.LanguageAction">
            <constructor-arg ref="languageService" />
        </bean>
        
        <bean id="userAction" scope="prototype"
            class="net.magiccode.houseman.action.UserAction">
            <constructor-arg ref="userService" />
        </bean>
        <bean id="rightsAction" scope="prototype"
            class="net.magiccode.houseman.action.RightsAction">
            <constructor-arg ref="rightService" />
        </bean>
        <bean id="groupAction" scope="prototype"
            class="net.magiccode.houseman.action.GroupAction">
            <constructor-arg ref="groupService" />
        </bean>
     
     
        <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
          <property name="persistenceUnitName" value="HouseMan" />
          <property name="jpaProperties">
            <props>
              <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
            </props>
          </property>     
           <property name="jpaVendorAdapter">
               <bean
                   class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                   <property name="database" value="POSTGRESQL" />
                   <property name="showSql" value="true" />
                        <property name="generateDdl" value="true" />
               </bean>
           </property>    
        </bean>
     
        <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
          <property name="entityManagerFactory" ref="entityManagerFactory" />
        </bean>
     
        <bean id="dataSource"
            class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="driverClassName" value="org.postgresql.Driver" />
            <property name="url" value="jdbc:postgresql://localhost/houseman" />
            <property name="username" value="volker" />
            <property name="password" value="********" />
        </bean>
     
        <tx:annotation-driven transaction-manager="transactionManager" />
    </beans>
    Geändert von Oliver Gierke (21.09.08 um 17:30 Uhr) Grund: Codetags spendiert, Stacktrace auf relevanten Teil eingekürzt, DB Passwort enfernt
     

  2. #2
    Avatar von Oliver Gierke
    Oliver Gierke Oliver Gierke ist offline Mitglied Rubin
    Registriert seit
    Dec 2003
    Ort
    Mannheim
    Beiträge
    1.457
    Mal abgesehen davon, dass du logischerweise ALLE Springbibliotheken inder gleichen Version verwenden solltest, könnte die Excepton nicht sprechender sein: unter dem Namen den du für die Datasource konfiguriert hast, gibt es im JNDI keine DataSource.

    Kann es sein, dass du eigentlich die in der Springkonfiguration hinterlegte DataSource benutzen möchtest und gar keinen JNDI Loookup benötigst? In der Hibernatekonfig ist allerdings noch ein jta-data-source Element vorhanden, was vermutlich den Lookup provoziert.

    Gruß
    Ollie
     
    In theory, there is no difference between theory and practice. In practice, there is!

    www.olivergierke.de

  3. #3
    Smokey67 Smokey67 ist offline Grünschnabel
    Registriert seit
    Sep 2008
    Beiträge
    3
    Hallo Oliver,

    erstmal vielen Dank für die schnelle Antwort. Ich muß zugeben, ich stehe hier etwas auf dem Schlauch
    JBoss sagt doch "Bound ConnectionManager 'jboss.jca:service=DataSourceBinding,name=PostgresDS' to JNDI name 'java:PostgresDS'"
    Wieso gibt es die im JNDI dann nicht ?
    Ich möchte natürlich die in der Springkonfiguration hinterlegte DataSource nutzen, aber funktionieren dann die Annotations von Hibernate noch ? Könntest Du mir bitte eine kurze Erklärung liefern, die mir weiterhilft ?

    Zu den Bibliotheken: Ich habe die im Maven-Repository vorhandenen Versionen benutzt. Da wo's keine 2.5.5 gab, habe ich die entsprechend letzte (2.5.3) genommen.....
     

  4. #4
    Avatar von Oliver Gierke
    Oliver Gierke Oliver Gierke ist offline Mitglied Rubin
    Registriert seit
    Dec 2003
    Ort
    Mannheim
    Beiträge
    1.457
    Zitat Zitat von Smokey67 Beitrag anzeigen
    Hallo Oliver,

    erstmal vielen Dank für die schnelle Antwort. Ich muß zugeben, ich stehe hier etwas auf dem Schlauch
    JBoss sagt doch "Bound ConnectionManager 'jboss.jca:service=DataSourceBinding,name=PostgresDS' to JNDI name 'java:PostgresDS'"
    Wieso gibt es die im JNDI dann nicht ?
    Du referenzierst aber eine java:/PostgresDS.

    Ich möchte natürlich die in der Springkonfiguration hinterlegte DataSource nutzen, aber funktionieren dann die Annotations von Hibernate noch ? Könntest Du mir bitte eine kurze Erklärung liefern, die mir weiterhilft ?
    Dafür definierst du doch eine LocalContainerEntityManagerFactoryBean. Frage - hast du die Spring JPA Doku gelesen? . Durch die Umfangreiche Konfiguration in der persistence.xml wirfst du halt zwei Konfigurationsmodelle durcheinander. Zugegebenermaßen würde ich da auch nicht mehr wirklich durchsehen, was wo wie benutzt wird.

    Ich kann es nicht 100%ig sagen, aber ich vermute, dass Spring selbst schon die DataSource benutzt die du da konfiguriert hast (Tipp: besser SimpleDriverDataSource benutzen). Der JBoss wertet die persistence.xml vermutlich ein zweites Mal aus, deswegen der Lookup.

    Zu den Bibliotheken: Ich habe die im Maven-Repository vorhandenen Versionen benutzt. Da wo's keine 2.5.5 gab, habe ich die entsprechend letzte (2.5.3) genommen.....
    Im zentralen Maven Repo (http://repo1.maven.org/maven2) sind alle Springbibliotheken in Version 2.5.5 vorhanden: z.B. http://repo1.maven.org/maven2/org/sp...g-beans/2.5.5/

    REINHAUN!
     
    In theory, there is no difference between theory and practice. In practice, there is!

    www.olivergierke.de

  5. #5
    Smokey67 Smokey67 ist offline Grünschnabel
    Registriert seit
    Sep 2008
    Beiträge
    3
    Hallo Oliver,

    danke, manchmal braucht man jemand, der einen mit der Nase draufdrückt, wenn man den Wald vor lauter Bäumen nicht mehr sieht.
    Hab's jetzt verstanden, jetzt läuft's auch. Danke nochmal.

    Übrigens: spring-beans kam in meiner pom.xml gar nicht vor. War wohl 'ne Abhängigkeit..
    Ist aber auch gerade gezogen
     

  6. #6
    Avatar von Oliver Gierke
    Oliver Gierke Oliver Gierke ist offline Mitglied Rubin
    Registriert seit
    Dec 2003
    Ort
    Mannheim
    Beiträge
    1.457
    Zitat Zitat von Smokey67 Beitrag anzeigen
    Übrigens: spring-beans kam in meiner pom.xml gar nicht vor. War wohl 'ne Abhängigkeit..
    Ist aber auch gerade gezogen
    Jap, das passiert schnell, wenn man nicht aufpasst. Man bindet selbst nur 3 Spring Libs in Version X ein. Allerdings dann noch eine andere Lib, die andere Spring Libs in version X - 1 benötigt. Dann kommt man nicht umhin explizit die genaue Version anzugeben. Dumm, muss aber leider sein.

    REINHAUN!
     
    In theory, there is no difference between theory and practice. In practice, there is!

    www.olivergierke.de

Ähnliche Themen

  1. Spring mit Annotations
    Von Looky im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 1
    Letzter Beitrag: 07.10.10, 13:19
  2. [Problem] Spring MVC mit Annotations
    Von Wyatt im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 0
    Letzter Beitrag: 24.02.10, 16:31
  3. Hibernate Annotations
    Von drezze im Forum Java
    Antworten: 0
    Letzter Beitrag: 28.11.08, 08:36
  4. Spring Dependency Injection - XML oder Annotations?
    Von DarthShader im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 5
    Letzter Beitrag: 22.09.08, 19:07
  5. EJB Deploynment with JBoss and use of annotations fails
    Von AnetaGueogui im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 0
    Letzter Beitrag: 22.06.07, 13:39