`
sefcertyu
  • 浏览: 249980 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring与jpa在tomcat中的远程调用,一种不用j2ee容器的持久方案的尝试与思考

阅读更多

  最近在研究一个关于在不用j2ee容器的远程传递对象到服务器再进行持久化方案,做了一个demo。整个demo基于远程的调用,服务器端使用tomcat,spring整合openjpa2.0(用jpa非xml的实体描述方式进行编程后期更容易维护,推荐)。

 

客户端是一个简洁的java项目,使用spring的httpinvoker调用服务器中的dao层

实体Employee

@Entity
public class Employee implements Serializable {

	private static final long serialVersionUID = 2625622501589847344L;
	
	private Integer empid;	//主键
	private String username;//用户名
	private String password;//密码
        
        getter and setter..... and many persistence annotations....
}

 

 

 

 实体Employee对应的Manager接口

public interface EmployeeManager {
	
	public void save(Employee employee);	
}
 

 实体Manager接口的实现类

public class EmployeeManagerImpl  implements EmployeeManager {
	/**
	 * 保存实体
	 * @param entity
	 */
	public void save(Employee employee) {
		em.persist(employee);
	}
}
  

 服务器端的文件配置EntityMangerFactory的管理和事务管理

	<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
 		<property name="persistenceUnitName" value="hotel"/>
   </bean>
  
	
   <!-- 配置使用JPA事务管理器 -->
   <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory"/>
   </bean>

 persistence.xml配置

	<persistence-unit name="hotel" transaction-type="RESOURCE_LOCAL">
		<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
		<class>com.realhotel.core.Employee</class>
		
		<properties>
			<property name="openjpa.ConnectionURL" value="jdbc:mysql://localhost:3306/openjpa?useUnicode=true&amp;characterEncoding=UTF-8"/>
			<property name="openjpa.ConnectionDriverName" value="org.gjt.mm.mysql.Driver"/>
			<property name="openjpa.ConnectionUserName" value="root"/>
      		<property name="openjpa.ConnectionPassword" value="nui"/>
      		<property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO,SQL=TRACE"/>
      		<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(SchemaAction='add')"/> 
		</properties>
	</persistence-unit>
 

---------------------------------------------------------------服务器端与客户端的分割线--------------------------

 

客户端调用服务器端的路径配置

    <bean id="employeeServiceProxy" class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
        <property name="serviceUrl" value="http://localhost:8080/wepapp/employee.service"/>
        <property name="serviceInterface" value="com.realhotel.manager.EmployeeManager"/>
    </bean> 

经过测试,在服务器端同一个项目中spring可以正常的创建,管理EntityManager,通过dao层也可以正常的CRUD。

 

通过客户端的调用也是可以传递对象,服务器端可以正常的接受对象,但是服务器端不能创建EntityManager,报空指针错...

 

对于以上的远程调用,容器环境和持久化的模型,我认为可能原因有:

 

1、jpa可能受容器的影响,本例使用的是tomcat一个非j2ee应用服务器

2、文件的配置有错误...

3、spring的容器环境有问题,可能需要改写某些类或者是某些jpa的支持机制才能运行(有人使用Hibernate做持久层已经成功)...

 

分享到:
评论

相关推荐

    j2ee+springboot+springcloud+mybatis

    在IT行业中,J2EE(Java 2 Platform, Enterprise Edition)是Java平台的企业版,用于构建和部署分布式、多层的服务器端应用。它提供了一系列的API和服务,支持Web服务、事务处理、安全性和可扩展性,使得开发企业级...

    JPA+Spring+Struts整合实例

    JPA是Java持久化规范,是Java EE平台中的ORM解决方案。它定义了API,使得开发者可以用面向对象的方式来操作数据库,而无需直接编写SQL语句。JPA通过ORM映射文件或注解将Java实体类与数据库表关联,提供了一套标准的...

    郭克华J2EE高级框架实战教学视频源代码

    学习者将学习如何配置Spring IoC容器,使用注解驱动的开发模式,以及整合Spring的其他模块,如Spring JDBC、Spring Data JPA等。 2. **MyBatis框架**:MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程...

    J2EE.EJB编程实例

    在实际项目中,EJB通常与其他J2EE组件结合使用,如Servlet、JSP、JSF、JPA等,形成完整的MVC架构。此外,现代J2EE开发趋势倾向于使用轻量级框架,如Spring,它们简化了EJB的一些复杂性,提供了更灵活的编程模型。 ...

    J2EE全实例教程

    10. **部署与容器**:了解如何在Tomcat、Glassfish、JBoss等应用服务器上部署J2EE应用,以及理解容器如何管理应用的生命周期。 通过《J2EE全实例教程》.chm文件,学习者可以按照实际项目场景来学习和实践以上各种...

    spring学习必备(中文)

    Spring与J2EE的关系紧密,它提供了对J2EE服务的轻量级替代,如数据访问、事务管理、邮件服务等,同时Spring也可以很好地与J2EE容器集成,如Tomcat、WebLogic、Jboss等。 压缩包内的文件"Spring2.0.chm"很可能是...

    j2ee开发全程的实录

    在IT行业中,J2EE(Java 2 Platform, Enterprise Edition)是用于构建企业级应用程序的框架,它由Oracle公司提供并被广泛应用于大型分布式系统、Web应用和后端服务的开发。本实录将深入探讨J2EE开发的全过程,包括但...

    基于J2EE在分布式环境下的底层结构(外文翻译+文献综述).zip

    10. **文献综述**: 文献综述部分可能涵盖了J2EE在实际项目中的应用案例,技术发展趋势,以及与其他分布式架构(如Spring、Microservices)的对比分析。 通过对J2EE在分布式环境下的底层结构的深入理解和研究,...

    J2EE面试题(很全面)

    在Java企业级开发领域,J2EE(Java 2 Platform, Enterprise Edition)是一项至关重要的技术。它为构建分布式、多层的企业应用提供了标准的框架和组件模型。以下是对J2EE面试题的一些关键知识点的详细解析: 1. **...

    J2EE 全实例教程(CHM格式)

    教程可能会介绍如何创建、配置和使用JavaBean,以及在JSP中通过EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)调用Bean的方法。 4. **EJB(Enterprise JavaBeans)**:EJB是J2EE的核心...

    J2EE高级框架PPT

    随着技术的发展,J2EE逐渐演变为Java EE,并最终被 Jakarta EE所取代,但其核心概念和框架仍然在现代企业开发中广泛使用。 **Web层框架** 在J2EE中,Web层主要处理HTTP请求,负责用户交互。常见的框架有: 1. **...

    java与j2ee面试试题总结(终结版)

    MVC(Model-View-Controller)设计模式也是考察重点,因为它在许多J2EE框架中广泛应用,比如Struts和Spring MVC。 EJB(Enterprise JavaBeans)是J2EE的核心组件,包括Session Beans、Entity Beans和Message Driven...

    J2EE SSH2架构(3)

    在IT行业中,SSH2是指Struts2、Spring和Hibernate三个开源框架的组合,它们是构建J2EE企业级应用的常见选择。这个“J2EE SSH2架构(3)”的主题聚焦于Struts2.1.8、Spring2.5.6和Hibernate3.3这三个特定版本的集成和...

    基于j2ee的网上书店源码.rar

    源码可能使用JPA,或者更流行的实现如Hibernate,来处理对象与数据库表之间的映射,实现数据的持久化。 5. **Servlet和JSP**:Servlet是Java编写服务器端程序的标准API,JSP则是HTML和Java代码混合的页面技术。二者...

    J2EE快速进阶培训-bmp.ppt

    - J2EE应用运行在容器(如Tomcat、JBoss、WebLogic等)中,容器负责部署、管理和调用应用组件,提供服务如安全性、事务管理、生命周期管理等。 **学习路径** J2EE快速进阶培训通常包括以下阶段: 1. 基础知识:...

    j2ee+五层web开发架构

    - **容器**:J2EE应用运行在特定的容器中,如Web容器(Tomcat、Jetty)和EJB容器(GlassFish、WebLogic),容器负责管理应用的生命周期和资源。 - **安全**:J2EE提供了多种安全机制,如JAAS(Java Authentication...

    Spring 开发指南

    在项目实践中,Spring还与许多其他流行的技术和框架结合使用,如MyBatis、Spring Boot、Spring Security、Spring Data等,形成强大的生态系统,为开发者提供全面的解决方案。Spring Framework的灵活性和广泛的功能使...

    J2EE面试题目.doc

    在Tomcat这样的Servlet容器中,访问JSP页面的URL需要包含应用的上下文路径(helloapp)以及相对于应用根目录的文件路径。 2. 第二题涉及Servlet类的位置。正确答案是(D)helloapp/WEB-INF/classes/org/javathinker...

    J2EE应用开发详解

    294 16.3.5 数据库连接池中使用JDBC 297 16.4 小结 302 第17章 ORM与Java持久化机制 303 17.1 ORM概述 303 17.2 域模型 304 17.3 实体域对象的持久化模式 304 17.4 JPA 305 17.4.1 实体 306 17.4.2 EntityManager ...

    j2ee中软内部培训!

    8. **MVC(Model-View-Controller)设计模式**:在Java EE中,如Struts、Spring MVC或JSF(JavaServer Faces)框架广泛应用于实现MVC架构。理解这些框架的工作方式和应用场景,可以提高开发效率。 9. **Java EE安全...

Global site tag (gtag.js) - Google Analytics