针对IoT应用程序更新了Oracle Java Card

Java Card是一种软件技术,可在安全硬件和软件服务之间提供隔离

Oracle的Java Card平台为智能卡和有限内存设备应用程序提供安全保护,增加了对3.1版物联网的支持。

Java Card是一种软件技术,可在安全硬件和软件服务之间提供隔离。使用Java Card的典型硬件平台包括嵌入式安全元件,智能卡芯片和带有通用CPU的安全系统。可以提供敏感材料,例如加密密钥。开发套件是免费的,但使用Java Card的制造商必须获得使用该技术的付费商业许可。

[阅读InfoWorld评论:亚马逊将开发人员简化为物联网。| Azure为.Net开发人员带来物联网。| 使用InfoWorld的云计算报告时事通讯了解云计算事件。]
Java Card 3.1支持开发可在各种物联网安全硬件上移植的安全服务。可扩展的I / O模型允许应用程序通过各种物理层和应用程序协议直接与连接的外围设备交换数据。新版本还引入了API和更新的加密功能,以解决物联网安全问题,并协助设计安全应用程序,包括设备证明。

Java Card 3.1的扩展文件格式简化了应用程序部署,代码升级和维护。API增强功能可提高应用程序的开发人员生产力和内存效

Java Card 3.1引入了四种安全服务:

用于管理资源受限设备的可信密钥的证书API。
密钥派生API,用于保护敏感数据。
一个单调的计数器API,以避免重播攻击。
用于时间戳的系统时间API

Java满足Kubernetes和无服务器计算

Red Hat的beta Quarkus框架旨在优化分布式应用程序架构的Java开发

Red Hat希望通过提供适用于Kubernetes和无服务器环境的工具,将Java引入更现代的计算范例。

目前处于测试阶段,Red Hat的开源Quarkus 框架针对的是容器优先的云原生世界。它使用统一的反应式和命令式编程模型来处理分布式应用程序体系结构,如微服务和无服务器。在无服务器环境中运行Java可能具有挑战性,在无服务器环境中,按需调用计算服务。

[开发人员指南:无服务器计算:AWS vs. Google Cloud与Microsoft Azure。| 然后了解 如何使用Microsoft的Azure功能以及如何使用AWS Lambda进行无服务器计算。]
红帽说Quarkus将提供:

快速启动,在几十毫秒的范围内,并自动缩放容器上的微服务。
功能即服务(FaaS)和现场执行。
低内存利用率,有助于在需要多个容器的微服务架构部署中优化容器密度。
较小的应用程序和容器映像占用空间
配置通过单个属性文件完成。Red Hat称,代码简化了80%的常用用法,并为其他20%的案例提供了灵活性。Quarkus使用的库包括Eclipse MicroProfile和Vert.x,JPA / Hibernate,JAX_RS / RestEasy和Netty。Quarkus为第三方框架作者提供了扩展框架,以扩展Quarkus。

。Quarkus使用Oracle的GraalVM虚拟机编译为本机二进制文件,与运行在JVM上的传统应用程序相比,应用程序能够以更少的RAM运行并且启动速度更快,从而有利于无服务器部署。

使用Quarkus进行开发需要Java IDE,JDK 8或更高版本,Apache Maven 3.5.3或更高版本,以及本机应用程序GraalVM。应用程序在Maven POM XML文件中定义。

Gluon出货JavaFX 12

Java富客户端应用程序平台的临时发布提供了一长串错误修复

移动解决方案提供商Gluon发布了JavaFX 12,这是该公司第二版Java富客户端技术,因为JavaFX与JDK(Java开发工具包)分离。

[ 15个Java框架,为开发人员提供了帮助。• 哪些工具支持Java的新模块化功能。| 使用InfoWorld的App Dev Report简报了解编程中的热门话题。]
JavaFX 12遵循Gluon于2018年9月发布的JavaFX 11.JavaFX 12运行时可用作特定于平台的SDK,作为JMOD归档文件,以及Maven Central存储库中的一组工件。JavaFX 12的主要功能包括:

用于子类化的新的受保护VirtualFlow方法。
实现WebView的加速组合。
在GraphicsContext中添加API以控制图像平滑。
重新引入JFR(Java Flight Recorder)脉冲记录器。
重构javafx.swing实现以删除不需要的抽象层。
使用xdg-open工具获取Linux系统上的默认Web浏览器。
支持鼠标前进和后退按钮。
JavaFX 12版本还修复了许多错误,例如Ubuntu 16.04和Debian 9上的模糊字体问题,以及MacOS X上的慢速鼠标滚动。在JavaFX 13发布之前,JavaFX 12将支持六个月.JavaFX 11是目前的长期支持发布。

JavaFX是由Sun Microsystems于2007年5月创建的富媒体技术。该项目于2010年甲骨文收购Sun时转移到Oracle。一年前,Oracle决定将JavaFX与JDK分离 ,以便更容易采用并吸引新的参与者开发。

您可以从Gluon JavaFX项目网站下载JavaFX 12。JavaFX是根据GPL v2 plus Classpath许可的。

OpenJDK提案解决了新功能关键字的匮乏问题

为了兼容性和可读性,Java增强提议包含带连字符的关键字

OpenJDK语言增强提议建议使用带连字符的关键字来表示新功能,目的是确保兼容性和可读性,因为合适的关键字令牌变得越来越稀缺。

关键字管理的Java增强提议草案指出,Java语言中的新功能通常需要新的关键字,但新的关键字可能会破坏现有程序。为了平衡可读性和兼容性,可以使用新类型的关键字,即带连字符的关键字,它是标识符和预先存在的关键字的组合。举的例子是non-final,break-with和s hort-circuit。

[新的Java即将到来!了解Jakarta EE企业Java路线图。| 新的Java版本在这里!了解你需要知道的一切有什么用Java JDK 11的新功能和什么的Java EE 8的新功能。| 使用InfoWorld的App Dev Report简报了解编程中的热门话题。]
关键字是一系列的ASCII字符,如class,else和int-即开发者不得在Java程序标识符来使用。Java使用一小组关键字来表示基本语言功能。关键字管理提议不提出任何新的Java语法元素或Java语法优化,以便编译器开发人员轻松实现。该提案有以下目标:

探索Java语言设计者的语法选项以表示新功能。
解决关键字令牌的“永久”问题,这些问题变得恐慌和昂贵,使语言设计者限制或破坏Java编程模型以适应可用的关键字。
向语言设计师提供适合不同功能的关键字样式。
该提案指出Java设计人员面临的挑战是,为Java 1.0功能构思的关键字很少适用于新功能。该提案确实存在风险,因为一些开发人员可能不喜欢带连字符的关键字,而其他人可能会接受这个想法,但不喜欢针对特定语言功能而出现的带连字符的建议。预计这种风险会随着时间的推移而减少。

关键字提案目前不针对包含它的特定Java版本。该提案紧随其后的另一个Java增强提议,即在Java中引入记录和密封类型。

Ruby语言升级改进了垃圾收集,模式匹配

Ruby 2.7的预览版还包括REPL的增强功能和实验性即时编译器

Ruby 2.7是Ruby编程语言的最新升级,现在正在预览版中。Ruby 2.7带来了垃圾收集,模式匹配和REPL(read-eval-print-loop)方面的改进。

[Git essentials:开始使用Git版本控制。• Git和GitHub的20个基本指针。| 使用InfoWorld的App Dev Report简报了解编程中的热门话题。]
一般版本计划于2019年12月发布.Ruby预览版中的新版本是压缩垃圾收集,用于对碎片化的内存空间进行碎片整理。该GC.compact方法压缩堆中的对象,以便使用更少的页面。Ruby开发团队的成员解释说,一些多线程Ruby程序可能会导致内存碎片,从而导致高内存利用率和速度下降。

Ruby 2.7.0的其他改进包括:

一种实验模式匹配功能,可以遍历给定对象,并在匹配模式时分配值。模式匹配广泛用于函数式编程语言。
irb交互式Ruby shell 现在支持多行编辑。还提供了与Ruby文档系统rdoc的集成。有了 irb,开发人员可以显示类,方法或模块的引用。此外,binding.irb现在对核心类对象显示的源行和检查结果进行着色。
对于仍在实验中的实时即时(JIT)编译器,首先在Ruby 2.6中引入,当优化失效时,JIT-ed代码被重新编译为优化程度较低的代码。此外,当方法被认为是纯粹时,执行方法内联。但是,许多方法尚未被认为是纯粹的。
一个Enumerable#tally 计数的每个元素的发生。
方法参考运算符.:包括在实验基础上。
作为实验特征引入的还有编号参数作为默认块参数。
您可以从ruby-lang.org 下载Ruby 2.7的预览版本以及Ruby的稳定版本。

Google App Engine添加了Java 11运行时

Beta版本允许开发人员访问Google PaaS上最新的Java长期支持版本

Google已将Java 11添加为App Engine上的第二代运行时,App Engine是Google Cloud上完全托管的平台即服务。App Engine上的第二代运行时允许开发人员使用受支持语言的任何版本,框架,库或二进制文件,而第一代运行时严格限制这些。

Java 11目前在App Engine的beta阶段提供,允许用户访问用于部署无服务器应用程序的最新长期支持版本的标准Java。Java 11的第二代App Engine运行时基于gVisor容器沙箱,它有助于为容器提供安全隔离。运行时还处理安全任务,例如应用程序和操作系统安全补丁和更新。

使用Java 11 JDK,开发人员可以使用诸如带有var关键字的高级类型推断等功能,并使用不可变集合创建列表或映射。HttpClient支持可以调用远程主机。开发人员还可以使用Java 9中引入的Java平台模块系统。但是,Java 11运行时不再提供基于servlet的运行时。因此,开发人员需要以可执行JAR的形式将服务器与其应用程序捆绑在一起。

此外,第二代运行时意味着开发人员可以使用他们的框架和选择的类以及Spring Boot或Vert.x等技术。还支持本机依赖项,​​以及Groovy,Kotlin和Scala等替代JVM语言。

App Engine上的部署是使用app.yaml文件完成的,开发人员指定该文件runtime: java11。通过指定一个额外的entrypoint参数app.yaml,开发人员可以自定义Java命令标志。开发人员可以在Google Cloud上免费试用Google App Engine。谷歌本周还宣布了Go 1.12(golang)和PHP 7.3的第二代运行时。

NetBeans 11.1增加了Java EE 8支持

季度NetBeans版本为Maven和Gradle应用程序带来了Java EE 8支持,更新了与Payara和GlassFish的集成

Apache NetBeans 11.1是集成开发环境的新季度发布周期中的第一个版本,它建立在对企业Java的长期支持之上。

NetBeans 11.1于2019年7月22日发布,为基于Maven和基于Gradle的Web应用程序提供 Java EE(企业版)8支持,允许将它们部署到Java EE 8容器。NetBeans 11.1还与Payara(GlassFish Java服务器的替代品)和GlassFish 5.01集成。

[新的Java即将到来!了解有关Java JDK 13中新功能的所有信息。| 了解Jakarta EE企业Java路线图。| 使用InfoWorld的App Dev Report简报了解编程中的热门话题。]
NetBeans Java代码编辑器支持新的Java语言功能,包括切换表达式和Java启动程序的增强功能,以支持单文件源代码程序。在Java Development Kit(JDK)12中以预览形式引入了切换表达式.NetBeans 11.1还集成了JavaFX的Gluon OpenJFX示例。

Other new and improved capabilities in NetBeans 11.1 include:

初始支持Java的内联参数名称提示。
抛光Gradle HTML UI。
为Gradle引入Java前端应用程序向导。
Kotlin .kt文件的语法着色。
为TextMate语法添加Java级别注册。
作为Java开发阶段的主要产品以及Eclipse的IDE,NetBeans 11.1是自项目离开Apache孵化器阶段以来首次发布的Apache NetBeans。Apache已经开始了NetBeans的季度发布周期,该组织从Oracle手中接管了该版本。

在哪里下载NetBeans
您可以从netbeans.apache.org 下载NetBeans 11.1。

什么是多线程的滑动条件?

Slipped Condition是一种特殊类型的竞争条件,可以在多线程应用程序中发生。在此,线程在读取条件之后执行与之相关的活动之前被暂停。它很少发生,但是,如果结果不符合预期,就必须寻找它。

例如:假设有两个线程A和线程B这要处理一个串S。首先,启动线程A,它检查是否还有剩余要处理的字符,最初整个字符串可用于处理,因此条件为真。现在,线程A被挂起并且线程B开始。它再次检查条件,其计算结果为true,然后处理整个字符串S.现在,当线程A再次开始执行时,字符串S在此时被完全处理,因此发生错误。这被称为滑倒条件。

publicclassMain { publicstaticvoidmain(String[] args) { ReadingThread readingThread = newReadingThread(); SlippedThread slippedThread = newSlippedThread(); slippedThread.start(); readingThread.start(); } } classCommonResource { staticfinalString string = "Hello"; staticintpointerPosition = 0; } // Thread to demonstrate a slipped condition classSlippedThread extendsThread { @Overridepublicvoidrun() { // Check if any characters // are left to process if(CommonResource.pointerPosition != CommonResource.string.length()) { System.out.println("Characters left! "+ "I can process the string"); // Cause the thread to wait to cause // a slipped condition try{ synchronized(this) { wait(500); } } catch(InterruptedException e) { System.out.println(e); } try{ while(CommonResource.pointerPosition < CommonResource.string.length()) { System.out.println("Thread1 "+ CommonResource.string .charAt( CommonResource .pointerPosition)); CommonResource.pointerPosition++; } } catch(StringIndexOutOfBoundsException e) { System.out.println("\nNo more character left"+ " to process. This is a"+ " slipped condition"); } } } } // Thread to process the whole String classReadingThread extendsThread { @Overridepublicvoidrun() { System.out.println("Thread2 trying to "+ "process the string"); while(CommonResource.pointerPosition < CommonResource.string.length()) { System.out.print("Thread2 "+ CommonResource.string .charAt( CommonResource .pointerPosition)); CommonResource.pointerPosition++; } } }

输出:

剩余字符!我可以处理字符串
Thread2试图处理字符串
Thread2 H.
Thread2 e
Thread2 l
Thread2 l
Thread2 o
没有更多的角色可以处理了。这是一个滑坡的条件

Slipped Conditions问题的解决方案非常简单明了。检查条件后线程将要访问的任何资源必须由线程锁定,并且只应在线程执行工作后释放。必须同步所有访问权限

对于上面的问题,可以通过锁定CommonResource类的String对象来消除滑动条件。在这种情况下,线程首先获得访问权并锁定String,然后尝试处理String。

publicclassMain { publicstaticvoidmain(String[] args) { ReadingThread readingThread = newReadingThread(); SlippedThread slippedThread = newSlippedThread(); slippedThread.start(); readingThread.start(); } } classCommonResource { staticfinalString string = "Hello"; staticintpointerPosition = 0; // A static variable added // to lock the String object staticbooleanisLocked = false; } // Thread to demonstrate a slipped condition classSlippedThread extendsThread { @Overridepublicvoidrun() { // Check if any characters // are left to process if(CommonResource.isLocked != true&& CommonResource.pointerPosition != CommonResource.string.length()) { System.out.println("Characters left! "+ "I can process the string"); CommonResource.isLocked = true; // Cause the thread to wait to cause // a slipped condition try{ synchronized(this) { wait(250); } } catch(InterruptedException e) { System.out.println(e); } try{ while(CommonResource.pointerPosition < CommonResource.string.length()) { System.out.println("Thread1 "+ CommonResource .string.charAt( CommonResource .pointerPosition)); CommonResource.pointerPosition++; } } catch(StringIndexOutOfBoundsException e) { System.out.println("\nNo more character "+ "left to process. This is "+ "a slipped condition"); } CommonResource.isLocked = false; } } } // Thread to process the whole String classReadingThread extendsThread { @Overridepublicvoidrun() { System.out.println("Thread2 trying to"+ " process the string"); if(CommonResource.isLocked == false) { CommonResource.isLocked = true; synchronized(this) { while(CommonResource.pointerPosition < CommonResource.string.length()) { System.out.println("Thread2 "+ CommonResource.string .charAt( CommonResource .pointerPosition)); CommonResource.pointerPosition++; } } } CommonResource.isLocked = false; } }

产量

剩余字符!我可以处理字符串
Thread2试图处理字符串
Thread1 H.
Thread1 e
Thread1 l
Thread1 l
Thread1 o

在上面的程序中,一个新的静态布尔成员isLocked被添加到CommonResource类中。现在,每当线程尝试处理字符串时,它首先获取锁定然后对其进行处理。在这个例子中,SlippedCondition线程检查是否isLocked为假且有串留待处理。如果是,则获取锁定然后等待并最终处理该字符串。同时,ReadingThread尝试处理字符串,但它不能作为isLocked被设置为true SlippedThread