OpenShift v3:使用WildFly和MySQL的Java EE 7入门

openshift起源 OpenShift是Red Hat的开源PaaS平台。 OpenShift v3 (将于今年发布)将提供使用Docker和Kubernetes运行微服务的整体体验。 以经典的Red Hat方式,所有工作都在OpenShift Origin的开源中完成。 这也将推动OpenShift Online和OpenShift Enterprise的下一个主要版本。

OpenShift v3使用了一个新的平台堆栈,该平台使用了Red Hat贡献的大量社区项目,例如Fedora,Centos,Docker,Project Atomic,Kubernetes和OpenStack。 结合了Docker,Kubernetes,Atomic和更多内容的OpenShift v3平台详细解释了该平台堆栈。

开放移位堆栈

该技术提示将说明如何开始使用OpenShift v3,让我们开始吧!

OpenShift v3入门

可以从GitHub的Origin下载用于OpenShift v3的预构建二进制文件。 但是,最简单的入门方法是将OpenShift Origin作为Docker容器运行。

OpenShift Application Lifecycle提供了从头开始运行示例应用程序所需的完整详细信息。 本博客将使用这些步骤,并使它们适应于在Mac上使用boot2docker VM运行。 在此过程中,我们还将在WildFly上部署Java EE 7应用程序,该应用程序将访问单独的MySQL容器上的数据库。

这是我们的部署图:

techtip73-openshift-v3-wildfly-mysql部署

  • WildFly和MySQL在不同的Pod上运行。
  • 它们每个都包装在Replication Controller中,以简化扩展。
  • 每个复制控制器均作为服务发布。
  • WildFly与MySQL服务对话,而不是直接与pod对话。 这一点很重要,因为Pod和分配给它们的IP地址都是短暂的。

让我们开始吧!

配置Docker守护程序

  1. 在主机上配置Docker守护程序以信任将要启动的Docker注册表服务。 该注册表将用于推送映像以进行构建/测试/部署。
    • 以以下方式登录到boot2docker VM:
      boot2docker ssh
    • 编辑档案
      sudo vi /var/lib/boot2docker/profile

      这将是一个空文件。

    • 添加以下名称/值对:
      EXTRA_ARGS="--insecure-registry 172.30.17.0/24"

      保存文件,然后退出编辑器。

    这将指示Docker守护程序信任172.30.17.0/24子网中的任何Docker注册表。

查看OpenShift v3和Java EE 7示例

  1. 下载并安装Go并设置GOPATH和PATH环境变量 。 签出OpenShift原始目录:
    openshift> git clone https://github.com/openshift/origin.git
    Cloning into 'origin'...
    remote: Counting objects: 21451, done.
    remote: Compressing objects: 100% (76/76), done.
    remote: Total 21451 (delta 26), reused 15 (delta 1)
    Receiving objects: 100% (21451/21451), 35.11 MiB | 1.24 MiB/s, done.
    Resolving deltas: 100% (11392/11392), done.
    Checking connectivity... done.

    请注意其检出的目录。 在这种情况下,它的〜 /workspaces/openshift

    构建工作空间:

    make release
    origin> make release
    rm -rf _output Godeps/_workspace/pkg
    hack/build-release.sh
    Unable to find image 'openshift/origin-release' locally
    Pulling repository openshift/origin-release
    c59f040a4054: Download complete 
    511136ea3c5a: Download complete 
    5b12ef8fd570: Download complete 
    dade6cb4530a: Download complete 
    bd195712b86c: Download complete 
    4aae29c1c846: Download complete 
    d8738da3ed4c: Download complete 
    7f7491063665: Download complete 
    b5cfa9eebdb5: Download complete 
    2f6297477756: Download complete 
    dc98bd93df2f: Download complete 
    1be2a7550a3d: Download complete 
    42fd088f8c55: Download complete 
    b6f6ad4012df: Download complete 
    Status: Downloaded newer image for openshift/origin-release:latest
  2. 检出已转换为Kubernetes应用程序的javaee7-hol工作区 :
    origin> git clone https://github.com/bparees/javaee7-hol
    Cloning into 'javaee7-hol'...
    remote: Counting objects: 1159, done.
    remote: Compressing objects: 100% (49/49), done.
    remote: Total 1159 (delta 35), reused 37 (delta 21)
    Receiving objects: 100% (1159/1159), 20.35 MiB | 1.78 MiB/s, done.
    Resolving deltas: 100% (605/605), done.
    Checking connectivity... done.

    这也可以在~/workspaces/openshift目录中完成。

启动OpenShift v3容器

  1. 将OpenShift Origin作为Docker容器启动:
    ~> docker run -d --name "openshift-origin" --net=host --privileged \-v /var/run/docker.sock:/var/run/docker.sock  \-v /Users/arungupta/workspaces/openshift:/workspaces/openshift \-v /usr/local/bin/docker:/usr/bin/docker \openshift/origin start --public-master=$(boot2docker ip)The VM's Host only interface IP address is: 0ae85091e7ad7e85697575369f008273a6673d112b49860f5557a61d9e82d908

    注意~/workspaces/openshift目录在容器中作为/workspaces/openshift卷挂载。 还安装了一些其他卷。

    检查容器是否正在运行:

    ~> docker ps
    CONTAINER ID        IMAGE                    COMMAND                CREATED             STATUS              PORTS               NAMES
    0ae85091e7ad        openshift/origin:beta1   "/usr/bin/openshift    2 minutes ago       Up 2 minutes                            openshift-origin
  2. 以以下方式登录到容器:
    openshift> docker exec -it `docker ps | grep origin:beta1 | awk '{ print $1 }'` bash
    [root@boot2docker openshift]#
  3. 通过提供以下命令在容器中安装Docker注册表:
    export CERT_DIR=/var/lib/openshift/openshift.local.certificates/openshift-client && \
    export KUBECONFIG=/var/lib/openshift/openshift.local.certificates/admin/.kubeconfig && \
    cd /workspaces/openshift/origin && hack/install-registry.sh
  4. 通过获取Pod列表来确认注册表正在运行:
    [root@boot2docker origin]# osc get pods
    POD                       IP                  CONTAINER(S)         IMAGE(S)                    HOST                    LABELS                                                                                                             STATUS
    docker-registry-1-gfkbz   172.17.0.14         registry-container   openshift/docker-registry   boot2docker/127.0.0.1   deployment=docker-registry-1,deploymentconfig=docker-registry,name=registrypod,template=docker-registry-template   Running

    osc是OpenShift Client CLI ,可用于创建和管理OpenShift项目。 一些kubectl命令也可以使用此脚本。

  5. 确认注册表服务正在运行。 请注意,实际IP地址可能会有所不同:
    [root@boot2docker origin]# osc get services
    NAME                LABELS                                    SELECTOR            IP                  PORT
    docker-registry     template=docker-registry-template         name=registrypod    172.30.17.142       5001
    kubernetes          component=apiserver,provider=kubernetes   <none>              172.30.17.2         443
    kubernetes-ro       component=apiserver,provider=kubernetes   <none>              172.30.17.1         80
  6. 确认注册表服务可访问:
    curl `osc get services docker-registry -o template --template="{{ .portalIP}}:{{ .port }}"`

    并寻找输出:

    "docker-registry server (dev) (v0.9.0)"

访问OpenShift v3 Web控制台

  1. OpenShift Origin服务器现在已启动并正在运行。 使用boot2docker ip查找主机的IP地址,然后打开http:// <boot2docker主机的IP地址>:8444在浏览器中查看OpenShift Web控制台,例如,可通过https://192.168.59.103:8444访问该控制台/在这台机器上。

    techtip73-openshift-origin-browser-cert-1007x1024

    您需要让浏览器在https://<host>:8444处接受证书,然后控制台才能查询OpenShift API。 当然,使用合法证书就不需要这样做。

  2. 出现OpenShift Origin登录屏幕。 输入用户名/密码作为admin / admin:

    techtip73-openshift-起源登录屏幕

    然后点击“登录”按钮。 默认的Web控制台如下所示:

    techtip73-openshift-v3-默认登录屏幕

创建OpenShift v3项目

  1. 在OpenShift v3容器中使用github.com/openshift/origin/blob/master/examples/sample-app/project.json中的project.json并创建一个测试项目,如下所示:
    [root@boot2docker origin]# osc create -f /workspaces/openshift/origin/examples/sample-app/project.json 
    test

    现在刷新Web控制台将显示:

    techtip73-openshift起源测试项目

    单击“ OpenShift 3 Sample”将显示一个空的项目描述:

    techtip73-openshift-v3-空项目

  2. 请求创建应用程序模板:
    [root@boot2docker openshift]# cd javaee7-hol/
    [root@boot2docker javaee7-hol]# osc process -n test -f application-template-jeebuild.json | osc create -n test -f -
    frontend
    origin-jee-sample
    wildfly-8-centos
    jee-sample-build
    frontend
    mysql
    database
  3. Web控制台自动刷新并显示:

    techtip73-openshift-v3-javaee7-project-default

    正在运行的服务列表可以看成是:

    techtip73-openshift-v3-javaee7-project-services

建立项目

  1. 触发项目的初始构建:
    [root@boot2docker javaee7-hol]# osc start-build -n test jee-sample-build
    cee73fbc-b32d-11e4-a0f2-5282784576db
  2. 监视构建并等待状态变为“完成”(这可能需要几分钟):
    [root@boot2docker javaee7-hol]#  osc get -n test builds
    NAME                                   TYPE                STATUS              POD
    cee73fbc-b32d-11e4-a0f2-5282784576db   STI                 Running             build-cee73fbc-b32d-11e4-a0f2-5282784576db

    您可以添加–watch标志以等待更新,直到构建完成:

    [root@boot2docker javaee7-hol]#  osc get -n test builds --watch
    NAME                                   TYPE                STATUS              POD
    cee73fbc-b32d-11e4-a0f2-5282784576db   STI                 Running             build-cee73fbc-b32d-11e4-a0f2-5282784576db
    NAME                                   TYPE                STATUS              POD
    cee73fbc-b32d-11e4-a0f2-5282784576db   STI                 Complete            build-cee73fbc-b32d-11e4-a0f2-5282784576db

    等待STATUS栏显示Complete 。 设置所有组件(WIldFly,MySQL,Java EE 7应用程序)将花费几分钟。 实际上,将创建它们的新Docker映像并将其推送到较早启动的本地注册表中。

    状态更改为Complete后, Ctrl+C停止监视构建。

  3. 构建的完整日志可以看成是:
    [root@boot2docker javaee7-hol]# osc build-logs -n test cee73fbc-b32d-11e4-a0f2-5282784576db
    2015-02-13T03:10:07.065718606Z Cloning into '/tmp/sti552730161/upload/src'...
    2015-02-13T03:11:03.184576532Z I0213 03:11:03.184326       1 build.go:160] Successfully built 172.30.17.142:5001/test/origin-jee-sample
    2015-02-13T03:11:07.261489310Z The push refers to a repository [172.30.17.142:5001/test/origin-jee-sample] (len: 1)
    2015-02-13T03:11:07.261489310Z Sending image list
    2015-02-13T03:11:07.275256699Z Pushing repository 172.30.17.142:5001/test/origin-jee-sample (1 tags)
    2015-02-13T03:11:07.307836081Z Pushing
    Buffering to disk07.314345045Z Buffering to disk 1.024 kB
    2015-02-13T03:11:07.315452728Z Buffering to disk
    Pushing-13T03:11:07.323973430Z Pushing [=========================>                         ]    512 B/1.024 kB 0. . .Pushing-13T03:13:05.932725921Z Pushing [================================================>  ]  6.56 MB/6.704 MB 0
    Pushing-13T03:13:05.942989165Z Pushing [=================================================> ] 6.635 MB/6.704 MB 0
    Pushing-13T03:13:05.943025109Z Pushing [=================================================> ] 6.702 MB/6.704 MB 0
    Pushing-13T03:13:05.947665528Z Pushing [==================================================>] 6.704 MB/6.704 MB
    2015-02-13T03:13:05.953476634Z Image successfully pushed
    2015-02-13T03:13:05.953476634Z Pushing tag for rev [b0a7868377c1] on {http://172.30.17.142:5001/v1/repositories/test/origin-jee-sample/tags/latest}
  4. 检查要启动的应用程序容器:
    [root@boot2docker javaee7-hol]# osc get -n test pods    
    POD                                          IP                  CONTAINER(S)        IMAGE(S)                                                                                                     HOST                    LABELS                                                                              STATUS
    build-cee73fbc-b32d-11e4-a0f2-5282784576db   172.17.0.17         sti-build           openshift/origin-sti-builder:v0.3                                                                            boot2docker/127.0.0.1   <none>                                                                              Succeeded
    database-1-axe6d                             172.17.0.16         jee-database        mysql                                                                                                        boot2docker/127.0.0.1   deployment=database-1,deploymentconfig=database,name=database,template=jee-sample   Running
    frontend-1-pkcia                             172.17.0.20         jee-sample          172.30.17.142:5001/test/origin-jee-sample:b0a7868377c10a50b40019be70e22d040b9a2bb2d87fa3932b700494e50a4de6   boot2docker/127.0.0.1   deployment=frontend-1,deploymentconfig=frontend,name=frontend,template=jee-sample   Running

    请注意,“前端”和“数据库”窗格现在正在运行。

  5. 确定“前端”服务的IP:
    [root@boot2docker javaee7-hol]# osc get -n test services
    NAME                LABELS                SELECTOR            IP                  PORT
    frontend            template=jee-sample   name=frontend       172.30.17.115       8080
    mysql               template=jee-sample   name=database       172.30.17.75        3306
  6. 通过http:// <“前端”的IP地址>:8080 / movieplex7-1.0-SNAPSHOT可以访问应用程序。 请注意,IP地址可能(很可能会)有所不同。 在这种情况下,它将是http://172.30.17.115:8080/moviexplex7-1.0-SNAPSHOT。由于将OpenShift v3用作Docker容器时,在Mac上配置防火墙,需要进一步调试才能配置该应用程序。 在弄清楚这一点之前,您可以在boot2docker VM中执行docker docker ps以查看所有容器的列表:
    origin> docker ps
    CONTAINER ID        IMAGE                                                                                                       COMMAND                CREATED             STATUS              PORTS               NAMES
    c776cabb72f8        172.30.17.17:5001/test/origin-jee-sample:91d1b5a5ed58e1642aafbd652eba0b7eae3a0ac08c17729d205ae88204f64449   "/tmp/scripts/run"     2 hours ago         Up 2 hours                              k8s_jee-sample.7af25557_frontend-2-9ciae.test.api_12a0d77e-b3b5-11e4-81f6-5282784576db_53f91f55                      
    e7f87112c473        openshift/origin-pod:beta1                                                                                  "/pod"                 2 hours ago         Up 2 hours                              k8s_POD.9cbfdefa_frontend-2-9ciae.test.api_12a0d77e-b3b5-11e4-81f6-5282784576db_64263b61                             
    7e7579db5f82        openshift/origin-pod:beta1                                                                                  "/pod"                 2 hours ago         Up 2 hours                              k8s_POD.123cbdd6_build-e075047d-b3b4-11e4-81f6-5282784576db.test.api_e07bcdb2-b3b4-11e4-81f6-5282784576db_376c0e63   
    74082d7791ec        openshift/origin-pod:beta1                                                                                  "/pod"                 2 hours ago         Up 2 hours                              k8s_POD.123cbdd6_build-76364bb6-b3b2-11e4-81f6-5282784576db.test.api_7639e3a5-b3b2-11e4-81f6-5282784576db_f653c7fd   
    3e42dacb0da7        mysql:latest                                                                                                "/entrypoint.sh mysq   3 hours ago         Up 3 hours                              k8s_jee-database.f12628ae_database-1-bqg8v.test.api_56093bac-b3b2-11e4-81f6-5282784576db_193dddf7                    
    cb551c8cf7bf        openshift/origin-pod:beta1                                                                                  "/pod"                 3 hours ago         Up 3 hours                              k8s_POD.95f2def6_database-1-bqg8v.test.api_56093bac-b3b2-11e4-81f6-5282784576db_295fc320                             
    e8719152df42        openshift/docker-registry:latest                                                                            "\"sh -c 'echo \"$OP   3 hours ago         Up 3 hours                              k8s_registry-container.4e338487_docker-registry-1-bt49s.default.api_177a691c-b3b0-11e4-81f6-5282784576db_a6f4f83b    
    d3ecc5841c3b        openshift/origin-pod:beta1                                                                                  "/pod"                 3 hours ago         Up 3 hours                              k8s_POD.8a29deef_docker-registry-1-bt49s.default.api_177a691c-b3b0-11e4-81f6-5282784576db_ba53d62b                   
    a506222fae91        openshift/origin:beta1                                                                                      "/usr/bin/openshift    3 hours ago         Up 3 hours                              openshift-origin

    然后以以下方式登录到与前端关联的容器:

    docker exec -it `docker ps | grep origin-jee-sample | awk '{ print $1 }'` bash

    这将登录到Docker容器,您可以通过提供以下命令来检查应用程序是否已成功部署:

    bash-4.2$ curl http://localhost:8080/movieplex7-1.0-SNAPSHOT/

    这将从应用程序中打印index.html页面,该应用程序的顶部和顶部都有许可证。

    现在,一旦防火墙问题解决,此页面也将在主机Mac上也可以访问。

让我们总结一下:

  • 克隆了OpenShift Origin和Java EE 7示例存储库
  • 将OpenShift v3作为Docker容器启动
  • 加载了OpenShift v3 Web控制台
  • 创建一个OpenShift v3项目
  • 加载的Java EE 7应用程序模板
  • 触发了构建,从而部署了应用程序
  • 如果遇到问题,这里有一些故障排除技巧 。

请享用!

翻译自: https://www.javacodegeeks.com/2015/02/openshift-v3-getting-started-java-ee-7-using-wildfly-mysql.html

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

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

相关文章

mySQL日期函数并运行_mysql日期相关的函数

1、获取当前时间&#xff1a;/**获得当前日期时间(date time)函数&#xff1a;now(), 常用**/select now() fromdual;/**获取当前时间戳&#xff0c;current_timestamp或者current_timestamp()**/select current_timestamp, current_timestamp() fromdual;/**获得当前日期时间…

序列化对象C++对象的JSON序列化与反序列化探索

新手发帖&#xff0c;很多方面都是刚入门&#xff0c;有错误的地方请大家见谅&#xff0c;欢迎批评指正 一&#xff1a;背景 作为一名C开发人员&#xff0c;我始终很期待能够像C#与JAVA那样&#xff0c;可以省力的进行对象的序列化与反序列化&#xff0c;但到现在为止&#xff…

python socket udp并发_Python进阶----UDP协议使用socket通信,socketserver模块实现并发

Python进阶----UDP协议使用socket通信,socketserver模块实现并发一丶基于UDP协议的socket实现UDP协议传输数据代码如下:&#x1f447;### 客户端# -*-coding:utf-8-*-# Author:Dsimport socket# 实例化UDP协议的socket对象 ,配置参数, socket.SOCK_DGRAM(数据报)udp_clisocket.…

Java IO基准测试:Quasar与异步ForkJoinPool与ManagedBlock

“ Arien看到了我们运行的parallelStreams和ForkJoin基准测试的结果后&#xff0c;在Twitter上与我们联系。 这激起了他的兴趣&#xff0c;因此他进行了一些自己的测试&#xff0c;将Quasar纤维加入了混合物。 这是他的结果和结论。” –塔基皮&#xff08;Takipi&#xff09;A…

WP8开发札记(一)WP8应用生命周期管理

在介绍生命周期前&#xff0c;我们先了解两个相关的概念。 1、墓碑机制&#xff1a;WP8与Android采用的真后台机制不同&#xff0c;WP8采用的是墓碑机制。一旦从当前应用程序离开&#xff08;非退出&#xff09;&#xff0c;该应用会被墓碑化&#xff0c;这样可以更好的管理&am…

python类继承中构造方法_第8.3节 Python类的__init__方法深入剖析:构造方法与继承详解...

第8.3节Python类的__init__方法深入剖析&#xff1a;构造方法与继承详解一、 引言上两节介绍了构造方法的语法及参数&#xff0c;说明了构造方法是Python的类创建实例后首先执行的方法&#xff0c;并说明如果类没有重写构造方法&#xff0c;Python将会给出默认的__init__方法…

OpenShift DIY:使用Gradle构建Spring Boot / Undertow应用程序

由于此bug&#xff0c; Gradle 1.6是在OpenShift上运行的最后一个受支持的Gradle版本。 但是从Gradle 2.2开始&#xff0c;这不再是问题&#xff0c;因此使用自己动手做墨盒在OpenShift上运行最新的Gradle不再是问题。 DIY墨盒是一种实验性墨盒&#xff0c;它提供了一种在OpenS…

使用JAX-RS和Jetty创建Web服务和Rest Server

用Java创建WebService非常容易。 将其添加到ServletContainer并将其部署到嵌入式WebServer仅需要几行代码。 让我们创建一个具有两个函数的简单计算器&#xff0c;作为WebService的示例。 计算器将计算任何数量的squareRoot和平方。 它将返回一个简单的JSON响应&#xff0c;其…

maya 中使用节点连接来求余数:

绑个东西要用到求余&#xff0c;不喜欢用表达式&#xff0c;就想用节点连出来&#xff0c;找了下网上只有 镀金铆钉 在火星时代上的教程&#xff0c;不过不能下载了&#xff0c;就自己想了下&#xff0c;终于搞出来了&#xff0c;做下笔记&#xff0c;不要忘了。 求余的思路&a…

java web 登录界面案例_【JavaWeb】74:写一个登录案例

今天是刘小爱自学Java的第74天。感谢你的观看&#xff0c;谢谢你。话不多说&#xff0c;开始今天的学习&#xff1a;Java又常被称之为后台开发。什么叫后台呢&#xff1f;除了后台还有什么前台、前端后端……这些概念一大堆&#xff0c;还容易弄混。以一个三层架构的知识点来引…

7种JIRA集成可优化Java开发流程

有哪些最佳集成可以用来优化JIRA工作流程&#xff1f; 我喜欢寻找在工作流程中提高效率的方法。 看着那些小的自动化和流畅的流程&#xff0c;使我的脸上露出笑容。 我知道我并不孤单&#xff0c;偶尔花更多的时间来获得一点点提升以使其正常工作&#xff0c;而不是最终节省了我…

hive处理日志,自定义inputformat

开放环境&#xff0c;hadoop-0.20.2&#xff0c;hive-0.6 1.日志分隔符 Xml代码 2010-05-31 10:50:17|||61.132.4.82|||http://www.360buy.com/product/201185.html 2010-05-31 10:50:17|||61.132.4.82|||http://www.360buy.com/product/201185.html分隔符是“ ||| ”&#xf…

将ActiveMQ持久消息传递性能提高25倍

Apache ActiveMQ&#xff0c;JBoss A-MQ和Red Hat Apache ActiveMQ是一个非常受欢迎的开源消息传递代理&#xff0c;由创建&#xff08;和工作&#xff09; Apache Karaf &#xff0c; Apache Camel &#xff0c; Apache ServiceMix以及许多其他工具的人提供给您。 它拥有一个充…

ECMA学习小结(3)——constructor 和 prototype

每个函数都有一个prototype的属性&#xff0c;当我们以这个函数为构造函数创建实例时&#xff08;即用new的形式&#xff09;&#xff0c;创建出来的这个对象是没有prototype的属性的。以下代码为例&#xff1a;在console里进行调试cf 拥有一个prototype的属性&#xff0c;这个…

java什么是网络接口_java 网络编程 -- IP地址的表示与网络接口信息的获取(InetAddress和NetworkInterface)...

使用java进行网络程序的开发&#xff0c;可以说是一件令人愉悦的事情&#xff0c;对于用惯了C网络接口编程的人来说&#xff0c;当他们首次使用Java开发网络应用程序&#xff0c;会发现java开发网络应用是如此的简单&#xff0c;甚至仅用几分钟时间&#xff0c;您就可以学会这种…

如何使用悲观锁定修复乐观锁定竞争条件

概括 在我以前的文章中 &#xff0c;我解释了使用显式乐观锁定的好处。 然后我们发现&#xff0c;在很短的时间范围内&#xff0c;并发交易仍可以在我们当前交易被提交之前立即提交产品价格更改。 此问题可以描述如下&#xff1a; 爱丽丝拿产品 然后&#xff0c;她决定订购…

SWT外观:自定义FlatScrollBar颜色等

最近&#xff0c;我引入了一个自定义滑块控件 &#xff0c;该控件可用于改善SWT外观和更细微的视图布局的感觉。 令人高兴的是&#xff0c;该小部件似乎已经在Code Affine世界之外找到了较早的采用者 。 这导致了一些增强 &#xff0c;这些增强将在以下各节中介绍。 SWT滚动条…

java虚拟机编译_[四] java虚拟机JVM编译器编译代码简介 字节码指令实例 代码到底编译成了什么形式...

前言简介前文已经对虚拟机进行过了简单的介绍,并且也对class文件结构,以及字节码指令进行了详尽的说明想要了解JVM的运行机制,以及如何优化你的代码,你还需要了解一下,java编译器到底是如何编译你的代码的本文不是从最底层的编译原理讲解本文是针对java代码,去查看归纳总结编译…

提高性能:流的非阻塞处理

1.简介 想象一下&#xff0c;我们有一个需要访问外部Web服务的应用程序&#xff0c;以便收集有关客户端的信息&#xff0c;然后对其进行处理。 更具体地说&#xff0c;我们无法在一次调用中获得所有这些信息。 如果我们要查找不同的客户端&#xff0c;则需要多次调用。 如下图…

CDI和EJB:在事务成功时发送异步邮件

再一次问好&#xff01; :) 这次&#xff0c;我选择了一项常见任务&#xff0c;我认为大多数情况下都以错误的方式完成&#xff1a;发送电子邮件。 并非所有人都不知道电子邮件API的工作方式&#xff0c;例如JavaMail或Apache的commons-email 。 我通常看到的一个问题是&#…