EJB开发单表映射

EJB单表映射示例
本文介绍了一个使用EJB进行单表映射的例子,包括实体类定义、实体Bean实现及JPA配置等关键部分,并通过Ant进行项目构建。
所谓EJB指的是企业级的javabean,实际上是用于编写业务层代码,最大的优势是可以基于分布式,即逻辑处理可以和客户端在物理上实现分离,亦可以多个应用共享业务逻辑,由于现在EJB只适应于大型企业,所以其占有的市场还不是很大,但是EJB的专家组已经慢慢开始在现有的基础上慢慢分离出一些轻量级的服务,相信在不久的将来,EJB会咸鱼翻身,下面是我写的一个单表映射例子,新建一个java工程,并将JBoss目录client文件夹中的所有jar包添加到工程中
1.首先是实体类

package com.lamp.bean;


import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="person")
public class Person implements Serializable{

private static final long serialVersionUID = 4477505660860563844L;
private Integer id;
private String name;

public Person(){}

public Person(String name) {
this.name = name;
}

@Id @Column(name="id",length=10,nullable=false) @GeneratedValue(strategy=GenerationType.AUTO)
public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

@Column(name="name",length=20,nullable=false)
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}

}

2.实体bean

package com.lamp.service.impl;

import java.util.List;

import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import com.lamp.bean.Person;
import com.lamp.service.PersonService;

@Stateless
@Remote(PersonService.class)
public class PersonServiceBean implements PersonService {

@PersistenceContext
EntityManager em;

public void delete(Integer personId) {
em.remove(em.getReference(Person.class, personId));
}

public Person getPerson(Integer personId) {
return em.find(Person.class, personId);
}

@SuppressWarnings("unchecked")
public List<Person> getPersons() {
return em.createQuery("select o from Person o").getResultList();
}

public void save(Person person) {
em.persist(person);
}

public void update(Person person) {
em.merge(person);
}

}

3.在src目录下新建文件夹META-INF,在其目录下新建JPA配置文件persistence.xml

<?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="MyEJBEntity" transaction-type="JTA">
<jta-data-source>java:你在JBoss中配置的数据源JNDI名称</jta-data-source>

<properties>
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.show_sql" value="false" />
<property name="hibernate.format_sql" value="false" />
</properties>

</persistence-unit>


</persistence>


在这里我是通过ant进行项目的构建的,build.xml代码如下

<?xml version="1.0" encoding="UTF-8"?>
<project name="EntityBean" basedir=".">

<property environment="env"></property>
<property name="src.dir" value="${basedir}/src"></property>
<property name="jboss.home" value="${env.JBOSS_HOME}"></property>
<property name="jboss.server.config" value="default"></property>
<property name="build.dir" value="${basedir}/build"></property>

<path id="build.classpath">
<fileset dir="${jboss.home}\client">
<include name="*.jar"/>
</fileset>
<pathelement location="${build.dir}"/>
</path>

<target name="prepare">
<delete dir="${build.dir}"/>
<mkdir dir="${build.dir}"/>
</target>

<target name="compile" depends="prepare" description="编译">
<javac srcdir="${src.dir}" destdir="${build.dir}" debug="on" includes="com/**">
<classpath refid="build.classpath"></classpath>
</javac>
</target>

<target name="ejbjar" depends="compile" description="创建jar">
<jar jarfile="${basedir}\${ant.project.name}.jar">
<fileset dir="${build.dir}">
<include name="**/*.class"/>
</fileset>
<metainf dir="${src.dir}\META-INF"></metainf>
</jar>
</target>

<target name="deploy" depends="ejbjar" description="发布EJB">
<copy file="${basedir}\${ant.project.name}.jar" todir="${jboss.home}\server\${jboss.server.config}\deploy"></copy>
</target>

<target name="undeploy" description="卸载EJB">
<delete file="${jboss.home}\server\${jboss.server.config}\deploy\${ant.project.name}.jar"></delete>
</target>

</project>


还有要记得将数据源文件(我用的mysql)mysql-ds.xml文件放在..server\default\deploy目录下,mysql的驱动包放在..server\default\lib目录下,启动JBoss并用ant将项目构建,JBoss会帮你在数据库中自动生成表person

写个测试方法吧,在src目录下新建文件jndi.properties
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=localhost:1099

新建一个测试方法

private static PersonService personService;

@BeforeClass
public static void setUpBeforeClass() throws Exception {
try {
InitialContext ctx = new InitialContext();
personService = (PersonService) ctx
.lookup("PersonServiceBean/remote");
} catch (Exception e) {
e.printStackTrace();
}
}

@Test
public void testSave() {
personService.save(new Person("我的第一个EJB"));
}
基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究(Matlab代码实现)内容概要:本文围绕“基于数据驱动的Koopman算子的递归神经网络模型线性化”展开,旨在研究纳米定位系统的预测控制方法。通过结合数据驱动技术与Koopman算子理论,将非线性系统动态近似为高维线性系统,进而利用递归神经网络(RNN)建模并实现系统行为的精确预测。文中详细阐述了模型构建流程、线性化策略及在预测控制中的集成应用,并提供了完整的Matlab代码实现,便于科研人员复现实验、优化算法并拓展至其他精密控制系统。该方法有效提升了纳米级定位系统的控制精度与动态响应性能。; 适合人群:具备自动控制、机器学习或信号处理背景,熟悉Matlab编程,从事精密仪器控制、智能制造或先进控制算法研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①实现非线性动态系统的数据驱动线性化建模;②提升纳米定位平台的轨迹跟踪与预测控制性能;③为高精度控制系统提供可复现的Koopman-RNN融合解决方案; 阅读建议:建议结合Matlab代码逐段理解算法实现细节,重点关注Koopman观测矩阵构造、RNN训练流程与模型预测控制器(MPC)的集成方式,鼓励在实际硬件平台上验证并调整参数以适应具体应用场景。
提供了一套完整的基于51单片机的DDS(直接数字频率合成)信号波形发生器设计方案,适合电子爱好者、学生以及嵌入式开发人员学习和实践。该方案详细展示了如何利用51单片机(以AT89C52为例)结合AD9833 DDS芯片来生成正弦波、锯齿波、三角波等多种波形,并且支持通过LCD12864显示屏直观展示波形参数或状态。 内容概述 源码:包含完整的C语言编程代码,适用于51系列单片机,实现了DDS信号的生成逻辑。 仿真:提供了Proteus仿真文件,允许用户在软件环境中测试整个系统,无需硬件即可预览波形生成效果。 原理图:详细的电路原理图,指导用户如何连接单片机、DDS芯片及其他外围电路。 PCB设计:为高级用户准备,包含了PCB布局设计文件,便于制作电路板。 设计报告:详尽的设计文档,解释了项目背景、设计方案、电路设计思路、软硬件协同工作原理及测试结果分析。 主要特点 用户交互:通过按键控制波形类型和参数,增加了项目的互动性和实用性。 显示界面:LCD12864显示屏用于显示当前生成的波形类型和相关参数,提升了项目的可视化度。 教育价值:本资源非常适合教学和自学,覆盖了DDS技术基础、单片机编程和硬件设计多个方面。 使用指南 阅读设计报告:首先了解设计的整体框架和技术细节。 环境搭建:确保拥有支持51单片机的编译环境,如Keil MDK。 加载仿真:在Proteus中打开仿真文件,观察并理解系统的工作流程。 编译与烧录:将源码编译无误后,烧录至51单片机。 硬件组装:根据原理图和PCB设计制造或装配硬件。 请注意,本资源遵守CC 4.0 BY-SA版权协议,使用时请保留原作者信息及链接,尊重原创劳动成果。
【四轴飞行器的位移控制】控制四轴飞行器的姿态和位置设计内环和外环PID控制回路(Simulink仿真实现)内容概要:本文档详细介绍了基于Simulink仿真实现的四轴飞行器位移控制方法,重点在于设计内外环PID控制回路以实现对四轴飞行器姿态和位置的精确控制。文中阐述了控制系统的基本架构,内环负责稳定飞行器的姿态(如俯仰、滚转和偏航),外环则用于控制飞行器的空间位置和轨迹跟踪。通过Simulink搭建系统模型,实现控制算法的仿真验证,帮助理解飞行器动力学特性与PID控制器参数调节之间的关系,进而优化控制性能。; 适合人群:具备自动控制理论基础和Simulink使用经验的高校学生、科研人员及从事无人机控制系统的工程师;尤其适合开展飞行器控制、机器人导航等相关课题的研究者。; 使用场景及目标:①掌握四轴飞行器的动力学建模与控制原理;②学习内外环PID控制结构的设计与参数整定方法;③通过Simulink仿真验证控制策略的有效性,为实际飞行测试提供理论支持和技术储备;④应用于教学实验、科研项目或毕业设计中的控制系统开发。; 阅读建议:建议读者结合Simulink软件动手实践,逐步构建控制系统模型,重点关注PID参数对系统响应的影响,同时可扩展学习姿态传感器融合、轨迹规划等进阶内容,以全面提升飞行器控制系统的综合设计能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值