Hibernate没有使用JBOSS检索数据

时间:2011-06-17 06:08:38

标签: java mysql hibernate spring jboss

我正在尝试进行以下配置。

Spring,Hibernate,Jboss 5.1,Mysql 5.14

调度-servlet.xml中

<?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:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee"    xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-   mvc-3.0.xsd
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring- tx-3.0.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
    http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd">

<context:annotation-config />
<context:component-scan base-package="au.com.kiche" />
<tx:annotation-driven transaction-manager="transactionManager" />

<bean
    class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" />
<bean
    class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
<bean
    class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />

<!-- Most controllers will use the ControllerClassNameHandlerMapping above, 
    but for the index controller we are using ParameterizableViewController, 
    so we must define an explicit mapping for it. -->

<bean id="jspViewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver"
    p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />

<!-- the following bean description should be moved to applicationContext. I'm leaving this  decision to Chief. -->
<jee:jndi-lookup id="dataSource" jndi-name="java:/MyDS"/>

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="configLocation">
        <value>classpath:hibernate.cfg.xml</value>
    </property>
    <property name="configurationClass">
        <value>org.hibernate.cfg.AnnotationConfiguration</value>
    </property>
</bean>
<bean id="transactionManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

hibernate.cfg.xml是:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
                                     "http://hibernate.sourceforge.net/hibernate-configuration-  3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.connection.datasource">java:/MyDS</property>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
    <property name="hibernate.show_sql">true</property>

    <mapping class="au.com.kiche.model.User"/>
  </session-factory>
</hibernate-configuration>

数据源文件“kiche-ds.xml”是:

<datasources>
<local-tx-datasource>
    <jndi-name>MyDS</jndi-name>
    <connection-url>jdbc:mysql://localhost:3306/kiche</connection-url>

    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <user-name>root</user-name>
    <password>root5</password>

    <min-pool-size>5</min-pool-size>
    <max-pool-size>100</max-pool-size>

    <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>

    <!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml -->
    <metadata>
        <type-mapping>mySQL</type-mapping>
    </metadata>
</local-tx-datasource>
</datasources>

以下是我的课程,试图让所有用户都来自数据库:

@Repository
public class UserDAOImpl implements UserDAO{

    @Autowired
    SessionFactory sessionFactory;

    @Override
    public List<User> getUserByLogin() {
            Criteria criteria=sessionFactory.getCurrentSession().createCriteria(User.class);
        List<User> users=criteria.list();
        System.out.println("**** The size of the user is: "+users.size());
            return users;
    }
   .
   .
   .
}

奇怪的是,当我使用Tomcat(而不是JBOSS)时,我能够从数据库中获取数据。但是当我尝试在JBOSS中运行此应用程序时,没有数据被重新检索,没有错误或例外。

任何帮助都会被高度评价。

此致 Adofo

1 个答案:

答案 0 :(得分:1)

您应该使用资源映射的Java EE约定。对于你的情况:

应用程序上下文:

<jee:jndi-lookup id="dataSource"
                 jndi-name="MyDS"
                 lookup-on-startup="false"
                 proxy-interface="javax.sql.DataSource"
                 resource-ref="true"
        />

WEB-INF / web.xml中:

<resource-ref>
    <res-ref-name>MyDS</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

WEB-INF / JBoss的-web.xml中:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss-web PUBLIC
        "-//JBoss//DTD Web Application 4.2//EN"
        "http://www.jboss.org/j2ee/dtd/jboss-web_4_2.dtd">
<jboss-web>
    <resource-ref>
        <res-ref-name>MyDS</res-ref-name>
        <jndi-name>java:MyDS</jndi-name>
    </resource-ref>
</jboss-web>

这适用于JBoss和纯Tomcat。