JNBridge在java和.net跨平台交互中的使用

JNBridge在java和.net跨平台交互中的使用
JNBridge在java和.net跨平台交互中的使用

JNBridge在java和.net跨平台交互中的使用(刘明,2012-10-2)

1:JNbridge简介

JNBridge实现java和.net交互的原理是将java的jar文件转换为可供.net调用的dll文件,然后在.net平台中可直接调用。

JNBridge下载地址:https://www.360docs.net/doc/0316397373.html,。

2:实际操作

不需要填写

JAXP

准备工作:(配置)在网站注册信息(很简单),Paul Sommer会给你的邮箱发来邮件,给注册码(一个月的试用),如下,将第一行的JNBridgePro复制到那里就好。

当出现下面四行英文,说明Key是有效的,可以使用。

JNBridgePro v6.1 (.NET 2.0/3.0/3.5-targeted) trial

Copyright ? 2001-2012, JNBridge, LLC. All rights reserved.

There are 32 days left in your trial license.

License location: D:\Program Files (x86)\JNBridge\JNBridgePro v6.1\

打开JNB之后,出现如下界面,关闭即可。

2.1:将java类导出成jar文件

右键点击需要导出的java类文件,选择export,选择java——JAR file,点击next,

选择保存路径,输入jar名称,点击finish,jar文件就被成功导出到指定位置了

2.2:使用JNB Proxy工具将生产的jar文件转换成dll文件

(JNB Proxy工具分为.NET 2.0-3.0-3.5-targeted,.NET 4.0-targeted还有32位平台和64位平台4种版本,根据自身系统状况进行选择)

打开JNB Proxy工具,选择Create new .Net -> Java project,点击OK

选择Project—>Edit classpath...

点击Add...,找到需要转换成dll文件的jar文件,添加进来。如果使用了Twaver.jar或者Demo.jar也就需要将他们一并添加进去。

添加好后点击OK,然后选择Project —> Add Classes from JAR File...

找到要转换成dll文件的jar文件,即上一步Classpath中的jar文件(要转换的jar文件必须在Classpath中配置完成后再添加),然后将Environment中的包全部选中,然后点击中间的Add+

待Add+操作结束后,选中Project —> Build...

键入生成出的dll文件的名称,点击保存

等待几分钟,就可生成dll文件了。

2.3:生成的dll文件在.net中的使用

打开vs,右击项目中的“引用”,选中添加引用,把上一步中生成的dll文件添加进来

还需要将JNBridge安装路径下的JNBShare.dll和JNBSharedMem.dll添加进来

接下来配置工程的配置文件app.config,以framework2.0为例

路径根据自身机器环境进行配置。

2.4:其他操作

解压之前导出的jar包,将其中包含类文件(com文件夹)添加到该.net工程下的Java文件夹下,这样才能调用到java中的类。

将JNBridge安装路径下的rlm932_x86.dll(64位机器为rlm932_x64.dll)复制到项目文件夹的bin—>Debug和obj—>Debug中(此文件为授权文件,不添加项目无法运行)(可以先将rlm932_x86.dll、JavaEntry.dll、JavaEntry2.dll、JNBShare.dll、JNBShareMem.dll、Test.dll添

加到bin/Debug下,再将rlm932_x86.dll添加到obj/x86/Debug下,然后添加引用时就可以直接从bin/Debug导入,从而节约了时间)

2.5:将java的swing控件嵌入winform中

2.6:一个例子

Java代码:

package com;

import javax.swing.JFrame;

import java.awt.GridLayout;

import twaver.Link;

import twaver.Node;

import twaver.TDataBox;

import https://www.360docs.net/doc/0316397373.html,work.TNetwork;

public class GetANode {

public TNetwork getNetWork(){

TDataBox box = new TDataBox();

Node node1 = new Node();

node1.setLocation(100,100);

box.addElement(node1);

Node node2 = new Node();

node2.setLocation(300,300);

box.addElement(node2);

Link link = new Link(node1,node2);

box.addElement(link);

TNetwork nw = new TNetwork(box);

return nw;

}

public static GridLayout getGridlayout(){

return new GridLayout();

}

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

GetANode gan = new GetANode();

TNetwork network = gan.getNetWork();

JFrame jf = new JFrame();

jf.setSize(800, 600);

jf.add(network);

jf.setVisible(true);

jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

}

C#代码:

using System;

using System.Collections.Generic;

using https://www.360docs.net/doc/0316397373.html,ponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using com;

using com.jnbridge.embedding;

using https://www.360docs.net/doc/0316397373.html,work;

using javax.swing;

namespace WindowsFormsApplication1

{

public partial class Form1 : Form

{

//private https://www.360docs.net/doc/0316397373.html,ponentModel.IContainer components = null;

private JavaControl jc;

//private System.Windows.Forms.Panel javaHolder;

private https://www.360docs.net/doc/0316397373.html,ponentModel.IContainer components = null;

private System.Windows.Forms.Panel panel1;

public Form1()

{

InitializeComponent();

Control.CheckForIllegalCrossThreadCalls = false;

TNetwork tw = new GetANode().getNetWork();

JPanel jp = new JPanel(GetANode.getGridlayout());

jp.add(tw);

jc = new JavaControl(jp, 400,400);

panel1.Controls.Add(jc);

}

protected override void Dispose(bool disposing)

{

if (disposing && (components != null))

{

components.Dispose();

}

base.Dispose(disposing);

}

#region Windows 窗???体??设|¨¨计?器??生|¨2成¨|的ì?代?¨2码?

///

///设|¨¨计?器??支?ì持?所¨′需¨¨的ì?方¤?法¤?§ - 不?要°a

///使o1用??代?¨2码?编ਤ辑-器??修T改?此??方¤?法¤?§的ì?内¨2容¨Y。?ê

///

private void InitializeComponent()

{

this.panel1 = new System.Windows.Forms.Panel();

this.SuspendLayout();

//

// panel1

//

this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;

this.panel1.Location = new System.Drawing.Point(0, 0);

https://www.360docs.net/doc/0316397373.html, = "panel1";

this.panel1.Size = new System.Drawing.Size(685, 324);

this.panel1.TabIndex = 0;

//this.panel1.Paint += new

System.Windows.Forms.PaintEventHandler(this.panel1_Paint);

//

// Form1

//

this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);

this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;

this.ClientSize = new System.Drawing.Size(685, 324);

this.Controls.Add(this.panel1);

https://www.360docs.net/doc/0316397373.html, = "Form1";

this.Text = "Form1";

//this.Load += new System.EventHandler(this.Form1_Load);

this.ResumeLayout(false);

}

#endregion

}

}

基于Java平台的完整的WebGIS构架

文章编号:100622475(2004)0620058203 收稿日期:2003207207 作者简介:张苏(19692),男,河北宁晋人,铁道部第四勘测设计院电气化处工程师,京沪高速、宜方铁路项目负责人,研究方向:GIS 及其应用;唐伟(19732),女,湖北武汉人,中国工商银行湖北省分行科技处工程师,研究方向:GIS 及其应用。 基于Java 平台的完整的WebGIS 构架 张 苏1,唐 伟2 (1.铁道部第四勘测设计院电气化处,湖北武汉 430063;2.中国工商银行湖北省分行科技处,湖北武汉 430060) 摘要:给出了一个完整的基于Java 技术的WebGIS 框架,论述了其系统功能和开发技术,并指出了其优点。关键词:地理信息系统;国际互联网;互联网地理信息系统;Java 技术中图分类号:TP391 文献标识码:A An I ntegrated Architecture of WebGIS B ased on Java T echnology ZH ANG Su 1,T ANG Wei 2 (1.E lectrization O ffice ,The F ourth Survey &Design Institute of China Railway ,Wuhan 430063,China ; 2.Department of Science and T echnology ,Hubei Branch ,Industrial and C ommercial Bank of China ,Wuhan 430060,China )Abstract :This paper proposes an integrated WebGIS frame based on Java technology ,recounts its functions and development techniques ,and indicates its advantages. K ey w ords :geographic in formation system ;W orld Wide Web ;WebGIS;Java technology 0 引 言 地理信息系统(G eographic In formation System ,GIS ) 是一种为了获取、存储、检索、分析和显示空间定位数据而建立的计算机化的数据库管理系统,它集当代最先进的图形、图像、地质、地理、遥感、测绘、人工智能、计算机科学等技术为一体,具有地图输入、数据库管理、空间分析等功能,是当前研究的热点之一。自六十年代以来,它在全球范围内得到了广泛的重视,无论在系统理论、研究方法,还是在应用系统等方面都有着长足的发展,在未来几十年内,随着相关技术的发展和实际应用的需要,地理信息系统将向着数据标准化、数据多元化、系统集成化、系统智能化、平台网络化、应用社会化的方向发展。 1 WebGIS 的体系结构 通常情况下,WebGIS 系统主要由四部分组成:(1)WebGIS 浏览器(Browser ):WebGIS 的终端用户通过浏览器连接到远程WebGIS 站点上,浏览We 2bGIS 站点中的空间数据,制作专题图,进行各种空间 检索和空间分析等工作。作为用户界面,WebGIS 浏 览器含有的语意解释和转化机制能够方便WebGIS 用户的查询和分析。 (2)WebGIS 信息代理(In formation Agent ):WebGIS 信息反映着地理信息的数据结构,是空间信息网络化的关键部分。它介于WebGIS 浏览器和WebGIS 服务器之间,主体是信息代理机制和信息代理协议,负责定义WebGIS 浏览器与WebGIS 服务器间查询请求和响应的通讯协议,提供直接访问GIS 数据库的功能。通过消息代理机制,可以在Client/Server 结构中合理地分配各部分功能,平衡网络负载,以达到减少网络传输带宽,增大请求响应速度的目的。 (3)WebGIS 服务器(Server ):提供易于配置和管理WebGIS 的服务器,该服务器能解释中间代理请求并根 据查询请求对GIS 数据库进行空间操作,实现WebGIS 浏览器和WebGIS 服务器的动态交互。采用空间元数据库管理技术,对分布式异构的空间数据库源进行描述与索引,提供网络空间信息导航访问;结合分布式对象技术,提供对分布式超媒体GIS 数据的访问。 (4)WebGIS 编辑器(Editor ):该编辑器提供一个 计算机与现代化  2004年第6期 J IS UAN J I Y U XI ANDAIH UA 总第106期

Java

第1章 Java概述 1.1 练习 1、理解Java语言的“完全面向对象”、“解释性”、“可移植性”、“内 存动态管理”的特点。 2、搭建Java运行环境,并写一个Java程序打印出“我一定把Web程序设计学好!”; 3、理解Java程序的运行过程即JVM工作原理; 4、有一个Java源文件A.java,编译源文件和运行class文件的命令是什么? 5、修正Test1.java、Test2.java、Test3.java、Test4.java四个java源 文件中的错误,使其能够编译和运行; ① Test1.j ava源程序。 public class Test1 { public static void main(String[] args) { System.out.println("What's wrong with this program?"); } } public class TestAnother1 { public static void main(String[] args) { System.out.println("What's wrong with this program?"); } } ② Test2.java public class Testing2 { public static void main(String[] args) { System.out.println("What's wrong with this program?"); } } ③ Test3.java public class Test3 { public static void main(String args) { System.out.println("What's wrong with this program?"); } } ④Test4.java public class Test4 { public void main(String[] args) {

Java虚拟机工作原理(JVM)

As the Java V irtual Machine is a stack-based machine, almost all of its instructions involve the operand stack in some way. Most instructions push values, pop values, or both as they perform their functions. Java虚拟机是基于栈的(stack-based machine)。几乎所有的java虚拟机的指令,都与操作数栈(operand stack)有关.绝大多数指令都会在执行自己功能的时候进行入栈、出栈操作。 1Java体系结构介绍 Javaís architecture arises out of four distinct but interrelated technologies, each of which is defined by a separate specification from Sun Microsystems: 1.1 Java体系结构包括哪几部分? Java体系结构包括4个独立但相关的技术 the Java programming language →程序设计语言 the Java class file format →字节码文件格式 the Java Application Programming Interface→应用编程接口 the Java V irtual Machine →虚拟机 1.2 什么是JVM java虚拟机和java API组成了java运行时。 1.3 JVM的主要任务。 Java虚拟机的主要任务是装载class文件并执行其中的字节码。 Java虚拟机包含了一个类装载器。 类装载器的体系结构 二种类装载器 启动类装载器 用户定义的类装载器 启动类装载器是JVM实现的一部分 当被装载的类引用另外一个类时,JVM就是使用装载第一个类的类装载器装载被引用的类。 1.4 为什么java容易被反编译? ●因为java程序是动态连接的。从一个类到另一个类的引用是符号化的。在静态连接的 可执行程序中。类之间的引用只是直接的指针或者偏移量。相反在java的class文件中,指向另一个类的引用通过字符串清楚的标明了所指向的这个类的名字。

java和.net两大平台的分析及互用

摘要 在Java平台推出并发展了十多年后, Microsoft的 .net平台闪亮登场,到现在为止,也已经发展了几年了,从最初的版本发展到现在的2.0版本。java平台有着许多闪亮的地方,而后到的.net平台也有其过人之处。但是本文所关心的并不是java平台和.net 平台,谁比谁更优秀或谁是谁的终结者,而是两者各自有什么特点,如何和平共处,实现彼此之间的互用。因为两者实现互用将为软件行业带来极大的惊喜,为企业节省很大的软件投资,包括时间和成本。本文首先是对java平台和.net平台进行了一个简单的介绍,对这两个平台进行了简单的分析,并且指出了这两大平台各自的优点。接着讲述了这两大平台实现互用的必要性, 基础和所面对的挑战,然后介绍了实现互用的基本方法: 代码转换, 第三方运行时桥, xml webservice, 面向消息的中间件, 共享数据库, 集成代理程序。最后是针对互用的未来发展,讲述了一些个人的看法。毕竟现在的互用技术并不是相当的完善,还有待进一步的发展和提高。但是相信经过世人的努力,java平台和.net平台的互用将会得到更好的实现,甚至实现所谓的“完美”的结合。本文只是讲述了java 和.net 的基本知识和基本的互用实现,对于当中的许多复杂问题,如,实现单点登录(共享session),实现事务性,实现安全性……没有进行论述。 关键词: .net远程处理, java, .net, 互用, 互联网服务, xml, 消息, 序列化

ABSTRACT Java platform has born and developed for about ten years. After that, Microsoft .net was born and has developed for several years too, from the newest version to the 2.0 version. Java platform has much advantage. But the .net platform also has much advantage. This article does not care about java platform and .net platform who is whose terminator, just want to show the advantage of java platform and .net platform and how to achieve interoperability of java and .net, because if these two platforms can achieve interoperability, it will give the software industry a great surprise, save the money and time for the enterprise. This article first gives a simple introduction about java platform and .net platform, point out the advantage of both java platform and .net platform. Then, talk about the necessary, the base and the challenge of achieving interoperability between these two platforms. Code changing, third party runtime bridge, xml web service, Message-Oriented Middleware, sharing database, Integration Brokers and Orchestration are the basic methods used to achieve interoperability. At the end of this article, there is some opinion of myself about the future of the interoperability. I believe that interoperability of java and .net would be more and more perfect. In this article, some complex issues, such as sharing session, achieving transaction, security etc are not related to. Keywords:.net remoting, java, .net, Interoperability, web service, xml, message, serialization

Java的数据结构相关的类实现原理

Java的数据结构相关的类实现原理 List接口 List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。 和下面要提到的Set不同,List允许有相同的元素。 除了具有Collection接口必备的iterator()方法外,List还提供一个listIterator()方法,返回一个ListIterator接口,和标准的Iterator接口相比,ListIterator多了一些add()之类的方法,允许添加,删除,设定元素,还能向前或向后遍历。 实现List接口的常用类有LinkedList,ArrayList,Vector和Stack。 LinkedList List 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括 null)。除了实现 List 接口外,LinkedList 类还为在列表的开头及结尾 get、remove 和 insert 元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列。 此类实现 Deque 接口,为 add、poll 提供先进先出队列操作,以及其他堆栈和双端队列操作。 所有操作都是按照双重链接列表的需要执行的。在列表中编索引的操作将从开头或结尾遍历列表(从靠近指定索引的一端)。 注意,此实现不是同步的。如果多个线程同时访问一个链接列表,而其中至少一个线程从结构上修改了该列表,则它必须保持外部同步。(结构修改指添加或删除一个或多个元素的任何操作;仅设置元素的值不是结构修改。)这一般通过对自然封装该列表的对象进行同步操作来完成。如果不存在这样的对象,则应该使 用 Collections.synchronizedList 方法来“包装”该列表。最好在创建时完成这一操作,以防止对列表进行意外的不同步访问,如下所示: List list = Collections.synchronizedList(new LinkedList(...)); 此类的 iterator 和 listIterator 方法返回的迭代器是快速失败的:在迭代器创建之后,如果从结构上对列表进行修改,除非通过迭代器自身的remove 或 add 方法,其他任何时间任何方式的修改,迭代器都将抛 出 ConcurrentModificationException。因此,面对并发的修改,迭代器很快就会完全失败,而不冒将来不确定的时间任意发生不确定行为的风险。 注意,迭代器的快速失败行为不能得到保证,一般来说,存在不同步的并发修改时,不可能作出任何硬性保证。快速失败迭代器尽最大努力抛出ConcurrentModificationException。因此,编写依赖于此异常的程序的方式是错误的,正确做法是:迭代器的快速失败行为应该仅用于检测程序错误。 ArrayList

java web拦截器配置及原理

java web 过滤器 (2013-03-01 10:04:24)本人转载收藏 ServletFilter,Servlet过滤器: Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术可以对web服务器管理的所有web资源:Jsp, Servlet, 静态图片文件或静态html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL 级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。ServletAPI提供了一个Filter接口,实现这个接口的Servlet就是一个过虑器。过虑器在WEB应用访问流程中如下: 由图可见,只要我们编写了过滤器,可以对一切访问WEB应用的连接进行过滤。比如,用户访问权限、统一WEB编码… Filter是如何实现拦截的? 实现了Filter接口的Servlet是过滤器,因为Filter接口有一个 doFilter(ServletRequest request, ServletResponse response, FilterChain chain)方法,只要用户访问我们在web.xml中配置的映射目录,服务器便会调用过滤器的doFilter方法。我们在这里实现过虑功能代码,当我们调用 chain.doFilter(request, response);方法时,将请求反给服务器服务器再去调用相当的Servlet。如果我们不调用此方法,说明拒绝了用户的请求。 Filter开发入门: 在WEB应用中添加一个过滤器,有两步工作需要完成: 1.编写实现了Filter接口的Servlet——过滤器。 2.在web.xml中配置过滤器: (1). 标签添加器 (2). 注册过滤器的映射目录(过滤目录),与注册Servlet一样。 在实际WEB应用中,我们可能需要编写多个过虑器,比如:1.统一WEB编码的过滤器(过虑所有访问)2.用户访问权限管理。这样,用户的访问需要选经过过滤器1过滤然后再经过过滤器2过滤。doFilter中有一个FilterChain参数,这个参数是服务器根据web.xml中配置的过滤器,按照先后顺序生成的过滤器链。当我们在doFilter方法中调用chain.doFilter(request, response);方法时,服务器会查找过滤链中是否还有过滤器,如果有继续调用下一个过滤器,如果没有将调用相应的Servlet处理用户请求。 Filter接口的其他细节: 1.Filter的Init(FilterConfig filterConfig)方法: 与Servlet的Init方法一样,在创建时被调用,之后被保存在内存中直至服务器重启或关闭时Filter实例才会被销毁。与Servlet不同之处在于,服务器启动时就会实例化所有Filter,而Servlet中有当用户第一次访问它时才会被实例化。我们通过在web.xml使用对Filter配置的初始化参数,可以通过FilterConfig来获得。 FilterConfig的方法有: String getFilterName():得到filter的名称。

Java基础之映射表

映射表 Java类库为映射表提供了两个通用的实现:HashMap和TreeMap。这两个类都实现了Map接口。 散列映射表对键进行散列,树映射表用键的整体对元素进行排序,并将其组织成搜索树。 每当往映射表中添加对象时,必须同时提供一个键。 要想检索一个对象,必须也提供一个键。 1常见操作: V put(K key,V value)(键可以为null,但值不能为null) V get(K key) V remove(K key) boolean containsKey(Object key) 如果在映射表中应经有这个键,返回true boolean containsValue(Object value) 如果在映射表中应经有这个值,返回true size方法用于返回映射表中的元素数。 2举例: HashMapitems=new HashMap(); items.put(src.charAt(i),1); items.containsKey(src.charAt(i) 3HashMap的底层实现原理 在Java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外。HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。 一个线性的数组怎么实现按键值对来存取数据呢?这里HashMap有做一些处理。 首先HashMap里面实现一个静态内部类Entry,基本结构它包含三个类key,value和指向下一个Entity的next,我们上面说到HashMap的基

个推平台服务端API文档-Java

个推平台服务端API文档-Java

JAVA开发准备 转至元数据结尾 转至元数据起始 ? 1. 前期准备 ? 2. 环境搭建 1. 前期准备 【1】请确保您已经初始化客户端SDK,并成功取得ClientID 【2】文档以JAVA程序为例介绍了如何调用OpenService提供的HTTP服务接口,采用json作为数据传输格式 【3】HTTP上行的Json消息体最大长度为25KB 【4】请确保工程编码格式为UTF-8,否则可能导致报错:“result=sign_error” 2. 环境搭建 【1】下载服务端SDK开发工具包,目录结构如下图所示

(下载地址:https://www.360docs.net/doc/0316397373.html,/download/server/GETUI_SERVER_SDK.zip) 【2】在Eclipse中新建工程(注:工程类型为Java Project) 【3】在工程中新建一个libs目录,将“...\GETUI_SERVER_SDK\资源文件”目录下的所有jar包复制到该目录中(若没有libs目录,则选中工程右键“New”->Folder->命名为“libs”),如下图所示 【4】右键单击工程,选择Build Path中的Configure Build Path...,选中Libraries这个tab,并通过Add Jars...导入工程libs目录下的所有jar文件,如下图所示

JAVA推送模板实例 转至元数据结尾 转至元数据起始 本章介绍了JAVA API的推送模板实例,如有更多疑问,请联系我们 点击通知打开应用模板| 点击通知打开网页模板 点击通知栏弹框下载模板| 透传消息模板| iOS模板说明

Java开发中的Memcache原理及实现

Java开发中的Memcache原理及实现 作者:jiaxiaoyuan1204 整理:chaijunkun 来源:https://www.360docs.net/doc/0316397373.html,/

一、概述 1. Memcache是什么 Memcache(Memcached)是集群环境下的缓存解决方案。 Memcache是https://www.360docs.net/doc/0316397373.html,的一个项目,最早是为LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力。它可以应对任意多个连接,使用非阻塞的网络IO。它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached自管理这些HashTable。 Memcache官方网站:https://www.360docs.net/doc/0316397373.html,/memcached,更多详细的信息可以来这里了解。 2. 为什么会有Memcache和memcached两种名称 其实Memcache是这个项目的名称,而memcached是它服务器端的主程序文件名,知道我的意思了吧。一个是项目名称,一个是主程序文件名,在网上看到了很多人不明白,于是混用了。 3. 如何在Java开发中使用Memcache 在Java开发中使用Memcache,一般要用到以下几个程序: 1) Memcached 该程序用来在Linux或Windows服务器上建立和管理缓存。 其项目网址为:https://www.360docs.net/doc/0316397373.html,/memcached/。 2) Magent Magent是一款开源的Memcached代理服务器软件,使用它可以搭建高可用性的集群应用的Memcached服务,其项目网址为:https://www.360docs.net/doc/0316397373.html,/p/memagent/。 3) Memcached客户端程序 至于Memcached的客户端程序,一般推荐用memcached client for java,为什么推荐用这种客户端,后面会讲到具体的原因,其项目的网址为: https://www.360docs.net/doc/0316397373.html,/gwhalin/Memcached-Java-Client/。 4)其它程序 i. Libevent 在Linux环境下应用Memcache时,Memcache用到了libevent这个库,用于Socket的处理,所以还需要安装libevent。libevent的最新版本是libevent-1.4.13。(如果你的系统已经安装了libevent,可以不用安装)。 官网:https://www.360docs.net/doc/0316397373.html,/~provos/libevent/ 下载:https://www.360docs.net/doc/0316397373.html,/~provos/libevent-1.4.13-stable.tar.gz ii. Windows下的安装程序 Memcache也可以安装在Windows服务器下,安装程序:memcached-1.2.1-win32.zip

UML模型与Java语言之间的代码映射关系分析

龙源期刊网 https://www.360docs.net/doc/0316397373.html, UML模型与Java语言之间的代码映射关系分析 作者:刘洁 来源:《硅谷》2013年第08期 摘要 UML是在多种面向对象建模方法的基础上发展起来的建模语言,它不是一门程序设计语言。但却可以将UML模型映射为多种程序设计语言代码,也可以使用逆向生成器工具将程序源代码转换为UML模型。本文浅析了类图、状态图、组件图三种模型与Java语言之间的代码映射关系。 关键词 UML;代码映射;建模 中图分类号:TP393 文献标识码:A 文章编号:1671—7597(2013)042-082-02 统一建模语言(Unified Modeling Language,UML)是一种通用的可视化面向对象的建模语言,适用于对任何面向对象的事物的建模。虽然UML不是一门程序设计语言。但可以将UML模型映射为多种程序设计语言代码,也可以使用逆向生成器工具将程序源代码转换为UML模型。 1 类图与Java代码之间的映射 类图是用来显示系统中的类、接口以及它们之间的静态结构和关系的一种静态模型,它用于描述系统的结构。类图的建模贯穿系统的分析和设计阶段的始终,通常从商务伙伴能够理解的用例开始建模,最终成为只有开发小组能够完全理解的类。 面向对象的系统中充满着各种不同的对象,它们相互协作完成各种不同的任务。与之对应的类之间也存在着多种关系。以Java编程语言为例,如图1所示双向关联关系(1..*,*)的 类图与Java代码的映射如下。 2 状态图与Java代码之间的映射 状态图是对单个对象建模,描述某个对象所处的各种可能状态以及这些状态之间的转移。状态图映射成代码的方法如下: 1)将不同状态作为常数枚举,把当前状态存储在适当的数据成员中。 2)依赖于状态的操作可以用开关语句对每个状态分别设一个case实现。每个case表示来自特定状态,用相应的消息表示转换。

对讲机与JAVA平台的完美结合

对讲机与JAVA平台的完美结合 欧洲宇航Cassidian在其TETRA终端中内置了JAVA平台,能够为用户提供定制应用,优化数据应用,大大提高了现场操作效率,为行业提供了JAVA应用的典范,本文从JAVA应用的亮点和典型的JAVA应用两个方面做一介绍,希望行业人士能从中得到启发,为对讲机提供更多的技术应用。 一、JAVA应用的亮点 1、一键式启动JAVA应用软件 长按单个数早键可直接启动,简单方便,简化用户操作步骤,提高效率。 2、用户界面更加友好美观 丰富的UI组件,背景、颜色以及字体可灵活设置,支持动画效果,支持线程异步模式。 3、优化数据通信 使用SOCKET通信方式,使得客户端连接服务器的速度更快。经过测试,比HTTP CONNECT的方式提高效率50%以上 4、自动更新客户端软件 使用OTA(Over The Air User lnitiated Provisioning)规范的技术自动检测最新软件版本并选择更新,当JAVA应用程序启动时,自动与服务器连接,检测是否有新版本的软件发布,由用户自行选择是否更新客户端软件。 5、以RMS技术构造客户端的微数据库 使用RMS技术,将频繁使用且内容较为稳定的业务数据缓存在本地(客户端),明显的减少客户端与服务器的通信量,提高无线数据通道的业务利用率。 6、与GPS功能的集成运用 与GPS定位功能相结合,在协同执行任务(报告巡逻签到等业务)中为用户提供信息服务或采集终端信息,提高了客户端应用的业务适用范围。 二、典型的JAVA应用 1、人员盘查 在Cassidian TETRA终端上输入身份证号码,系统可查询该人员基本信息、违法犯罪信息、驾驶证、是否追逃人员/失踪人员、工作对象和人员照片等信息,同时自动上传盘查地点的GPS坐标。 2、车辆盘查

java集合详解

集合 版本号:1.0 作者:huangdos 日期:2006年6月06日

摘要 摘要内容 Java里面最重要,最常用也就是集会一部分了。能够用好集合和理解好集合对于做Java程序的开发拥有无比的好处。本文详细解释了关于Java中的集合是如何实现的,以及他们的实现原理。 关键字: Collection , List ,Set , Map , 集合,框架。

目录 1集合框架 (2) 1.1集合框架概述 (2) 1.1.1容器简介 (2) 1.1.2容器的分类 (3) 1.2C OLLECTION (5) 1.2.1常用方法 (5) 1.2.2迭代器 (8) 1.3L IST (10) 1.3.1概述 (10) 1.3.2常用方法 (10) 1.3.3实现原理 (14) 1.4M AP (18) 1.4.1概述 (18) 1.4.2常用方法 (18) 1.4.3Comparable 接口 (23) 1.4.4实现原理 (24) 1.4.5覆写hashCode() (29) 1.5S ET (32) 1.5.1概述 (32) 1.5.2常用方法 (33) 1.5.3实现原理 (36) 1.6总结:集合框架中常用类比较 (38) 2练习 (38) 3附录:排序 (40)

集合 1集合框架 1.1集合框架概述 1.1.1容器简介 到目前为止,我们已经学习了如何创建多个不同的对象,定义了这些对象以后,我们就可以利用它们来做一些有意义的事情。 举例来说,假设要存储许多雇员,不同的雇员的区别仅在于雇员的身份证号。我们可以通过身份证号来顺序存储每个雇员,但是在内存中实现呢?是不是要准备足够的内存来存储1000个雇员,然后再将这些雇员逐一插入?如果已经插入了500条记录,这时需要插入一个身份证号较低的新雇员,该怎么办呢?是在内存中将500条记录全部下移后,再从开头插入新的记录? 还是创建一个映射来记住每个对象的位置?当决定如何存储对象的集合时,必须考虑如下问题。 对于对象集合,必须执行的操作主要以下三种: ◆添加新的对象 ◆删除对象 ◆查找对象 我们必须确定如何将新的对象添加到集合中。可以将对象添加到集合的末尾、开头或者中间的某个逻辑位置。 从集合中删除一个对象后,对象集合中现有对象会有什么影响呢?可能必须将内存移来移去,或者就在现有对象所驻留的内存位置下一个“洞”。 在内存中建立对象集合后,必须确定如何定位特定对象。可建立一种机制,利用该机制可根据某些搜索条件(例如身份证号)直接定位到目标对象;否则,便需要遍历集合中的每个对象,直到找到要查找的对象为止。 前面大家已经学习过了数组。数组的作用是可以存取一组数据。但是它却存在一些缺点,使得无法使用它来比较方便快捷的完成上述应用场景的要求。 1.首先,在很多数情况下面,我们需要能够存储一组数据的容器,这一点虽然数组可以实现,但是如果我们 需要存储的数据的个数多少并不确定。比如说:我们需要在容器里面存储某个应用系统的当前的所有的在线用户信息,而当前的在线用户信息是时刻都可能在变化的。也就是说,我们需要一种存储数据的容器,它能够自动的改变这个容器的所能存放的数据数量的大小。这一点上,如果使用数组来存储的话,就显得十分的笨拙。 2.我们再假设这样一种场景:假定一个购物网站,经过一段时间的运行,我们已经存储了一系列的购物清单 了,购物清单中有商品信息。如果我们想要知道这段时间里面有多少种商品被销售出去了。那么我们就需要一个容器能够自动的过滤掉购物清单中的关于商品的重复信息。如果使用数组,这也是很难实现的。 3.最后再想想,我们经常会遇到这种情况,我知道某个人的帐号名称,希望能够进一步了解这个人的其他的 一些信息。也就是说,我们在一个地方存放一些用户信息,我们希望能够通过用户的帐号来查找到对应的该用户的其他的一些信息。再举个查字典例子:假设我们希望使用一个容器来存放单词以及对于这个单词的解释,而当我们想要查找某个单词的意思的时候,能够根据提供的单词在这个容器中找到对应的单词的解释。如果使用数组来实现的话,就更加的困难了。 为解决这些问题,Java里面就设计了容器集合,不同的容器集合以不同的格式保存对象。

第三方调用U9服务说明(Java平台)

第三方调用U9服务(Java平台) 一、Java环境搭建 a)Jdk版本jdk-5_5_0_10 b)apache-cxf-2.2.4 c)开发工具Eclipse d)配置环境变量 添加新变量ClASSPATH: 值为“.;C:\Program Files\Java\jdk1.5.0_10\lib\Tools.jar;C:\Program Files\Java\jdk1.5.0_10\jre\lib\rt.jar” 添加新变量Java_HOME : 值为“C:\Program Files\Java\jdk1.5.0_10” Path变量后追加:“C:\Program Files\Java\jdk1.5.0_10\bin” 说明:C:\Program Files\Java\jdk1.5.0_10是jdk的安装目录 e)UFIDA U9服务器 二、引用U9服务 以创建收货单服务为例,UFIDA.U9.ISV.RCV.ICreateRCVSRV.svc a)验证服务是否可用 如果能显示显示下面的图片说明服务可用 b)生成代理类

利用apache-cxf-2.2.4针对wsdl导出java客户端文件 D:\apache-cxf-2.2.4\bin> wsdl2java -d d:\JavaService -verbose http://localhost/portal/services/UFIDA.U9.ISV.RCV.ICreateRCVSRV.svc?wsdl 注明: -d <客户端代码输出路径> -verbose<服务地址> 查看生成的文件: c)构架项目 1.创建Java测试工程

JAVA集合之Map映射深刻总结案例附上解释跟总结

Java集合系列之Map映射学习总结一.HashMap实例 案例1:HashMapDemo1 package Map映射; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; /** * 顺序结构 * 基于哈希表的Map 接口的实现。 * 键和值都允许是null,值可以重复。 * 无序的 * 线程不安全的。(不同步) * 遍历无序输出. * 和Set集一样,没有for循环遍历的方法。 * 遍历Map方法有两种: * ①调用keySet方法: * Set keys = map.keySet(); * Iterator it = keys.iterator(); * ②调用entrySet方法: * Set keys = map.entrySet(); * Iterator it = keys.iterator(); * 本例子遍历的是基本类型 * */ public class HashMapDemo1 { public static void main(String[] args) { HashMap map = new HashMap(); map.put(1, 111); map.put("1", "上海"); map.put(5, "广州"); map.put(3, "西安"); map.put(null,"武汉"); //键允许是null map.put(2, null);//值允许是null map.put(null,null);//键和值都允许是null,会替换前面的null:武汉. System.out.println("**********迭代器遍历调用keySet方法*********"); Set keys = map.keySet();//获取所有的键,放入一个集合中 Iterator it = keys.iterator();//取得迭代器才可以遍历 //遍历出来的结果是无序的。

综合案例:数据表与简单Java类映射

1、综合案例:数据表与简单Java类映射 2、知识点 2.1、上次课程的主要知识点 内部类的定义及使用。 2.2、本次预计讲解的知识点 利用实际的数据表实现表与类的操作转换。 3、具体内容(★★★★★) 简单Java类是整个项目开发中的灵魂所在,它有自己严格的开发标准,而最为重要的是它需要与数据表是完全对应的,不过考虑到现在没有接触到过多的程序设计的功能。所以对于此处的访问就有一些限制,要求可以完成如下的两类操作: ·第一步:可以根据数据表定义的结构关系进行数据以及引用的设置; ·第二步:根据数据表的结构可以取出所需要的数据。 本次选用一个最熟悉的数据表结构:dept、emp实现这样的转换操作。现在的开发要求如下:

1、本次开发使用以下的数据表与表中的字段: ·雇员表(emp):empno、ename、job、sal、comm、mgr、deptno; ·部门表(dept):deptno、dname、loc。 2、数据的操作要求: ·根据表结构完整的设置雇员、经理、部门的关系; ·可以完成如下的内容输出: |- 可以输出一个雇员的完整信息,包括雇员的领导、以及所在的部门信息; |- 可以输出一个部门的完整信息,以及这个部门的所有雇员信息,以及这个雇员的领导信息。第一步:写出基本字段的映射转换 ·雇员表(emp):empno、ename、job、sal、comm; ·部门表(dept):deptno、dname、loc。

第二步:设计关系字段 本程序存在有两个关系: ·自身关联:mgr字段,mgr也是一个雇员; ·外键关联:deptno字段。

第三步:执行数据操作 ·设置数据的关系; ·取出雇员的完整数据:

java基础知识详细整理(图文并茂深入浅出)

JSE第一部分 分享者:张振羽 2017.6.30

1.什么是 JDK API (1) Application Programming Interface ,应用程序编程接口 (2) 是一些预先定义的函数,开发人员可提供直接调用的功能。 2.JDK包结构 便于维护,按照功能划分,不同功能的累划分在不同功能的包中,常用的包如下表: 3.字符串的基本操作 3.1 String 及其API

3.1.1 String (1) String是不可变对象 (2) https://www.360docs.net/doc/0316397373.html,ng.String使用了final修饰,不能被继承。 (3)字符串一旦被初始化,就不可以被改变,存放在方法区中的常量池中 (4) 任何一个字符对应2个字节的长度,1个字节 = 8位二进制。 3.1.2 String s=new String (“abc”) (1) 众所周知,答案是:创建两个对象 (2) why?举例子: 分析步骤: a) 栈中开辟一块空间存放引用str1(地址信息); b) String池中有一块空间,存放String常量"abc"; c) 引用str1指向池中String常量"abc"; d) str1所指代的地址即常量"abc"所在地址,输出为true; 结论:创建了一个引用对象str1

分析步骤: 1) 栈中开辟一块空间存放引用str3; 2) 堆中开辟一块空间存放一个新建的String对象"abc"; 3) 引用str3指向堆中的新建的String对象"abc"; 4) str3所指代的对象地址为堆中地址,而常量"abc"地址在池中,输出false; 3.2 StringBuilder常见API

Java虚拟机工作原理

As the Java Virtual Machine is a stack-based machine, almost all of its instructions involve the operand stack in some way. Most instructions push values, pop values, or both as they perform their functions. Java虚拟机是基于栈的(stack-based machine)。几乎所有的java虚拟机的指令,都与操作数栈(operand stack)有关.绝大多数指令都会在执行自己功能的时候进行入栈、出栈操作。 1Java体系结构介绍 Javaís architecture arises out of four distinct but interrelated technologies, each of which is defined by a separate specification from Sun Microsystems: 1.1 Java体系结构包括哪几部分? Java体系结构包括4个独立但相关的技术 the Java programming language →程序设计语言 the Java class file format →字节码文件格式 the Java Application Programming Interface→应用编程接口 the Java Virtual Machine →虚拟机 1.2 什么是JVM java虚拟机和java API组成了java运行时。 1.3 JVM的主要任务。 Java虚拟机的主要任务是装载class文件并执行其中的字节码。 Java虚拟机包含了一个类装载器。 类装载器的体系结构 二种类装载器 启动类装载器 用户定义的类装载器 启动类装载器是JVM实现的一部分 当被装载的类引用另外一个类时,JVM就是使用装载第一个类的类装载器装载被引用的类。 1.4 为什么java容易被反编译? ●因为java程序是动态连接的。从一个类到另一个类的引用是符号化的。在静态连接的 可执行程序中。类之间的引用只是直接的指针或者偏移量。相反在java的class文件中,指向另一个类的引用通过字符串清楚的标明了所指向的这个类的名字。

相关文档
最新文档