cheap medications premarin 1.25mg tablets estrogen contents, cheap medications buy wellbutrin no rx needed, cheap online buy baclofen online, cheap online order flagyl er pay pal online without prescription, pharmacy cheapest where to buy buy doxycycline online, online cheap medications buy overnight delivery lasix fedex, buy cheap purchase diflucan, cheap online buy neurontin online overnight cod, cheap pharmacy fedex acyclovir overnight without a rx, order cheap what is norvasc, buying cheap buy arimidex free consultation,

存档

‘Java’ 分类的存档

Tomcat Cluster on DC/OS

2018年7月7日 没有评论

基本思路和做法:

把Tomcat放到Docker里,然后由DC/OS调度Tomcat容器集群运行、管理。

Tomcat 8 集群架构

tomcat-cluster-dcos-01

tomcat-cluster-dcos-02

https://github.com/docker-library/tomcat

https://github.com/dcos/examples/tree/master/tomcat/

先运行三个Tomcat实例

tomcat-cluster-dcos-03

通过Marathon-LB可以实现多个Tomcat节点的负载均衡。在下述示例中,我们部署3个Tomcat应用服务,每个Tomcat应用服务公开8080端口,然后通过Marathon-LB的10010端口统一对外提供服务。

多个Tomcat实例通过端口portDefinitionsHAPROXY_GROUP标签定义与Public Agent节点上的Marathon-LB进行绑定。

tomcat-cluster-dcos-04

现在已有的的HAProxy标签组

tomcat-cluster-dcos-05

给Tomcat加上标签

tomcat-cluster-dcos-06

3个Tomcat实例会重新部署。


分类: Java, Mesos & DC/OS, Web Server 标签:

OpenShift PaaS 容器云安装

2018年6月28日 没有评论

跨过Mesos直接在CentOS上部署OpenShift,由Kubernetes管理Docker集群。

参考架构

OpenShift

更多OpenShift细节>>>

使用Minishift快速部署。

$ brew install --HEAD xhyve
$ brew cask install minishift
$ brew install docker-machine-driver-xhyve
$ sudo chown root:wheel $(brew --prefix)/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve
$ sudo chmod u+s $(brew --prefix)/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve
$ minishift start
$ minishift oc-env
$ oc new-app https://github.com/openshift/nodejs-ex -l name=myapp
$ oc logs -f bc/nodejs-ex
$ oc expose svc/nodejs-ex
$ minishift openshift service nodejs-ex --in-browser
$ minishift stop

minishift start的结果

Image pull complete

OpenShift server started.

The server is accessible via web console at:

https://192.168.64.2:8443

You are logged in as:

User:     developer

Password: <any value>

To login as administrator:

oc login -u system:admin

Could not set oc CLI context for: minishift

https://192.168.64.2:8443 system/admin

正在部署一个Java应用

openshift-jee

App运行

openshift-jee-02

在192.168.0.249通过minishift的方式安装openshift,遇到以下问题:minishift Checking if Libvirt default network is active … FAIL 

通过下载其它用户提供的minishift版本,问题解决。

minishift oc-env

export PATH=”/root/.minishift/cache/oc/v3.6.0:$PATH”

存在的问题无法Pulling image openshift/origin:v3.6.0,反复minishift stop & minishift strt

或直接下载OpenShift Origin安装包直接安装。

wget https://github.com/openshift/origin/releases/download/v3.7.1/openshift-origin-server-v3.7.1-ab0f056-linux-64bit.tar.gz

ln -s openshift-origin-server-v3.7.1-ab0f056-linux-64bit /opt/openshift

vim /etc/profile

PATH=$PATH:/opt/openshift/

source /etc/profile

openshift version

openshift start

启动存在的问题

created clusterrolebinding.rbac.authorization.k8s.io/system:openshift:controller:deployer-controller

F0228 11:12:06.622842    6175 node.go:264] failed to run Kubelet: failed to create kubelet: misconfiguration: kubelet cgroup driver: “systemd” is different from docker cgroup driver: “cgroupfs”

vim /etc/docker/daemon.json

“exec-opts”: [“native.cgroupdriver=systemd”]

$ cat /etc/systemd/system/docker.service.d/override.conf
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --exec-opt native.cgroupdriver=systemd --storage-driver=overlay

OK

https://192.168.0.249:8443

dev/dev

openshift-01

openshift-02

创建本地镜像仓库

openshift-03

openshift-04

web控制面板出现

openshift-05

172.30.2.245:5000Push image出错

error: build error: Failed to push image: Get https://172.30.2.245:5000/v1/_ping:http: server gave HTTP response to HTTPS client

需修改docker的配置让docker以非https的方式连接到registry。

[root@localhost system]# vim /etc/docker/daemon.json 注意后面有,

{

“registry-mirrors”: [“https://registry.docker-cn.com“],

“insecure-registry”: [“https://172.30.0.0/16“],

“exec-opts”: [“native.cgroupdriver=systemd”]

}

修改 “insecure-registry”: [“https://172.30.0.0/16“], 为

“insecure-registries”: [“172.30.2.245:5000”],

然后 systemctl daemon-reload & systemctl restart docker

镜像发布成功

openshift-06

参考 https://github.com/openshift/origin/tree/master/examples 多实验一些例子。

使用Cockpit管理OpenShift集群和容器

openshift-07

root:123456

使用APIMan做API网关,服务治理。

http://www.apiman.io/

oc new-app apiman/on-wildfly10:1.3.1.Final 或

https://github.com/openshift/origin-apiman

传统安装 http://www.apiman.io/latest/installation-guide.html

kong拥有更多优势,使用kong

https://github.com/john-deng/kong-openshift


分类: Cloud Computing, Java, OpenShift 标签:

JVM世界,它们可更多关注

2016年4月15日 没有评论

最近拟了下要使用的语言和框架,主要以Java和Scala为核心,供大家参考。

Image Image Image Image

Image ImageImageImage

http://openjdk.java.net/ JVM世界的核心语言 OpenJDK @ 灰狐百科

http://scala-lang.org/ 面向对象的函数式编程 Scala @ 灰狐百科

https://github.com/akka/akka 高并发、容错、事件驱动基础设施 Akka @ 灰狐百科

https://github.com/playframework/playframework Java & Scala Web框架 Play @ 灰狐百科

http://spark.apache.org/ 大数据、快数据 Spark @ 灰狐百科

https://github.com/lagom/lagom 微服务框架

https://github.com/slick/slick  函数关系型映射

https://github.com/typesafehub/activator  Scala, Akka, Play 工具

此外,作为JVM世界的Lisp方言,大家重点关注Clojure。

http://wiki.huihoo.com/wiki/Clojure 了解下。

后端数据存储、数据库强力推荐 Apache Cassandra


分类: Java 标签:

在Android应用中调用RESTful服务

2012年5月14日 没有评论

REST是一个被广泛采用的架构模式,尤其在API、Web Services、云计算流行的大环境下,所有主流的互联网厂商都提供了其服务的REST接口,用户可采用JSON、XML格式使用HTTP进行方法调用和数据传输。

RESTful已成为主流客户-服务器编程模式,在手机端与后端系统的交互中也被普遍采用。

现在我们就来分析下Android环境下的RESTful编程模式和一般方法。

错误的实现方式

这个做法会导致:

  • 操作系统shutdown这个进程;
  • 数据不能持久化保存。

而正确处理REST方法通常有三种设计模式:

  • 使用 Service API
  • 使用 ContentProvider API
  • 使用 ContentProvider API 和 SyncAdapter

其中,Service Helper的作用是:

以单体(Singleton)的方式暴露一个简单的异步API给用户接口使用。

• 准备和发送服务请求

– 检测方法是否已经被挂起

– 创建请求意图

– 添加操作类型和一个唯一的请求id号

– 添加方法的特殊属性值

– 添加binder回调

– 调用startService(意图)

– 返回请求id号

• 处理从服务返回的回调

– 将回调分发给用户接口监听器

实战一下:

An attempt at implementing a RESTful Android application 开始RESTful Android应用的尝试

git clone https://github.com/jeremyhaberman/restful-android.git

在 eclipse > file > import >  Existing Projects into Workspace

Debug As Android Application,这里使用了Simple OAuth library for Java第三方库

如通过Twitter API使用OAuth验证

import com.jeremyhaberman.restfulandroid.rest.Request;

// RESTful Android Twitter app settings

private static final String TWITTER_API_KEY = “ssdfiwKoedslVjUsngtow”;

private static final String TWITTER_API_SECRET = “sdfsIkkmIKLFDvzaLdnBeLAVkwPFUxxZ9Ulf8fkY”;

private static final String TWITTER_CALLBACK_URL = “restful-android://callback”;

总结:

  • 不要在Activities里实现REST方法;
  • 从一个服务中启动长时间运行的操作;
  • 持久要早、要经常(Persist early & persist often)
  • 最大限度的减少网络使用(Minimize the network usage);
  • 是不是在关键时刻使用同步适配器执行后台操作(Use a sync adapter to execute background operations which are not time critical),使用Android Cloud to Device Messaging。

参考:


分类: Java, Mobile & Embedded 标签: ,

【Android】制作appwidget桌面相册幻灯片

2012年5月2日 没有评论

最近在学习android的appwidget,看了一些文章,决定做一个相册幻灯片来练手,下面写写过程来给大家共享:

  1. 在项目的res/xml/下建立一个appwidget_info.xml文件,内容如下:
    <?xml version=”1.0″ encoding=”utf-8″?>
    <appwidget-provider xmlns:android=”http://schemas.android.com/apk/res/android”
    android:initialLayout
    =”@layout/appwidget”
    android:minHeight
    =”800dp”
    android:minWidth
    =”240dp”
    android:updatePeriodMillis
    =”300000″ >

    </appwidget-provider>

    在这里定义appwidget的基本信息,宽度,高度,以及刷新的频率等

  2. 在layout/下建立appwidget的layout文件
    <?xml version=”1.0″ encoding=”utf-8″?>
    <LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
    android:layout_width
    =”match_parent”
    android:layout_height
    =”match_parent”
    android:gravity
    =”center”
    android:orientation
    =”vertical”
    android:padding
    =”20dp” >

    <Button
    android:id=”@+id/button1″
    android:layout_width
    =”120dp”
    android:layout_height
    =”wrap_content”
    android:layout_gravity
    =”center_horizontal”
    android:text
    =”播放图片” />

    <ImageView
    android:id=”@+id/imageView1″
    android:layout_width
    =”fill_parent”
    android:layout_height
    =”fill_parent”
    android:background
    =”#FFFF”
    android:padding
    =”2dp”
    android:scaleType
    =”fitXY”
    android:src
    =”@drawable/p1″ />

    </LinearLayout>

    这个layout比较简单,里面仅仅包含一个button和一个imageview,设置 android:padding=”2dp”来让图片有一个简单的边框样式

  3. 建立MyAppWidgetProvider继承AppWidgetProvider,重写父类的生命周期函数,这里的原理google一下有很多,就不多写了。首先重写onUpdate,这个方法在appwidget第一次加载时会被调用,在这里我们主要使用ContentResolver查询出本机所有图片;接下来新建一个PendingIntent将图片路径的集合封装到其中,最后将pendingIntent设置给button
    Intent intent = new Intent(“com.jaredluo.appwidget.change”);
    intent.putExtra(
    “path”, pathStrArr);for (int j = 0; j < appWidgetIds.length; j++由于appwidget与主程序处于不同的进程中,所以通讯都需要依靠PendingIntent。

    ) {
    //RemoteView是appwidget中很重要的一个类,基本上对appwidget中
    //所有控件的操作都要基于RemoteView来操作

    RemoteViews remoteView
    = new RemoteViews(context.getPackageName(),
    R.layout.appwidget);
    remoteView.setOnClickPendingIntent(R.id.button1, pIntent);
    appWidgetManager.updateAppWidget(appWidgetIds[j], remoteView);
    remoteView
    = null;
    }

    //设置pending,发送广播,注意设置
    //PendingIntent.FLAG_UPDATE_CURRENT
    //否则onRecieve函数中接收不到intent中的数据
    PendingIntent pIntent = PendingIntent.getBroadcast(context, 0

    , intent,PendingIntent.FLAG_UPDATE_CURRENT);
  4. 接下来在onReceive中接收我们刚才设置给button的广播,首先新开一个线程控制图片的播放,接下来在Handler中为ImageView设置图片源
    final RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.appwidget);
    String path
    = paths[msg.getData().getInt(“i”)];
    remoteViews.setImageViewBitmap(R.id.imageView1,BitmapUtil.getBitmap(path,
    200, 200));
    appWidgetManager.updateAppWidget(componentName,remoteViews);

    这里需要注意一个问题,我在把图片设置给appwidget时,跑不了几张图片就会出现!!! FAILED BINDER TRANSACTION !!!这个错误,最先以为是图片太大造成的,结果压缩图片也无果;后面在网上搜索一番发现:Binder data size limit is 512K 由于传输图片到appwidget进程中的Binder最大数据量是512k,并且RemoteView也不会每次清理,所以如果每次都使用同一个RemoteView进行传输会因为溢出而报错。最后每次都新建一个RemoteView问题才解决掉。

看看最后的效果,点击播放图片按钮,图片就开始更替:

代码还有很多问题和不完善,接下来有空会继续修改。


分类: Java, Mobile & Embedded 标签:

在 Nokia N800 上运行 OSGi

2008年3月21日 没有评论

java-and-osgi-on-n800.jpg

作者通过简单的步骤就在 Nokia N800 上运行起了 OSGi, 这里的OSGi选用了 Eclipse Equinox.

有 Nokia N800 的朋友也可实验一下.


分类: Java, Mobile & Embedded 标签: