最近在研究一个关于在不用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&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做持久层已经成功)...
分享到:
相关推荐
在IT行业中,J2EE(Java 2 Platform, Enterprise Edition)是Java平台的企业版,用于构建和部署分布式、多层的服务器端应用。它提供了一系列的API和服务,支持Web服务、事务处理、安全性和可扩展性,使得开发企业级...
JPA是Java持久化规范,是Java EE平台中的ORM解决方案。它定义了API,使得开发者可以用面向对象的方式来操作数据库,而无需直接编写SQL语句。JPA通过ORM映射文件或注解将Java实体类与数据库表关联,提供了一套标准的...
学习者将学习如何配置Spring IoC容器,使用注解驱动的开发模式,以及整合Spring的其他模块,如Spring JDBC、Spring Data JPA等。 2. **MyBatis框架**:MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程...
在实际项目中,EJB通常与其他J2EE组件结合使用,如Servlet、JSP、JSF、JPA等,形成完整的MVC架构。此外,现代J2EE开发趋势倾向于使用轻量级框架,如Spring,它们简化了EJB的一些复杂性,提供了更灵活的编程模型。 ...
10. **部署与容器**:了解如何在Tomcat、Glassfish、JBoss等应用服务器上部署J2EE应用,以及理解容器如何管理应用的生命周期。 通过《J2EE全实例教程》.chm文件,学习者可以按照实际项目场景来学习和实践以上各种...
Spring与J2EE的关系紧密,它提供了对J2EE服务的轻量级替代,如数据访问、事务管理、邮件服务等,同时Spring也可以很好地与J2EE容器集成,如Tomcat、WebLogic、Jboss等。 压缩包内的文件"Spring2.0.chm"很可能是...
在IT行业中,J2EE(Java 2 Platform, Enterprise Edition)是用于构建企业级应用程序的框架,它由Oracle公司提供并被广泛应用于大型分布式系统、Web应用和后端服务的开发。本实录将深入探讨J2EE开发的全过程,包括但...
10. **文献综述**: 文献综述部分可能涵盖了J2EE在实际项目中的应用案例,技术发展趋势,以及与其他分布式架构(如Spring、Microservices)的对比分析。 通过对J2EE在分布式环境下的底层结构的深入理解和研究,...
在Java企业级开发领域,J2EE(Java 2 Platform, Enterprise Edition)是一项至关重要的技术。它为构建分布式、多层的企业应用提供了标准的框架和组件模型。以下是对J2EE面试题的一些关键知识点的详细解析: 1. **...
教程可能会介绍如何创建、配置和使用JavaBean,以及在JSP中通过EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)调用Bean的方法。 4. **EJB(Enterprise JavaBeans)**:EJB是J2EE的核心...
随着技术的发展,J2EE逐渐演变为Java EE,并最终被 Jakarta EE所取代,但其核心概念和框架仍然在现代企业开发中广泛使用。 **Web层框架** 在J2EE中,Web层主要处理HTTP请求,负责用户交互。常见的框架有: 1. **...
MVC(Model-View-Controller)设计模式也是考察重点,因为它在许多J2EE框架中广泛应用,比如Struts和Spring MVC。 EJB(Enterprise JavaBeans)是J2EE的核心组件,包括Session Beans、Entity Beans和Message Driven...
在IT行业中,SSH2是指Struts2、Spring和Hibernate三个开源框架的组合,它们是构建J2EE企业级应用的常见选择。这个“J2EE SSH2架构(3)”的主题聚焦于Struts2.1.8、Spring2.5.6和Hibernate3.3这三个特定版本的集成和...
源码可能使用JPA,或者更流行的实现如Hibernate,来处理对象与数据库表之间的映射,实现数据的持久化。 5. **Servlet和JSP**:Servlet是Java编写服务器端程序的标准API,JSP则是HTML和Java代码混合的页面技术。二者...
- J2EE应用运行在容器(如Tomcat、JBoss、WebLogic等)中,容器负责部署、管理和调用应用组件,提供服务如安全性、事务管理、生命周期管理等。 **学习路径** J2EE快速进阶培训通常包括以下阶段: 1. 基础知识:...
- **容器**:J2EE应用运行在特定的容器中,如Web容器(Tomcat、Jetty)和EJB容器(GlassFish、WebLogic),容器负责管理应用的生命周期和资源。 - **安全**:J2EE提供了多种安全机制,如JAAS(Java Authentication...
在Tomcat这样的Servlet容器中,访问JSP页面的URL需要包含应用的上下文路径(helloapp)以及相对于应用根目录的文件路径。 2. 第二题涉及Servlet类的位置。正确答案是(D)helloapp/WEB-INF/classes/org/javathinker...
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 ...
8. **MVC(Model-View-Controller)设计模式**:在Java EE中,如Struts、Spring MVC或JSF(JavaServer Faces)框架广泛应用于实现MVC架构。理解这些框架的工作方式和应用场景,可以提高开发效率。 9. **Java EE安全...