首页 文章

如何使用Hutsnate提供的struts2框架上的JPA扩展来访问数据库?

提问于
浏览
0

我一直在学习基于struts 2的开发,并且很难在struts 2上使用Hibernate提供的JPA扩展来访问数据库的基本CRUD功能 .

我使用maven作为构建工具,我已经被困在这里一个星期或其他什么 .

我认为我无法适应persistence.xml文件或某些所需的映射文件,但是有人可以给我一些步骤,以便使用上述技术访问数据库 .

我正在使用MySQL数据库,下面给出的是代码:

persistence.xml

<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLNSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml" version="2.0">

    <persistence-unit name="APP">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <class>com.app.classes.User</class>
        <mapping-file>User.hbm.xml</mapping-file>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource" />
            <property name="hibernate.connection.url" value="jdbc:mysql://localhost/APP" />
            <property name="hibernate.connection.username" value="root" />
            <property name="hibernate.connection.password" value="9250864418" />
            <property name="hibernate.hbm2ddl.auto" value="update" />
            <property name="hibernate.archive.autodetection" value="class" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
        </properties>
</persistence>

User.java (Object Model class)

package com.app.classes;

import javax.persistence.Entity;
import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.*;

@Entity
@Table(name = "APP_USER", schema = "APP")
public class User implements Serializable {
    private String firstName;
    private String lastName;
    private String emailId;
    private String password;

    @Id
    @Column(name = "EMAIL")
    public String getEmailId() {
        return emailId;
    }

    public void setEmailId(String emailId) {
        this.emailId = emailId;
    }

    @Column(name = "FIRST_NAME")
    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    @Column(name = "LAST_NAME")
    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    @Column(name = "USER_PASSWORD")
    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

BaseAction.java (Action class)

package com.app.action;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;
import com.service.UserService;

public class BaseAction extends ActionSupport implements ModelDriven<User>, Preparable {
    private User user;
    private String emailId;
    protected UserService service;

    @Override
    public User getModel() {
        return user;
    }

    public void getEmailId(String emailId) {
        this.emailId = emailId;
    }

    public String setEmailid() {
        return emailId;
    }

    public void setUserService(UserService service) {
        this.service = service;
    }

    @Override
    public void prepare() throws Exception {
        if (emailId == null || "".equals(emailId)) {
            user = new User();
        } else {
            user = service.findByEmailId(user.getEmailId());
        }
    }

    @Override
    public String execute() throws Exception {
        return SUCCESS;
    }
}

UserServiceImpl class(class implementing service)

package com.app.service;

import org.hibernate.Session;

import java.util.*;
import com.app.classes.User;
import com.app.classes.HibernateUtil;
import javax.persistence.*;

public class UserServiceImpl implements UserService {
    private EntityManager em;

    public void setEntityManager(EntityManager em) {
        this.em = em;
    }

    public void save(User user) {
        if (user.getEmailId() == null) {
            // new
            em.persist(user);
        } else {
            // update
            em.merge(user);
        }
    }

    private EntityManager getEntityManager() {
        return em;
    }

    public User findByEmailId(String emailId) {
        return em.find(User.class, emailId);
    }
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app id="starter" version="2.4" 
         xmlns="http://java.sun.com/xml/ns/j2ee" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <display-name>Struts 2 - Maven Archetype - Starter</display-name>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:applicationContext*.xml</param-value>
    </context-param>

    <!-- Filters -->
    <filter>
        <filter-name>action2-cleanup</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
    </filter>
    <filter>
        <filter-name>sitemesh</filter-name>
        <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
    </filter>
    <filter>
        <filter-name>action2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>action2-cleanup</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>sitemesh</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>action2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!-- Listeners -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>


    <!-- Servlets -->
    <servlet>
        <servlet-name>dwr</servlet-name>
        <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>true</param-value>
        </init-param>
    </servlet>
    <servlet>
        <servlet-name>jspSupportServlet</servlet-name>
        <servlet-class>org.apache.struts2.views.JspSupportServlet</servlet-class>
        <load-on-startup>5</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dwr</servlet-name>
        <url-pattern>/dwr/*</url-pattern>
    </servlet-mapping>


    <!-- Welcome file lists -->
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.jsp</welcome-file>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>
</web-app>

Struts.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC 
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <package name="myPackage" extends="struts-default">
    <default-interceptor-ref name="paramsPrepareParamsStack" />
        <action name="base" class="com.app.action.BaseAction">
            <result>/jsp/user.jsp</result>
        </action>
    </package>
</struts>

我就像Sourav所说的那样,但是在bean创建中仍然存在一些问题,这里spring无法创建应用程序context.xml文件中定义的bean . 这个bean基本上是我的UserServiceImpl类,所以我提供了服务器堆栈跟踪,任何建议都会有所帮助

SEVERE: Context initialization failed

org.springframework.beans.factory.BeanCreationException:在文件[/home/ankur/Desktop/app/target/classes/applicationContext.xml]中定义名称为'userService'的bean时出错:bean的实例化失败;嵌套异常是org.springframework.beans.BeanInstantiationException:无法实例化bean类[com.app.service.UserServiceImpl]:构造函数抛出异常;嵌套异常是java.lang.NoClassDefFoundError:org / jboss / util / file / ArchiveBrowser $在org.springframework.beans.factory的org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:883)中过滤 . support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:839)在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:440)在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory $ 1.run(AbstractAutowireCapableBeanFactory .java:409)位于org.springframework.beans.factory.support.AbstractBeanFactory的org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)的java.security.AccessController.doPrivileged(Native Method) org.springframework.beans.factory.support.De上的$ 1.getObject(AbstractBeanFactory.java:264)在org.springframework.beans.factory.support.AbstractBeanFactory.getBean的Org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)中的faultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)(AbstractBeanFactory.java: 185)在org.springframework.context的org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429) .support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255) )org.springframework.web.con上的org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199) text.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)atg.mortbay.jetty.handle.ContextHandler.startContext(ContextHandler.java:548)org.mortbay.jetty.servlet.Context.startContext(Context.java:136) org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)位于org.mortbay.jetty.webapp.WebAppContext.doStart的org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517) (webAppContext.java:467)org.mortbay.jet.plugin.Jetty6PluginWebAppContext.doStart(Jetty6PluginWebAppContext.java:115)位于org.mortbay.jet的org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) . handler.HandlerCollection.doStart(HandlerCollection.java:152)org.mortbay.jetty.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:156)org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)at org org.mortbay.component.Abst中的.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152) ractLifeCycle.start(AbstractLifeCycle.java:50)atorg.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)在org.mortbay.jetty.Server.doStart(Server.java:224)在org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java: 50)在org.mortbay.jetty.plugin.Jetty6PluginServer.start(Jetty6PluginServer.java:132)在org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty(AbstractJettyMojo.java:441)在org.mortbay.jetty.plugin.AbstractJettyMojo org.mortbay.jetty.plugin.AbstractJettyRunMojo.execute(AbstractJettyRunMojo.java:210)中的org.mortbay.jetty.plugin.Jetty6RunMojo.execute(Jetty6RunMojo.java:184)上的.execute(AbstractJettyMojo.java:383) . org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694)中的apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490)位于org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal(DefaultLifecycleExecutor . java:569)at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecy) cleOecutor.java:539)org.apache.maache.maven.life.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:387)org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:348)org.apache.maven .lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:180)在org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328)在org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)在有机apache.maven.cli.MavenCli.main(MavenCli.java:362)atg.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)位于org.codehaus的java.lang.reflect.Method.invoke(Method.java:616)的sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) .classworlds.Launcher.launchEnhanced(Launcher.java:315)org.codehaus.classworlds.Launc her.launch(Launcher.java:255)org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)at org.codehaus.classworlds.Launcher.main(Launcher.java:375)引起:org.springframework .beans.BeanInstantiationException:无法实例化bean类[com.app.service.UserServiceImpl]:构造函数抛出异常;嵌套的例外是java.lang.NoClassDefFoundError:在org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:115)在org.springframework.beans.factory.support.SimpleInstantiationStrategy组织/ JBoss的/ UTIL /文件/ ArchiveBrowser $筛选 . 在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:877)实例化(SimpleInstantiationStrategy.java:61)... 55更多引起:java.lang.NoClassDefFoundError:org / jboss / util / file / ArchiveBrowser $在javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:83)的javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:60)中的org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:119)处过滤)在sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructor)的sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)的com.app.service.UserServiceImpl . (UserServiceImpl.java:10)处 . AccessorImpl.java:57)位于org.springframework.beans.BeanUtils.instantiateClass(BeanUtils)的java.lang.reflect.Constructor.newInstance(Constructor.java:532)中的sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) .java:100)... 57更多引起:java.lang.ClassNotFoundException:org.jboss.util.file.ArchiveBrowser $在java.security上的java.net.URLClassLoader $ 1.run(URLClassLoader.java:217)过滤位于org.codehaus.classworlds.RealmClassLoader.loadClassDirect(RealmClassLoader)的java.lang.ClassLoader.loadClass(ClassLoader.java:321)java.net.URLClassLoader.findClass(URLClassLoader.java:205)上的.AccessController.doPrivileged(Native Method)的.java:195)在org.codehaus.classworlds.DefaultClassRealm.loadClass(DefaultClassRealm.java:255)在org.codehaus.classworlds.DefaultClassRealm.loadClass(DefaultClassRealm.java:274)在org.codehaus.classworlds.RealmClassLoader.loadClass( RealmClassLoader.java:214)at java.lang.ClassLoader.loadClass(ClassLoader.java:266 )org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:401)org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:363)...更66 2011-07-11 17:49:00.008 :: WARN:上下文org.mortbay.jetty.plugin.Jetty6PluginWebAppContext@7e5619的启动失败{/应用程序,/家庭/ ANKUR /桌面/应用/ SRC /主/ web应用} org.springframework.beans.factory.BeanCreationException:在文件[/home/ankur/Desktop/app/target/classes/applicationContext.xml]中定义名称为'userService'的bean时出错:bean的实例化失败;嵌套异常是org.springframework.beans.BeanInstantiationException:无法实例化bean类[com.app.service.UserServiceImpl]:构造函数抛出异常;嵌套异常是java.lang.NoClassDefFoundError:org / jboss / util / file / ArchiveBrowser $在org.springframework.beans.factory的org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:883)中过滤 . support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:839)在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:440)在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory $ 1.run(AbstractAutowireCapableBeanFactory .java:409)位于org.springframework.beans.factory.support.AbstractBeanFactory的org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)的java.security.AccessController.doPrivileged(Native Method) org.springframework.beans.factory.support.De上的$ 1.getObject(AbstractBeanFactory.java:264)在org.springframework.beans.factory.support.AbstractBeanFactory.getBean的Org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)中的faultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)(AbstractBeanFactory.java: 185)在org.springframework.context的org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429) .support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255) )org.springframework.web.con上的org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199) text.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)atg.mortbay.jetty.handle.ContextHandler.startContext(ContextHandler.java:548)org.mortbay.jetty.servlet.Context.startContext(Context.java:136) org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)位于org.mortbay.jetty.webapp.WebAppContext.doStart的org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517) (webAppContext.java:467)org.mortbay.jet.plugin.Jetty6PluginWebAppContext.doStart(Jetty6PluginWebAppContext.java:115)位于org.mortbay.jet的org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) . handler.HandlerCollection.doStart(HandlerCollection.java:152)org.mortbay.jetty.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:156)org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)at org org.mortbay.component.Abst中的.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152) ractLifeCycle.start(AbstractLifeCycle.java:50)在org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)在org.mortbay.jetty.Server.doStart(Server.java:224)在org.mortbay .component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)在org.mortbay.jetty.plugin.Jetty6PluginServer.start(Jetty6PluginServer.java:132)在org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty(AbstractJettyMojo.java:441 )在org.mortbay.jetty.plugin.AbstractJettyMojo.execute(AbstractJettyMojo.java:383)在org.mortbay.jetty.plugin.AbstractJettyRunMojo.execute(AbstractJettyRunMojo.java:210)在org.mortbay.jetty.plugin.Jetty6RunMojo . 执行(Jetty6RunMojo.java:184)在org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490)在org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694)在org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal(DefaultLifecycleExecutor.java:569)org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:539)org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures( DefaultLifecycleExecutor.java:387)位于org.apache.maven.maven的org.apache.maven.maven.life.life.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:180)的org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:348) .defaultMaven.doExecute(DefaultMaven.java:328)org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)org.apache.maven.cli.MavenCli.main(MavenCli.java:362)org . 位于sun.reflect的sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)的sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)中的apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60) . DelegatingMethodAccessorImpl.invoke(德勒atingMethodAccessorImpl.java:43)atg.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)atg.codehaus.classworlds.Launcher.launch的java.lang.reflect.Method.invoke(Method.java:616) (Launcher.java:255)org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)org.codehaus.classworlds.Launcher.main(Launcher.java:375)引起:org.springframework.beans . BeanInstantiationException:无法实例化bean类[com.app.service.UserServiceImpl]:构造函数抛出异常;嵌套的例外是java.lang.NoClassDefFoundError:在org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:115)在org.springframework.beans.factory.support.SimpleInstantiationStrategy组织/ JBoss的/ UTIL /文件/ ArchiveBrowser $筛选 . 在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:877)实例化(SimpleInstantiationStrategy.java:61)... 55更多引起:java.lang.NoClassDefFoundError:org / jboss / util / file / ArchiveBrowser $在javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:83)的javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:60)中的org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:119)处过滤)在sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructor)的sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)的com.app.service.UserServiceImpl . (UserServiceImpl.java:10)处 . AccessorImpl.java:57)位于org.springframework.beans.BeanUtils.instantiateClass(BeanUtils)的java.lang.reflect.Constructor.newInstance(Constructor.java:532)中的sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) .java:100)... 57更多引起:java.lang.ClassNotFoundException:org.jboss.util.file.ArchiveBrowser $在java.security上的java.net.URLClassLoader $ 1.run(URLClassLoader.java:217)过滤位于org.codehaus.classworlds.RealmClassLoader.loadClassDirect(RealmClassLoader)的java.lang.ClassLoader.loadClass(ClassLoader.java:321)java.net.URLClassLoader.findClass(URLClassLoader.java:205)上的.AccessController.doPrivileged(Native Method)的.java:195)在org.codehaus.classworlds.DefaultClassRealm.loadClass(DefaultClassRealm.java:255)在org.codehaus.classworlds.DefaultClassRealm.loadClass(DefaultClassRealm.java:274)在org.codehaus.classworlds.RealmClassLoader.loadClass( RealmClassLoader.java:214)at java.lang.ClassLoader.loadClass(ClassLoader.java:266 )org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:401)org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:363)... 66更多2011-07-11 17 :49:00.016 :: WARN:嵌套在org.springframework.beans.factory.BeanCreationException:创建文件[/home/ankur/Desktop/app/target/classes/applicationContext.xml]中定义的名为'userService'的bean时出错: bean的实例化失败;嵌套异常是org.springframework.beans.BeanInstantiationException:无法实例化bean类[com.app.service.UserServiceImpl]:构造函数抛出异常;嵌套异常是java.lang.NoClassDefFoundError:org / jboss / util / file / ArchiveBrowser $ Filter:java.lang.ClassNotFoundException:org.jboss.util.file.ArchiveBrowser $ Filter at java.net.URLClassLoader $ 1.run(URLClassLoader . java:217)at java.security.AccessController.doPrivileged(Native Method)at java.net.URLClassLoader.findClass(URLClassLoader.java:205)at atorg.codehaus.classworlds.RealmClassLoader.loadClassDirect(RealmClassLoader.java:195)中的java.lang.ClassLoader.loadClass(ClassLoader.java:321)org.codehaus.classworlds.DefaultClassRealm.loadClass(DefaultClassRealm.java:255)at org .orghaus.classworlds.DefaultClassRealm.loadClass(DefaultClassRealm.java:274)位于org的java.lang.ClassLoader.loadClass(ClassLoader.java:266)的org.codehaus.classworlds.RealmClassLoader.loadClass(RealmClassLoader.java:214) . 位于org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:363)的mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:401)org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java: 119)at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:83)at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:60)at com.app.service.UserServiceImpl . (UserServiceImpl.java:10)at sun .reflect.NativeConstructorAccessorImpl.newInstance0(娜(参见方法)at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)at java.lang.reflect.Constructor.newInstance(Constructor.java:532) org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:100)org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:61)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory .instantiateBean(AbstractAutowireCapableBeanFactory.java:877)org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:839)org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:440) )org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory $ 1.run(AbstractAutow) ireCapableBeanFactory.java:409)位于org.springframework.beans.factory.support的org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)的java.security.AccessController.doPrivileged(Native Method) . org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java)中的org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)中的AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:264) :261)在org.springframework的org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164) . org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitializ中的beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429) org.springframework上的org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)中的ation(AbstractApplicationContext.java:728) org.springframework.web.context.ContextLoaderListener.contextInitialized中的.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)(ContextLoaderListen

2 回答

  • 1

    首先,您尝试通过JPA连接数据库,

    1.您说您尝试通过JPA持久性API进行连接,因此不应该在持久性.xml文件中指定任何hbm文件 .

    2.在服务类中,您尝试通过entitymanager访问数据,您没有提供/加载jast加载数据的persistence.xml . 正如我所看到您编写了一个getter / setter方法,所以你使用的是Spring吗?注入以注入entitymanager属性 .

    所以我想首先看一下JPA部分并测试它然后用Struts2连接它 . 尝试使用此行创建entitymanager .

    emf = Persistence.createEntityManagerFactory("MyJPAApplicationPU");
     em = emf.createEntityManager();
    

    这里的“MyJPAApplicationPU”是持久性单元名称 . 它在persistence.xml文件中定义,为你的“APP” .

  • 0

    Ok ankur,只提供你的应用程序上下文xml文件,当工厂无法在xml中加载任何bean id时,Actualy会发生此错误 .

    有一件事我建议你使用接口注入,所以在你的UserServiceImpl中你需要注入所需的referance属性是entitymanager对象

    你有没有像这样编写你的应用程序上下文

    <bean
        class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
    
    <bean id="userService" class="quickstart.service.UserServiceImpl" />
    
    <bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="jpaVendorAdapter">
            <bean
                class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="database" value="MYSQL" />
                <property name="showSql" value="true" />
            </bean>
        </property>
    </bean>
    
    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost/xyz" />
        <property name="username" value="root" />
        <property name="password" value="root" />
    </bean>
    
    <bean id="transactionManager"
        class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>
    

    2.如果是,那么在你的chek中你的 web.xml 上下文加载器

    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>
    

    3.还使用@PersistenceContext

    @PersistenceContext
    

    public void setEntityManager(EntityManager em)

相关问题