- 一.Enterprise Beans
-
在EJB(Enterprise Java Beans)中定义了两种不同类别的Enterprise Bean :
*会话 Bean (Session Bean)
*实体Bean (Entity Bean)
1. 会话 Bean (Session Bean)
会话 Bean 是调用它的客户端代码要完成的工作。当客户端与服务器建立联系,那么一个会话 Bean 就建立起来了。根据会话 Bean 的状态不同有分为:
A. 状态会话 Bean (Stateful Session Bean)
B. 无状态会话 Bean (Stateless Session Bean)
1.1 状态会话 Bean (Stateful Session Bean)
当客户机和服务器建立连接之后,状态会话 Bean (Stateful Session Bean) 将一直在客户机和服务器之间保持着用户的某个状态。例如:用户使用银行的ATM时,经过验证之后,用户可以连续执行多次操作,在这个过程当中,用户的合法状态将一直被保留,直到她将信用卡取出,结束这次操作。这时,状态会话 Bean (Stateful Session Bean) 也就被销毁。
1.2无状态会话 Bean (Stateless Session Bean)
当客户机和服务器建立连接之后,无状态会话 Bean (Stateless Session Bean)处理单一的用户请求或商务过程。无状态会话 Bean (Stateless Session Bean)不需要从以前的请求中提取任何状态。例如,用户的用户密码确认。用户输入密码后,发送请求。组件返回真或假来确认用户,一旦过程完成,无状态会话 Bean (Stateless Session Bean) 也宣告结束。
2. 实体Bean (Entity Bean)
实体Bean (Entity Bean)只是数据模型,它不包括商务逻辑。实体Bean (Entity Bean)可以将关系/对象数据库的数据映射到内存中供其它组件使用。实体Bean (Entity Bean)是一直存在的,而且具有很高的容错性能。实体Bean (Entity Bean)能供允许多用户同时访问。
二. 会话 Bean (Session Bean)
Ejb的执行过程是被放在一个EJB容器中进行的,所以客户端不会直接调用我们写好的Enterprise Bean ,而是调用EJB容器生成的一个EJBObject (EJB对象)来实现。那么,我们在编写服务器端的Enterprise Bean 时,就要考虑这点。既然客户端不能直接访问,就由EJBObject来代劳,所以在编写服务器端时,就要编写服务器端的一个接口(Remote)用来与客户机联系,实力化EJBObject。要生成EJBObject 就要调有Home 接口,来建立这个实力。
以下是会话 Bean 的代码分析:
A.Enterprise Bean 类:sailorsy.class
1.setSessionContext(SessionContext ctx)方法
它是EJB容器和Enterprise Bean互相作用的关口。
2.ejbCreate(…)方法 它可以初始化Enterprise Bean ,可以定义不同的ejbCreate(…)方法,每个方法所带的参数不同。但是,必许要存在至少一种。import java.rmi.*; import javax.ejb.*; public class sailorsy implements SessionBean{ private SessionContext ctx=null; public voic setSessionContext(SessionContext ctx){ this.ctx=ctx; }//setSessionContext }//class sailorsy
3.ejbPassivate()方法 如果初始化的Enterprise Bean 过多,EJB容器将其中的一些挂起(passivate),释放他们所占用的空间。import java.rmi.*; import javax.ejb.*; public class sailorsy implements SessionBean{ private SessionContext ctx=null; public voic setSessionContext(SessionContext ctx){ this.ctx=ctx; }//setSessionContext public void ejbCreate() { }//ejbCreate }//class sailorsy
4.ejbActivate()方法 和ejbPassivate正好相反,它将被挂起的Bean从新调回。import java.rmi.*; import javax.ejb.*; public class sailorsy implements SessionBean{ private SessionContext ctx=null; public voic setSessionContext(SessionContext ctx){ this.ctx=ctx; }//setSessionContext public void ejbCreate() { }//ejbCreate public void ejbPassivate() { }//ejbPassivate }//class sailorsy
5.ejbRemove()方法 它可以清除EJB容器中的Bean。import java.rmi.*; import javax.ejb.*; public class sailorsy implements SessionBean{ private SessionContext ctx=null; public voic setSessionContext(SessionContext ctx){ this.ctx=ctx; }//setSessionContext public void ejbCreate() { }//ejbCreate public void ejbPassivate() { }//ejbPassivate public void ejbActivate() { }//ejbActivate }//class sailorsy
以上这些是EJB必需的回调方法,我们可以在里面加入自己的方法,加入自己的商务逻辑。 B.Home 接口: sailorsyHomeimport java.rmi.*; import javax.ejb.*; public class sailorsy implements SessionBean{ private SessionContext ctx=null; public voic setSessionContext(SessionContext ctx){ this.ctx=ctx; }//setSessionContext public void ejbCreate() { }//ejbCreate public void ejbPassivate() { }//ejbPassivate public void ejbActivate() { }//ejbActivate public void ejbRemove() { }//ejbRemove public String showname(){ return "Hello,my name is sailorsy"; }//自己的商务方法 }//class sailorsy
三.调用会话 Bean:sailorsyTestClient1import java.rmi.*; import javax.ejb.*; public interface sailorsyHome extends EJBHome { public sailorsyRemote create() throws RemoteException, CreateException; } C. Remote接口:sailorsyRemote import java.rmi.*; import javax.ejb.*; public interface sailorsyRemote extends EJBObject { public java.lang.String showname() throws RemoteException; }
以上的EJB在win2000 jbuilder5/jbuilder6 BAS4.5经过测试。 以下是整个EJB的执行过程: 1. 客户端通过JNDI检索Home对象的引用; 2. JNDI返回Home对象的引用; 3. 请求创建一个新的EJB对象; 4. 创建EJB对象; 5. 返回EJB对象; 6. 调用商务方法; 7. 调用Enterprise Bean.import javax.naming.*; import javax.ejb.*; import javax.rmi.PortableRemoteObject; import java.rmi.*; public class sailorsyTestClient1 { private sailorsyHome sailorsyHomeObject = null; //Construct the EJB test client public sailorsyTestClient1() { try { //以下是客户端使用JNDI定位Home对象。 Context ctx = new InitialContext(); //look up jndi name Object ref = ctx.lookup("sailorsy"); //cast to Home interface sailorsyHomeObject = (sailorsyHome) PortableRemoteObject.narrow(ref, sailorsyHome.class); } catch(Exception e) { e.printStackTrace(); } } //---------------------------------------------------------------------------- // Utility Methods //---------------------------------------------------------------------------- public sailorsyHome getHome() { return sailorsyHomeObject; } //Main method public static void main(String[] args) throws Exception{ sailorsyTestClient1 client = new sailorsyTestClient1(); sailorsyRemote sr=client.getHome() .create() ; String s=sr.showname() ; System.out.print(s); // Use the getHome() method of the client object to call Home interface // methods that will return a Remote interface reference. Then // use that Remote interface reference to access the EJB. } }
相关推荐
Java EJB技术实战入门与实例大全
本文还有配套的精品资源,点击获取 简介:Java EJB是Java EE的核心组成部分,用于创建企业级应用组件,支持事务处理、安全性和可伸缩性。本压缩包提供了各种实例,包括Session Beans、Message Driven Beans和Entity Beans的基本概念和实际应用代码,旨在帮助Java初学者理解并掌握EJB的使用。通过实例学习如何定义、部署EJB,并理...
EJB:快速入门
转载自https://www.cnblogs.com/f1194361820/p/8124374.html1、EJB 概念EJB是Enterprise Java Bean的简称,翻译后应该是:企业级Java组件,也可以称为分布式组件。它是为分布式商业服务提供了一个思想超前的、提供了安全和事务的、通用的平台。 2、EJB体系结构EnterpriseBean和Serializable接口一样,是一个...
EJB入门项目
里面是一个简单的基于IDEA+JBoss7.1.1实现的一个入门级EJB项目
ejb入门
处女作----第一个ejb现在大部分都是些轻量级的工具了,象hibernate之类的。偶以前也没写过ejb,不过形式所逼。唉 还是上梁山吧。一些ejb的高深知识偶也不会,这里只是一个简单入门的例子。希望对大家有用,如果有不对之处,请斧正。 环境: jbuilder2005、weblogic。(只是实现了一个hello ejb 所以没有database) 1、啥叫ejb? 自己查书去! 2、h
一个EJB项目入门例程
这是大学选修课javaEE的一个基于EJB的作业,可以作为EJB的入门参考资料
EJB3入门
博文链接:https://yanwu.iteye.com/blog/195253
EJB3.0入门一(黎活明老师视频笔记)
1.什么是EJB EJB(Enterprice JavaBeans)是一个用于分布式业务应用的标准服务端组件模型。采用EJB架构编写的应用是可伸的、事务性的、多用户安全的。 2.EJB用来干什么? EJB实际上用于编写业务层代码。如果我们采用EJB开发基于MVC结构的应用,那么EJB就是用于开发应用的业务层。 相较于普通JavaBean,比如事务处理就得自己写,安全服务也得手
docker部署zabbix6.2.7+grafana
docker部署zabbix6.2.7+grafana。
使用POI提取Word文件的文本内容
使用POI提取Word文件的文本内容 POI是Apache的一个开源项目,可以到Apache网站下载相应的jar包文件,及其源文件。 POI提供了提取一些非TXT文本中文本内容的API,比如提取Word,Excel等,使用起来非常方便。 为了说明POI提起Word文件的方便和简单,通过提取一个Word文件的文本来,来了解POI API的功能。 假设在本地磁盘中存在一个Word文件 E:POI...
基于Python的手语识别项目(简单版)
总之,看似简单的代码,实则花费了我不少的时间和精力,我曾无数次在深夜的灯光下,与代码为伴,只为了一点点优化,一丝丝提升。让我们一起,以尊重原创的精神,推动编程领域的发展,让这份热爱和技术的力量,照亮更多人的前行之路。模型的建立(---------------本人采用的是开源的asl-alphabet手势识别库,记得放在路径下--------------)current_dir需要根据自己的路径修改!current_dir需要根据自己的路径修改!current_dir需要根据自己的路径修改!
MATLAB联合Fluent优化仿真
matlab与fluent交互
转 POI Project提取word文档的方法
使用POI提取Word文件的文本内容2008年04月28日 星期一 17:03POI是Apache的一个开源项目,可以到Apache网站下载相应的jar包文件,及其源文件。POI提供了提取一些非TXT文本中文本内容的API,比如提取Word,Excel等,使用起来非常方便。为了说明POI提起Word文件的方便和简单,通过提取一个Word文件的文本来,来了解P
英飞凌TC3xx的GTM模块到底有多强?从PWM生成到电机驱动,一篇讲透车载定时器核心
本文深入解析英飞凌TC3xx系列中的GTM模块在汽车电子领域的强大功能,从PWM生成到电机驱动的全链路设计。通过模块化架构和硬件级解决方案,GTM显著提升系统精度和响应速度,适用于电机控制、电源管理等复杂场景。文章结合实战经验,详细拆解GTM的技术实现和性能优势。
[No00000D]word如何批量删除超链接 怎么去掉网址保留文字
1.删除超链接的文字及网址 这种情况是想把带有网址的文字统统删掉,文字和网址一概不留。 首先在word界面按下ALT+F9(在所有的域代码及其结果间进行切换。),超链接文本会被转换成代码的样式。 例如百度百科中一段有超链接的段落转换前后对比: 引用 发展简史 产品功能 用户体系 外界评价 {HYPERLINK "http://baike.baidu.com/li...
Django 前后端分离实战:网络设备运维系统 - 从登录认证到业务模块
这篇文章分享了Django+Vue前后端分离开发网络设备运维系统的实战经验,重点介绍了登录认证、全局布局和设备管理三大模块的实现。文章包含以下核心内容: 登录模块实现:包括表单验证、Token认证、记住密码功能,以及美观的UI设计(渐变背景、毛玻璃效果) 全局布局架构:采用侧边栏+顶部导航的响应式设计,支持菜单权限控制和多设备适配 业务功能开发:详细展示了设备分类和部门管理的CRUD功能实现,包括列表展示、搜索过滤、分页等功能 常见问题解决:提供了5个开发中常见问题的解决方案,如Vue Router警告、C
扩充两个三维体积:ITK实现
在医学图像处理中,经常需要进行 3D 体积的操作,比如合并、分割等。而 ITK (Insight Segmentation and Registration Toolkit) 是一个常用的开源库,可以用于实现各种医学图像处理算法。这篇文章将介绍如何使用 ITK 实现扩充两个三维体积的操作。不过以上代码已经足够简单明了地演示了如何使用 ITK 实现扩充两个三维体积的操作。首先,我们需要准备两个三维体积的数据。这里假设这两个体积大小相同,并且已经加载到内存中了。来读取和保存体积数据,使用了。
java 冗余,java代码冗余
java 高并发的解决方案对于我们开发的网站,如果网站的访问量非常大的话, 那么...java 高并发的解决方案 对于我们开发的网站,如果网站的访问量非常大的话, 那...(错误纠正代码) 59.EIS:Enterprise Information System(企业信息系统) 60.EJB:Enterprise JavaBean(企业 JavaBean) 61.encapsulate:封装 62...
WPF用户控件间属性传递的艺术
本文详细介绍了WPF中父控件向子控件传递属性的方法。针对常见的绑定失效问题,重点讲解了使用RelativeSource绑定技术,通过指定AncestorType确保正确访问父控件属性。文章通过实例演示了从ParentModel传递属性到ChildUserControl依赖属性的完整实现过程,包括模型定义、XAML结构设计和代码实现。这种方法有效解决了数据上下文混淆问题,为WPF开发中的控件交互提供了可靠解决方案,有助于提升应用的灵活性和可维护性。
Sqribble文档流水线:非AI的确定性排版自动化系统
文档自动化并非必须依赖大模型生成,真正的工程化交付能力源于可编程模板、物理级排版规则与云原生架构的协同。本文聚焦‘确定性文档工程’这一被低估的技术范式——它不追求内容创作的智能幻觉,而致力于解决格式统一、分页可靠、品牌一致、跨设备协同等真实生产痛点。通过结构化模板、语义感知的内容转换、CSS-in-JS渲染引擎与分层控制体系,Sqribble 实现了出版级规范向业务人员操作界面的无损翻译。适用于课程讲义、客户报告、销售手册等高频标准化文档场景,是内容中台建设与知识产品化落地的关键基础设施。
uniapp(vue3):实现手机拍照或相册图片上传后给图片添加水印,uniapp实现多端图片上传、拍照上传自定义插入水印内容,调用手机摄像头打开相机并在周围悬挂自定义水印(支持文字水印/图片水印等)
uni-app,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,uni-app为图片添加自定义水印(解决生成图片不全问题),uniapp上传图片添加水印,uniapp H5实现手机拍照或相册上传图像并添加自定义水印,uniapp水印相机,uni-app为图片添加自定义水印,怎么在图片上加水印,图片水印,上传照片带水印,从相册选择图片加水印功能,拍完照片给图片加水印,添加照片水印,uniapp图片加水印,为图片添加自定义水印,uni-app上传图片并添加水印,上传图
假人有限元模型
假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用
工作中使用到的单词(软件开发)
1.エイリアス alias 别名 powershell使用 get-help 命令时,会得到与此命令 相关(别名)的命令 2.プロキシ proxy 代 理 3.プロモート promote 促进,提升 开发的系统新功能上线发布,有时会使用到这个词,比如 STプロモート 还有使用リリース这个词的。比如STリリース。个人认为两者含义相同。 4.見逃し み................................................................
深度学习工具包 DeepLearningToolbox
深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[](https://bitdeli.com/free "Bitdeli Badge")
三菱PLC通信实战:基于SLMP协议与Python实现高效数据采集与控制
在工业自动化领域,上位机与PLC(可编程逻辑控制器)的通信是实现数据采集、设备监控与系统集成的核心技术。其底层依赖于特定的工业通信协议,如三菱电机的SLMP(Seamless Message Protocol)协议,该协议定义了数据帧格式与读写指令,使得PC或服务器能够通过以太网或串口与PLC进行稳定交互。掌握这一原理,工程师便能突破传统编程软件的局限,利用高级语言(如Python)直接读写PLC的软元件(如D寄存器、M继电器),实现灵活、高效的二次开发。这为构建**自动化测试脚本**、**实时数据看板**
温度PID控制PLC程序
温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值
jre9下载 jdk9
(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】
Introducing to Spring Framework
<!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--><script type="text/javascript"
连接PHP和 Java -- PHP/Java Bridge [2]
Haohappy PHP5研究中心:http://blog.youkuaiyun.com/haohappy2004/(三)为什么要使用 PHP/Java Bridge?PHP中的组件都是短暂,非持久化的。如果是复杂应用体系,我们需要提供中间层组件(像java beans/EJB)或者企业级的提供缓存,连接池或商业逻辑给PHP组件生成的页面。例如解析XML文件就是一个比较耗资源的工作,需要缓存;连接数据库也是
工作中使用到的单词(软件开发)_第三版
====
1087



被折叠的 条评论
为什么被折叠?



