import javaawtBorderLayout;
import javaawtCursor;
import javaawtDimension;
import javaawtGraphics;
import javaawtRectangle;
import javaawtToolkit;
import javaawteventActionEvent;
import javaawteventActionListener;
import javaawteventWindowAdapter;
import javaawteventWindowEvent;
import javaawteventWindowListener;
import javaawtimageBufferedImage;
import javaioFile;
import javaioFileInputStream;
import javaxswingJButton;
import javaxswingJComboBox;
import javaxswingJFrame;
import javaxswingJPanel;
import javaxswingJScrollPane;
import javaxswingJToolBar;
import javaxswingSwingUtilities;
import comsunimagecodecjpegJPEGCodec;
import comsunimagecodecjpegJPEGImageDecoder;
import eductgutwainJTwain;
/
这是显示扫描的frame
/
public class JTwacker extends JFrame {
class JPEGPanel extends JPanel {
/ Image for the inner class
/
protected BufferedImage mJPEGPanelBufferedImage;
/ Pnale to diaply the image
/
public JPEGPanel() {
// no op
}
/ Sets the bufferedimage into the class
@param bi BufferedImage
/
public void setBufferedImage(BufferedImage bi) {
if (bi == null) {
return;
}
mJPEGPanelBufferedImage = bi;
Dimension d = new Dimension(mJPEGPanelBufferedImagegetWidth(this),
mJPEGPanelBufferedImagegetHeight(this));
setPreferredSize(d);
revalidate();
repaint();
}
/ Paints the component
@param g Graphics object used for the painting
/
public void paintComponent(Graphics g) {
superpaintComponent(g);
Dimension d = getSize();
gsetColor(getBackground());
gfillRect(0, 0, dwidth, dheight);
if (mJPEGPanelBufferedImage != null) {
gdrawImage(mJPEGPanelBufferedImage, 0, 0, this);
}
}
}
protected JPEGPanel mJpegPanel;
protected BufferedImage mBufferedImage;
protected JComboBox mSourcesCombo;
protected JToolBar mToolBar;
/ Constructor
/
public JTwacker() {
super("测试");
mJpegPanel = new JPEGPanel();
JScrollPane ps = new JScrollPane(mJpegPanel,
JScrollPaneVERTICAL_SCROLLBAR_ALWAYS,
JScrollPaneHORIZONTAL_SCROLLBAR_ALWAYS);
getContentPane()add(ps, BorderLayoutCENTER);
WindowListener wndCloser = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
Systemexit(0);
}
};
addWindowListener(wndCloser);
mToolBar = new JToolBar("Twain");
mToolBarsetFloatable(false);
addButtons();
getContentPane()add(mToolBar, BorderLayoutNORTH);
setSize(800, 600);
/ Center the frame /
Dimension screenDim = ToolkitgetDefaultToolkit()getScreenSize();
Rectangle frameDim = getBounds();
setLocation(
(screenDimwidth - frameDimwidth) / 2,
(screenDimheight - frameDimheight) / 2
);
setVisible(true);
}
protected void addButtons(){
JButton _ab = new JButton("扫描");
_abaddActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
acquireImage();
}
});
mToolBaradd(_ab);
mToolBaraddSeparator();
if (eductgutwainJTwaingetInstance()isTwainAvailble()) {
String[] twainSources = JTwaingetInstance()getAvailableSources();
if (twainSources != null) {
mSourcesCombo = new JComboBox(twainSources);
} else {
mSourcesCombo = new JComboBox();
mSourcesComboaddItem("<NONE AVAILABLE>");
}
} else {
mSourcesCombo = new JComboBox();
mSourcesComboaddItem("<NONE AVAILABLE>");
}
mToolBaradd(mSourcesCombo);
}
protected void acquireImage() {
if (JTwaingetInstance()isTwainAvailble()){
if (mSourcesCombogetItemCount() > 0 ){
String _source = (String)mSourcesCombogetSelectedItem();
if (_source != null){
String _filename = JTwaingetInstance()acquire(_source);
Systemoutprintln(_filename);
if (_filename != null && _filenamelength() > 0) {
File fChoosen = new File(_filename);
// savetofile(fChoosen);
showImage(fChoosen);
} else {
Systemoutprintln("哎呀,怎么出错了!");
}
} // end if
} // end if
} // end if
}
protected void showImage(final File file) {
if (file == null || !fileexists()) {
return;
}
setCursor(CursorgetPredefinedCursor(CursorWAIT_CURSOR));
Thread runner = new Thread() {
public void run() {
try {
FileInputStream in = new FileInputStream(file);
JPEGImageDecoder decoder = JPEGCodeccreateJPEGDecoder(in);
mBufferedImage = decoderdecodeAsBufferedImage();
inclose();
SwingUtilitiesinvokeLater( new Runnable() {
public void run() {
reset();
}
});
}
catch (Exception ex) {
exprintStackTrace();
}
setCursor(CursorgetPredefinedCursor( CursorDEFAULT_CURSOR));
}
};
runnerstart();
}
//把扫描得到的保存为文件,然后上传到服务器或保存到数据库中
protected void savetofile(final File file) {
try {
File mfile=new File("c:\\ddjpg");
if (mfileexists()) {
mfiledelete();
}else {
filerenameTo(mfile);
}
} catch (Exception e) {
eprintStackTrace();
// TODO: handle exception
}
}
protected void reset() {
if (mBufferedImage != null) {
mJpegPanelsetBufferedImage(mBufferedImage);
}
}
public static void main(String argv[]) {
new JTwacker();
}
}
-------------------------
package eductgutwain;
/
这是调用动态链接库的类
/
public class JTwain {
private static final JTwain mInstance = new JTwain();
protected final String DLL_NAME = "jtwain";
private JTwain() {
initLib();
}
public static JTwain getInstance(){
return mInstance;
}
public native boolean isTwainAvailble();
public native String[] getAvailableSources();
public native String acquire();
public native String acquire(String sourceName);
private void initLib(){
try {
SystemloadLibrary(DLL_NAME);
}catch(Exception e) {
eprintStackTrace();
}
finally {
// Systemoutprintln("Loading : " + DLL_NAME + "dll");
}
}
}
1、OSCache
OSCache是个一个广泛采用的高性能的J2EE缓存框架,OSCache能用于任何java应用程序的普通的缓存解决方案。
OSCache有以下特点:
(1)缓存任何对象,你可以不受限制的缓存部分jsp页面或>
永久缓存--缓存能随意的写入硬盘,因此答应昂贵的创建(eXPensive-to-create)数据来保持缓存,甚至能让应用重启。
(2)支持集群--集群缓存数据能被单个的进行参数配置,不需要修改代码。
缓存记录的过期--你可以有最大限度的控制缓存对象的过期,包括可插入式的刷新策略(假如默认性能不需要时)。
2、Java Caching System
JSC(Java Caching System)是一个用分布式的缓存系统,是基于服务器的java应用程序。它是通过提供治理各种动态缓存数据来加速动态web应用。
JCS和其他缓存系统一样,也是一个用于高速读取,低速写入的应用程序。
动态内容和报表系统能够获得更好的性能。
假如一个网站,有重复的网站结构,使用间歇性更新方式的数据库(而不是连续不断的更新数据库),被重复搜索出相同结果的,就能够通过执行缓存方式改进其性能和伸缩性。
3、EHCache
EHCache 是一个纯java的在进程中的缓存,它具有以下特性:快速,简单,为Hibernate21充当可插入的缓存,最小的依靠性,全面的文档和测试。
4、JCache
JCache是个开源程序,正在努力成为JSR-107开源规范,JSR-107规范已经很多年没改变了。这个版本仍然是构建在最初的功能定义上。
5、ShiftOne
ShiftOne Java Object Cache是一个执行一系列严格的对象缓存策略的Java lib,就像一个轻量级的配置缓存工作状态的框架。
6、SwarmCache
SwarmCache是一个简单且有效的分布式缓存,它使用ip multicast与同一个局域网的其他主机进
行通讯,是非凡为集群和数据驱动web应用程序而设计的。
SwarmCache能够让典型的读 *** 作大大超过写 *** 作的这类应用提供更好的性能支持。
SwarmCache使用JavaGroups来治理从属关系和分布式缓存的通讯。
扩展资料
Java中缓存存在的原因:
一 般情况下,一个网站,或者一个应用,它的一般形式是,浏览器请求应用服务器,应用服务器做一堆计算后再请求数据库,数据库收到请求后再作一堆计算后把数据 返回给应用服务器。
应用服务器再作一堆计算后把数据返回给浏览器,这个是一个标准流程。但是随着互连网的普及,上网的人越来越多,网上的信息量也越来越多。
数据库每秒中接受请求的次数也是有限的,如果利用有限的资源来提供尽可能大的吞吐量呢。一个办法:减少计算量,缩短请求流程(减少网络io或者硬盘io),这时候缓存就可以大展手脚了。
缓存的基本原理就是打破上图中所描绘的标准流程,在这个标准流程中,任何 一个环节都可以被切断请求可以从缓存里取到数据直接返回。
Linux上的heartbeat双机热备服务架设一 安装前环境设定
两台主机硬件环境(不必完全一致):
CPU: Xeon 3G 2 (EM64T)
MEM: 2G
NIC: Intel 1G 2
eth0: 对外IP
eth1: 对内IP(HA专用)
两台主机的eth1使用双机对联线直接连接。
分区方式:
Filesystem 容量 挂载点
/dev/sda2 97G /
/dev/sda6 45G /Datas
/dev/sda1 99M /boot
none20G /dev/shm
/dev/sda3 97G /opt
另外每台主机应预留500M的raw空间或者更多来作为共用空间被HA使用。
*** 作系统:
RedHat Enterprise 4 Update2 (269-22 EL)
预安装软件:
@ X Window System
@ GNOME Desktop Environment
@ KDE Desktop Environment
@ Editors
@ Engineering and Scientific
@ Graphical Internet
@ Text-based Internet
@ Authoring and Publishing
@ Server Configuration Tools
@ Development Tools
@ Kernel Development
@ X Software Development
@ GNOME Software Development
@ KDE Software Development
@ Administration Tools
@ System Tools
二安装前网络环境设定:
node1: 主机名:servers201 ( HA01 )
eth0: 19216810201 //对外IP地址
eth1: 1000201 //HA心跳使用地址
node2: 主机名:servers202 ( HA02 )
eth0: 19216810202 //对外IP地址
eth1: 1000202 //HA心跳使用地址
特别注意要检查以下几个文件:
/etc/hosts
/etc/hostconf
/etc/resolvconf
/etc/sysconfig/network
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts/ifcfg-eth1
/etc/nsswitchconf
#vi /etc/hosts
node1的hosts内容如下:
127001 localhostlocaldomain localhost
19216810201 servers201 HA01
1000201 HA01
1000202 HA02
19216810202 server202
node2的hosts内容如下:
127001 localhostlocaldomain localhost
19216810202 servers202 HA02
1000202 HA02
1000201 HA01
19216810201 server201
#cat /etc/hostconf
order hosts,bind
#cat /etc/resolvconf
nameserver 61139269 //DNS地址
#cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=servers201 //主机名
GATEWAY="192168101" //网关
GATEWAY="eth0" //网关使用网卡
ONBOOT=YES //启动时加载
FORWARD_IPV4="yes" //只允许IPV4
#cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=19216810201
NETMASK=2552552550
GATEWAY=192168101
TYPE=Ethernet
IPV6INIT=no
#cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=none
IPADDR=1000201
NETMASK=2552552550
TYPE=Ethernet
[node1] 与 [node2] 在上面的配置中,除了
/etc/hosts
/etc/sysconfig/network
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts/ifcfg-eth1
要各自修改外,其他一致。
配置完成后,试试在各自主机上ping对方的主机名,应该可以ping通:
/root#ping HA02
PING HA02 (1000202) 56(84) bytes of data
64 bytes from HA02 (1000202): icmp_seq=0 ttl=64 time=0198 ms
64 bytes from HA02 (1000202): icmp_seq=1 ttl=64 time=0266 ms
64 bytes from HA02 (1000202): icmp_seq=2 ttl=64 time=0148 ms
--- HA02 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0148/0204/0266/0048 ms, pipe 2
三安装HA 与HA依赖包
rpm -Uvh libnet-1121-1rhelum1i386rpm //可以不装
rpm -Uvh heartbeat-pils-204-1el4i386rpm
rpm -Uvh heartbeat-stonith-204-1el4i386rpm
rpm -Uvh heartbeat-204-1el4i386rpm
rpm -Uvh ipvsadm-124-5i386rpm
四 配置 HA的各配置文件
配置心跳的加密方式:authkeys
#vi /etc/had/authkeys
如果使用双机对联线(双绞线),可以配置如下:
#vi /etc/hcd/authkeys
auth 1
1 crc
存盘退出,然后
#chmod 600 authkeys
配置心跳的监控:haresources
#vi /etc/had/haresources
各主机这部分应完全相同。
server201 IPaddr::19216810200 ipvsadm >
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)