首先开发服务端:在IDE中一定记得是NEW一个EJB工程
1.开发Bean class
package dev.com.titan.domain;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="CABIN")
public class Cabin implements Serializable{
private int id;
private String name;
private int deckLevel;
private int shipId;
private int bedCount;
@Id
@Column(name="ID")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(name="NAME")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(name="DECK_LEVEL")
public int getDeckLevel() {
return deckLevel;
}
public void setDeckLevel(int deckLevel) {
this.deckLevel = deckLevel;
}
@Column(name="BED_COUNT")
public int getBedCount() {
return bedCount;
}
public void setBedCount(int bedCount) {
this.bedCount = bedCount;
}
@Column(name="SHIP_ID")
public int getShipId() {
return shipId;
}
public void setShipId(int shipId) {
this.shipId = shipId;
}
}
注释:
@Entity注解告知persistence provider 这是一个映射到数据库的实体类,并且可以受管于EntityManager服务。
@Table告知EJB容器,该BEAN类被映射到哪一张数据库表。
BEAN类一定要实现Serializable接口。
@Column表示对应映射到数据库中的字段名字,如果没有该标志,那么默认按照属性的名字来命名。
@Id 表示该属性为实体的主键。
2.定义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="titan" transaction-type="JTA">
<jta-data-source>java:/TitanDB</jta-data-source>
</persistence-unit>
</persistence>
黑色字体部分表示告诉EJB容器要用到哪个数据源。
3.配置JBoss的数据库连接池
在/server/default/deploy目录中建立一个mysql-ds.xml文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>TitanDB</jndi-name>
<connection-url>jdbc:mysql://localhost:3306/ejb</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>root</user-name>
<password>root</password>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
<metadata>
<type-mapping>mySQL</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
黑体字部分的名字必须和你的persistence.xml文件中的黑体字部分一致。
mysql-ds.xml文件用于配置mysql的数据源。实际上,该文件可以在/docs/examples/jca目录中找到,读者只需要将数据库名、用户名和密码以及jndi名改成自己的就可以了。最后将修改后的mysql-ds.xml文件复制到deploy目录中(必须叫这个文件名)。
连接mysql数据库需要一个jdbc驱动(jar文件),将该文件复制到/server/default/lib目录中。
4.开发接口和实现类
接口:
package dev.com.titan.travelagent;
import javax.ejb.Remote;
import dev.com.titan.domain.Cabin;
@Remote
public interface TravelAgentRemote {
public void createCabin(Cabin cabin);
public Cabin findCabin(int id);
}
实现类:
package dev.com.titan.travelagent;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import dev.com.titan.domain.Cabin;
@Stateless
public class TravelAgentBean implements TravelAgentRemote {
@PersistenceContext(unitName="titan") private EntityManager manager;
public void createCabin(Cabin cabin) {
manager.persist(cabin);
}
public Cabin findCabin(int id) {
// TODO Auto-generated method stub
return manager.find(Cabin.class, id);
}
}
红色部分表示告诉容器去寻找unitName=titan的数据源,而该数据源对应的配置在persistence.xml中,然后根据该配置去EJB容器中找到java:/TitanDB的数据源。
@PersistenceContext
注解来获得ENTITYMANAGER服务的访问,从此来创建和查找CABIN实体,他告知EJB容器,必须用以个EntityManager实例来设置manager数据成员。
EJB容器发现数据成员类型为EntityManager,便知道将数据成员设置为一个指向 EntityManager服务的引用,此服务指向我们在persistence.xml文件里定义的unit.我们可以利用EntityManager 的persist()和find()方法来对实体类进行操作。
然后部署到JBOSS中,可以通过IDE的部署功能直接部署到JBOSS中。
创建数据库表:
CREATE TABLE `cabin` (
`ID` int(11) NOT NULL auto_increment,
`SHIP_ID` int(11) default NULL,
`BED_COUNT` int(11) default NULL,
`NAME` varchar(255) default NULL,
`DECK_LEVEL` int(11) default NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
开发客户端:
首先将服务端打成一个JAR包,考到客户端中。
然后导入开发JBOSS客户端所需要的jbossall-client.jar
首先在你的SRC目录下新建一个jndi.properties:
#jboss
java.naming.provider.url = 192.168.61.135:1099
java.naming.factory.initial = org.jnp.interfaces.NamingContextFactory
客户端代码:
package com;
import java.util.Properties;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
import dev.com.titan.domain.Cabin;
import dev.com.titan.travelagent.TravelAgentRemote;
public class Client {
private static InitialContext context = null;
static
{
try {
buildInitialContext();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void buildInitialContext()
{
try {
context = new InitialContext();
} catch (Exception e) {
e.printStackTrace();
}
}
public static InitialContext getInitialContext()
{
if(context==null)
{
buildInitialContext();
}
return context;
}
public static void main(String[] args) {
try {
InitialContext context = getInitialContext();
//如果采用这种方式来得到InitialContext那么系统会自动去读SRC目录下的jndi.properties文件
//下面的JNDI可以通过http://192.168.61.135:8080/jmx-console/
//然后找到Global JNDI Namespace,下找到你所发布的EJB服务的JNDI名字
Object ref = context.lookup("TravelAgentBean/remote");
TravelAgentRemote dao = (TravelAgentRemote)PortableRemoteObject.narrow(ref,TravelAgentRemote.class);
//客户端通过PortableRemoteObject.narrow(ref,TravelAgentRemote.class);方法将Object ref窄化成一个 TravelAgentRemote应用
Cabin c = new Cabin();
c.setName("tuping");
c.setDeckLevel(1);
c.setShipId(1);
c.setBedCount(3);
dao.createCabin(c);
Cabin c2 = dao.findCabin(1);
System.out.println(c2.getName());
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行得到结果:tuping
调用成功!
分享到:
相关推荐
webots月球车仿真
内容概要:本文提供了关于2025年美国大学生数学建模竞赛的重要时间点安排以及竞赛的具体细节介绍。文中明确了从报名到最终结果发布的所有时间节点,详细列出了两种不同类型的竞赛题目特点,即传统的连续性和离散性问题和涉及数据科学技术的题目的特点。同时规定了参赛队伍构成形式、论文要求及评审标准,并提及了对工具使用的具体限制条件以及对于学术诚信的要求——强调独立解决问题的重要性。此外还简述了此次赛事所提供的多个层次获奖可能性的情况介绍。 适用人群:对数学应用有兴趣的大四本科生或者研究生;准备参加2025年度数学建模国际大赛的学生。 使用场景及目标:帮助想要参赛的同学提前规划自己的备考周期,在有限的时间内最大化提升自身的竞争力;确保选手了解完整的参赛规则避免不必要的失误导致成绩受损。 其他说明:该竞赛是一项非常具有挑战性的活动,它不仅考验了参赛者的专业知识水平,还需要他们展示出色的跨学科合作能力。因此参与者应该尽早开始准备,充分考虑各个方面的因素,如组建团队、收集资料和练习旧试题等。
2025年最新康复医学概论考试题库与答案.docx
Move Class.html
C标准库源码
2025检验类之临床医学检验技术(士)真题库附答案.pptx
C标准库源码
C标准库源码
Selva Assignment Class tank problem.pptx
C标准库源码
基于二维四值元胞自动机和混沌系统的图像加密算法.pdf
CST闪电间接效应研究.pdf
### 智慧人防解决方案:科技赋能,守护安全 智慧人防解决方案通过整合军队、政府和社会资源,构建了一个集预警报知、指挥控制、防护救援、综合保障于一体的智能化系统。该方案依托物联网、大数据、GIS与BIM等技术,实现了对人防工程、战备物资、设备设施的全面监控与管理。通过智能监测、可视化展示、远程维护等功能,智慧人防不仅提升了人防设施的运行效率,还确保了设备的安全性和可靠性。例如,系统能够实时监测人防工程的给排水、通风、消防等设施,精准定位异常情况,确保设备始终处于最佳状态。这种“智慧化”的管理模式,不仅提高了人防系统的应急响应能力,还为战时和日常的防护救援提供了强有力的技术支撑。 ### 人防宣传教育与应急指挥:沉浸式体验与高效调度 智慧人防解决方案在人防宣传教育方面,突破了传统的展板宣传模式,引入了VR交互、移动App、微信公众号等现代化手段,打造了沉浸式的防空防灾体验平台。通过模拟空袭疏散、核武器袭击、火灾逃生等场景,市民可以在虚拟环境中学习和掌握应急技能,提升自我保护意识。此外,智慧人防还构建了应急指挥调度系统,实现了从预防、启动、处置到分析的全流程管理。系统通过视频监控、广播系统、手持终端等设备,快速获取现场信息,实时上报并指挥调度,确保突发事件能够迅速得到有效处置。这种“一键式”警报推送和逃生指示功能,不仅提高了应急响应的效率,还增强了公众的安全感。 ### 信用体系与协同监管:构建透明、高效的人防生态 智慧人防解决方案还引入了人防行业信用体系,通过公示系统、协同监管平台等工具,实现了对企业、个人和培训机构的全方位信用管理。系统支持企业信息查询、信用修复、联合惩戒等功能,确保人防行业的透明度和规范性。例如,企业可以通过平台公示年报和即时信息,公众可以查询企业的信用记录,政府部门则可以通过协同监管平台进行实时监控和数据分析。这种信用体系的建立,不仅提升了人防行业的整体管理水平,还为社会公众提供了更加安全、可靠的服务保障。通过科技手段与信用管理的结合,智慧人防解决方案为构建高效、透明的人防生态奠定了坚实基础。
【技术分享】Python中URL处理的常见问题及解决方案,值得收藏!.docx
C标准库源码
C标准库源码
康复医学考试题及答案.docx
Python完整程序-Pandas提取指定数据并保存在原Excel工作簿中,含有完整的源码
IndoorLocation-master
基于APF的空管安全绩效评估模型.pdf