徐州网站建设电话/信息流优化师是什么

徐州网站建设电话,信息流优化师是什么,中卫网站设计公司有哪些,网站添加可信任站点怎么做.jdeveloper介绍 最新版本的JDeveloper 12c(12.1.3.0)和WebLogic Server 12.1.3一起提供了一些新的Java EE 7功能。 其中之一是对用于WebSocket的JSR 356 Java API的支持。 实际上,从12.1.2.0版本开始就支持WebSocket协议(RFC 645…

.jdeveloper

介绍

最新版本的JDeveloper 12c(12.1.3.0)和WebLogic Server 12.1.3一起提供了一些新的Java EE 7功能。 其中之一是对用于WebSocket的JSR 356 Java API的支持。 实际上,从12.1.2.0版本开始就支持WebSocket协议(RFC 6455),但是它基于WebSocket API的WebLogic特定实现。 现在,此专有的WebLogic Server WebSocket API已被弃用。 但是,仍支持向后兼容。

在本文中,我将展示一个在简单的ADF应用程序中为WebSocket使用JSR 356 Java API的示例。 该用例是关于在塔​​斯曼海发生的一些帆船赛。 有三艘船参加帆船赛,它们将穿越塔斯曼海,从澳大利亚航行至新西兰海岸。 该示例应用程序的目标是监视帆船赛并向用户通报其进行情况,并在地图上显示船只的位置。

我们将在应用程序中声明一个WebSocket服务器端点,当用户打开页面时,Java脚本函数将打开一个新的WebSocket连接。 该应用程序使用计划的服务,该服务每秒钟更新一次船的坐标,并向所有活动的WebSocket客户端发送一条包含新船位置的消息。 在客户端,Java脚本功能接收消息并根据GPS坐标将标记添加到Google地图。 因此,对帆船赛感兴趣的每个用户都将看到代表比赛当前状态的相同更新图片。

WebSocket服务器端点

让我们从声明一个WebSocket服务器端点开始。 当前实现中有一个小问题,将来的发行版中可能会解决。 WebSocket端点不能与ADF页面混合使用,应将它们部署在单独的WAR文件中。 最简单的方法是在应用程序中创建一个单独的WebSocket项目,并在此项目中声明所有必需的端点:

屏幕截图2014年10月7日下午12.17.58

这对于为项目设置可读的Java EE Web上下文根也很重要:

屏幕截图2014年10月7日下午12.26.35

下一步是创建一个Java类,它将成为WebSocket端点。 因此,这是一个普通的类,在开始时带有特殊的注释:

@ServerEndpoint(value = "/message")
public class MessageEndPoint {public MessageEndPoint() {super();}
}

注意,JDeveloper用红色标记注释。 我们将通过让JDeveloper为Web Socket配置项目来解决此问题。

屏幕截图2014年10月7日下午12.59.45
完成此操作后,JDeveloper将把该项目转换为一个Web项目,添加Web.xml文件并添加必要的库:

屏幕截图2014年10月7日下午1.32.56
此外,端点类变得可运行,我们可以运行它来检查其实际工作方式:

屏幕截图2014年10月7日下午1.34.55
作为响应,JDeveloper生成以下URL,在该URL上WebSocket端点可用。 注意,URL包含项目上下文根( WebSocket )和批注的value属性( / message )。 如果一切正常,那么在单击URL时,将获得“已成功连接”信息窗口:

屏幕截图2014年10月7日下午1.37.44

顺便说一句,消息中有一个错字。

现在让我们向WebSocket终结点类添加一些实现。 根据规范,将为每个WebSocket连接创建一个MessageEndPoin t类的新实例。 为了容纳所有活动的WebSocket会话,我们将使用静态队列:

public class MessageEndPoint {//A new instance of the MessageEndPoint class //is going to be created for each WebSocket connection//This queue contains all active WebSocket sessionsfinal static Queue<Session> queue = new ConcurrentLinkedQueue<>(); @OnOpenpublic void open(Session session) {queue.add(session);         }    @OnClosepublic void closedConnection(Session session) {queue.remove(session);}@OnErrorpublic void error(Session session, Throwable t) {queue.remove(session);t.printStackTrace();}

建立新连接,关闭新连接以及发生错误时 ,将分别调用带注释的方法openclosedConnectionerror 。 完成此操作后,我们可以使用一些静态方法向所有客户端广播文本消息:

public static void broadCastTex(String message) {for (Session session : queue) {try {session.getBasicRemote().sendText(message);} catch (IOException e) {e.printStackTrace();}}}

在我们的用例中,我们必须用新的GPS坐标通知用户,因此我们应该能够通过WebSockets发送一些比短信更复杂的信息。

发送对象

基本上,示例应用程序的业务模型由两个简单的Java类Boat表示

public class Boat {private final String country;private final double startLongitude;private final double startLatitude;private double longitude;private double latitude;public String getCountry() {return country;}public double getLongitude() {return longitude;}public double getLatitude() {return latitude;}public Boat(String country, double longitude, double latitude) {this.country = country;this.startLongitude = longitude;this.startLatitude = latitude;}
...

帆船赛

public class Regatta {private final Boat[] participants = new Boat[] {new Boat("us", 151.644, -33.86),new Boat("ca", 151.344, -34.36),new Boat("nz", 151.044, -34.86)};public Boat[] getParticipants() {return participants;}
...

对于我们的用例,我们将向WebSocket客户端发送Regatta类的实例。 船会包含以Boat类实例表示的所有赛船会参与者,其中包含更新的GPS坐标( 经度纬度 )。

这可以通过创建Encoder.Text <Regatta>接口的自定义实现来完成,或者换句话说,我们将创建一个编码器,该编码器可以将Regatta实例转换为文本并指定该编码器供WebSocket使用端点,同时发送Regatta实例。

public class RegattaTextEncoder implements Encoder.Text<Regatta> {@Overridepublic void init(EndpointConfig ec) { }@Overridepublic void destroy() { }private JsonObject encodeBoat(Boat boat) throws EncodeException {JsonObject jsonBoat = Json.createObjectBuilder().add("country", boat.getCountry()).add("longitude", boat.getLongitude()).add("latitude" , boat.getLatitude()).build();return jsonBoat;}@Overridepublic String encode(Regatta regatta) throws EncodeException {JsonArrayBuilder arrayBuilder = Json.createArrayBuilder();         for (Boat boat : regatta.getParticipants()) {arrayBuilder.add(encodeBoat(boat));}return arrayBuilder.build().toString(); }}
@ServerEndpoint(value = "/message",encoders = {RegattaTextEncoder.class })

完成之后,我们可以将对象发送给我们的客户:

public static void sendRegatta(Regatta regatta) {for (Session session : queue) {try {session.getBasicRemote().sendObject(regatta);} catch (EncodeException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}

RegattaTextEncoder使用Json表示法将Regatta对象表示为船的列表,因此将如下所示:

[{"country":"us","longitude":151.67,"latitude":-33.84},{"country":"ca", ...},{"country":"nz", ...}]

接收讯息

在客户端,我们使用Java脚本函数来打开新的WebSocket连接:

//Open a new WebSocket connection
//Invoked on page load 
function connectSocket() {  websocket = new WebSocket(getWSUri());    websocket.onmessage = onMessage;   
}

当消息到达时,我们将遍历一系列船只,并为每条船只在地图上添加一个标记:

function onMessage(evt) {var boats = JSON.parse(evt.data);for (i=0; i<boats.length; i++) {markBoat(boats[i]);  }   
}function markBoat(boat) {var image = '../resources/images/'+boat.country+'.png';var latLng = new google.maps.LatLng(boat.latitude,boat.longitude);  mark = new google.maps.Marker({position: latLng,map: map,title: boat.country,icon: image});
}

您可以在此处了解如何将Google地图集成到您的应用程序中。

运行帆船赛

为了模拟现场表演,我们使用ScheduledExecutorService 。 我们将每秒更新一次GPS坐标,并将更新广播给所有用户:

private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
private ScheduledFuture<?> runHandle;//Schedule a new regatta on Start button click
public void startRegatta(ActionEvent actionEvent) {//Cancel the previous regattaif (runHandle != null) {runHandle.cancel(false);  }            runHandle = scheduler.scheduleAtFixedRate(new RegattaRun(), 1, 1, TimeUnit.SECONDS); 
}public class RegattaRun implements Runnable {private final static double FINISH_LONGITUDE = 18;private final Regatta regatta = new Regatta();//Every second update GPS coordinates and broadcast//new positions of the boatspublic void run() {            regatta.move();MessageEndPoint.sendRegatta(regatta);           if (regatta.getLongitude() >= FINISH_LONGITUDE) {runHandle.cancel(true);       }}
}

赌你的船

最后,我们的工作结果如下所示:

屏幕截图2014年10月7日下午5.24.01
本文的示例应用程序需要JDeveloper 12.1.3。 玩得开心!

而已!

翻译自: https://www.javacodegeeks.com/2014/10/using-java-api-for-websockets-in-jdeveloper-12-1-3.html

.jdeveloper

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339139.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么程序员需要关心顺序一致性,而不是 Cache 一致性?

本文所讨论的计算机模型是Shared Memory Multiprocessor&#xff0c;即我们现在常见的共享内存的多核CPU。本文适合的对象是想用C 或者Java进行多线程编程的程序员。本文主要包括对Sequential Consistency和Cache Coherence的概念性介绍并给出了一些相关例子&#xff0c;目的是…

canoco5冗余分析步骤_打造高性能的大数据分析平台

大数据时代&#xff0c;大数据的应用与挖掘&#xff0c;大数据的分析和决策&#xff0c;大数据在经济社会的运行轨道上发挥着愈来愈重要的作用。对于大数据分析&#xff0c;现在好多互联网金融公司和传统的商业银行、证券基金公司都非常看重。个个都想在大数据分析中获得重要信…

C 迭代器iterator的实现原理

在经典的设计模式中&#xff0c;有一种迭代器模式&#xff0c;定义为&#xff1a;提供一个对象来顺序访问聚合对象中的一系列数据&#xff0c;而不暴露聚合对象的内部表示。迭代器的主要优点如下&#xff1a;访问一个聚合对象的内容而无须暴露它的内部表示。遍历任务交由迭代器…

html如何在画布上加层,在Canvas中嵌套Html

大概是这样的&#xff0c;现在需要根据一下上传的图片以及一些输入生成图片。本来打算用imagemagick的&#xff0c;但是后来觉得这样前后端要搞两份不同的代码&#xff0c;然后imagemagick使用起来远没有canvas用起来顺手啊。So&#xff0c;最终决定就用Canvas搞定它了&#xf…

如何用illustrator做技术手册_做期货用什么技术指标分析?

来源&#xff1a;期汇股金作者&#xff1a;DC链接&#xff1a;做期货用什么技术指标分析&#xff1f;投资期货市场首先我们要有一套自己的技术分析&#xff0c;那么我们有什么样的技术指标分析最准确呢&#xff0c;没有最准确的技术指标&#xff0c;要看你运用的程度&#xff0…

根据字符串自动构造对应类

问题的起因是&#xff0c;我在做一个demo&#xff0c;有一个对象基类&#xff0c;以及一堆派生出的子对象&#xff0c;比如球体、立方体之类的对象。还有一个对象管理类&#xff0c;用于存储场景中的所有对象。那么在初始化的时候&#xff0c;代码是这么写的&#xff1a;class …

.sql文件如何执行_mysql:一条SQL查询语句是如何执行的?

本篇文章将通过一条 SQL 的执行过程来介绍 MySQL 的基础架构。首先有一个 user_info 表&#xff0c;表里有一个 id 字段&#xff0c;执行下面这条查询语句&#xff1a;select * from user_info where id 1;返回结果为&#xff1a;-------------------------------------------…

jooq和jdbc_在jOOQ之上构建的RESTful JDBC HTTP服务器

jooq和jdbcjOOQ生态系统和社区正在持续增长。 我们个人总是很高兴看到基于jOOQ构建的其他开源项目。 今天&#xff0c;我们非常高兴为您介绍BjrnHarrtell结合REST和RDBMS的一种非常有趣的方法。 BjrnHarrtell从小就是瑞典的程序员。 他通常在Sweco Position AB上忙于编写GIS系…

C 虚函数表及多态内部原理详解

C 中的虚函数的作用主要是实现了多态的机制。关于多态&#xff0c;简而言之就是用父类型别的指针指向其子类的实例&#xff0c;然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”&#xff0c;这是一种泛型技术。虚函数表每个含有虚函数的类都…

numpy 平方_NumPy入门指南

本文介绍了NumPy的基础知识&#xff0c;NumPy是使用Python进行科学计算的软件包。我们将在此处介绍几类基本的数组操作&#xff1a; 创建NumPy数组 重塑数组 NumPy的数学运算 数组的索引和切片 遍历数组首先&#xff0c;让我们将NumPy导入为np。 这使我们可以使用快捷方式np来引…

android 揭示动画_揭示垃圾收集暂停的时间长度

android 揭示动画有几种方法可以改善您的产品。 一种这样的方法是仔细跟踪用户的体验并在此基础上进行改进。 我们确实自己应用了此技术&#xff0c;并再次花了一些时间查看不同的数据 除了我们追求的许多其他方面之外&#xff0c;我们还提出了一个问题“延迟GC触发应用程序的…

10 张程序员喜爱的壁纸,需要自取~

喜欢的话就请点个再看&#xff0c;分享到朋友圈吧~

iptables 开放远程_JavaWeb项目的部署以及远程调试

不点蓝字&#xff0c;我们哪来故事&#xff1f;Linux环境下软件的安装Linux环境下的程序的安装、更新、卸载和查看。rpm 命令&#xff1a;相当于windows程序的添加/卸载程序&#xff0c;进程程序的安装&#xff0c;查看&#xff0c;卸载。本地程序安装&#xff1a;rpm -ivh 程序…

java 性能调优_Java性能调优调查结果(第一部分)

java 性能调优我们在2014年10月进行了Java性能调优调查。该调查的主要目的是收集对Java性能世界的见解&#xff0c;以改善Plumbr产品。 但是&#xff0c;我们也很高兴与您分享有趣的结果。 我们收集的数据为进行冗长的分析提供了素材&#xff0c;因此我们决定将结果划分为一系列…

通过反汇编来理解restrict关键字

一次难忘的面试经历多年前&#xff0c;一次互联网某厂实习生的面试题&#xff0c;题目的代码片段很简单&#xff0c;如下&#xff1a;1 #include 2 int main()3 {4 int *restrict pInt (int*)malloc(4);5 int *pNewInt pInt;6 return 0;7 } 12345678面试官问…

python车牌识别系统开源代码_汽车牌照识别系统【YOLO+MLP】

车牌识别系统可以自动检测并识别图像中的车辆牌照&#xff0c;其算法主要包括牌照定位、牌照分割、字符识别等步骤。本文将给出一种基于深度学习的车牌识别系统方案。要快速掌握开发人工智能系统的技能&#xff0c;推荐汇智网的 机器学习系列在线课程由于可以自动地从视频图像中…

js text 和 html,JS DOM innerText和textContent的区别

innerText和textContent很多人会困惑&#xff0c;因为都可以用来获取文本内容&#xff0c;实际上&#xff0c;两者还是有很多区别的&#xff0c;本文就将介绍这两个属性的异同&#xff0c;希望可以对大家的学习有所帮助。一、之前错误的认识innerText IE6就开始支持&#xff0c…

如何用耳机翻页_游戏耳机的经典之作—罗技(G)Astro A40体验

前言经常去网吧玩游戏的朋友&#xff0c;在家玩如果没有头戴式耳机&#xff0c;那体验真的会差一大截。优秀的电竞游戏耳机会带来更好的游戏体验&#xff0c;不仅是舒适性。像绝地求生这类FPS游戏&#xff0c;游戏耳机会让听声辩位更容易更精确。最近因为大促降价入手的罗技&am…

我改了500个Bug,但是!!

IT程序猿 微博网友评论&#xff1a;空白一页blank&#xff1a;不写bug怎么改bug 抠Bee&#xff1a;不经意间病毒都出来了我在海的这边你在哪里丫&#xff1a;好了&#xff0c;发给开发小弟了富贵小小神仙&#xff1a;要不然呢&#xff0c;那些从开发到维护的程序员不都是靠这么…

globalmapper如何选取图像上的点_OpenCV 进阶应用,用编程手段搞定图像处理

在我们生活中&#xff0c;常见的图像处理软件有Adobe Photoshop、Adobe Illustrator等。然而&#xff0c;并非只有软件才能实现图像处理&#xff0c;通过编程手段也是能实现的&#xff01;通过编程手段实现图像处理&#xff0c;也就是计算机视觉。所谓计算机视觉&#xff0c;就…