`

ejb与java序列化(2)--测试代码

    博客分类:
  • ejb
阅读更多

接上篇,有兴趣的朋友可以直接拿我的测试代码自行测试,请自行修改诸如线程数,执行时间,序列化的数据量大小等参数。如果想尝试做thread dump,可以打开相关的两个注释,会更方便一些,代码中都有相应的注释可供参考。

测试代码如下:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->package  test;

import  java.io.ByteArrayOutputStream;
import  java.io.IOException;
import  java.io.ObjectOutputStream;
import  java.io.Serializable;
import  java.util.ArrayList;

public   class  Test  implements  Runnable {
    
// Notice! set the three test parameter to what you want first
     /**
     * thread count to run test
     
*/
    
private   static   final   int  THREAD_COUNT  =   50 ;
    
/**
     * time in seconds to run test
     
*/
    
private   static   final   long  TEST_TIME_SECOND  =   1   *   30 ;
    
/**
     * during test, we serialize a Data instance with an ArrayList that contains DataItem instance.
     * This is to set how many DataItem in the ArrayList.
     
*/
    
private   static   final   long  ITEMS_COUNT_IN_TEST_OBJECT  =   1000 ;
    

    
private   static   int  finishedCount  =   0 ;
    
private   static   boolean  needStop  =   false ;
    
private   static  Object needStopLock  =   new  Object();
    
private   static  Object finishedCountLock  =   new  Object();

    
private   static   boolean  isNeedStop() {
        
synchronized  (needStopLock) {
            
return  needStop;
        }
    }

    
private   static   void  setNeedStop() {
        
synchronized  (needStopLock) {
            needStop 
=   true ;
        }
    }

    
private   static   void  addFinisedCount() {
        
synchronized  (finishedCountLock) {
            finishedCount
++ ;
        }
    }

    
/**
     * 
@param  args
     
*/
    
public   static   void  main(String[] args) {
        
//  run it first to load all the class
         new  Test().test();
        
//  to dump thread open these
        
//  try {
        
//  Thread.sleep(20 * 1000);
        
//  System.out.println("main sleep. go to find pid, we need it later to send signal");
        
//  Thread.sleep(2 * 1000);
        
//  System.out.println("prepard to dump");
        
//  } catch (InterruptedException e) {
        
//  e.printStackTrace();
        
//  }

        
long  timeBegin  =  System.currentTimeMillis();
        
for  ( int  i  =   0 ; i  <  THREAD_COUNT; i ++ ) {
            Thread t 
=   new  Thread( new  Test());
            t.setName(
" testthread "   +  i);
            t.start();
        }

        
long  timeEnd  =  timeBegin  +  TEST_TIME_SECOND  *   1000 ;
        
while  (System.currentTimeMillis()  <  timeEnd) {
            
try  {
                Thread.sleep(
50 );
            } 
catch  (InterruptedException e) {
                e.printStackTrace();
            }
        }
        setNeedStop();
        System.out.println(THREAD_COUNT 
+   "  thread finished  "   +  finishedCount
                
+   "  times in  "   +  TEST_TIME_SECOND  +   "  seconds " );

        
//  to dump thread open these
        
//  try {
        
//  Thread.sleep(5 * 1000);
        
//   // System.out.println("dump now");
        
//  } catch (InterruptedException e) {
        
//  e.printStackTrace();
        
//  }
    }

    
public   void  run() {
        
while  ( ! isNeedStop()) {
            test();
            addFinisedCount();
        }
    }

    
private   void  test() {
        ByteArrayOutputStream bos 
=   new  ByteArrayOutputStream();
        Data data 
=   new  Data();

        
try  {
            
//  long time1 = System.currentTimeMillis();
            ObjectOutputStream oos  =   new  ObjectOutputStream(bos);
            oos.writeObject(data);
            bos.toByteArray();
            
//  long time2 = System.currentTimeMillis();

            
//  System.out.print((time2 - time1) + " ");

        } 
catch  (IOException e) {
            e.printStackTrace();
        }
    }

    
private   static   class  Data  implements  Serializable {
        
private   static   final   long  serialVersionUID  =   - 376987039014824563L ;
        
private   static   final  ArrayList DEFAULT  =   new  ArrayList();
        
static  {
            
for  ( int  i  =   0 ; i  <  ITEMS_COUNT_IN_TEST_OBJECT; i ++ ) {
                DEFAULT.add(
new  DataItem(i));
                
//  DEFAULT.add(DataItem.a + i);
            }
        }
        
private  ArrayList content  =  DEFAULT;
    }

    
private   static   class  DataItem  implements  Serializable {
        
private   static   final   long  serialVersionUID  =   1L ;
        
private   static   final  String a  =   " sdfsdfsdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff " ;
        
private   int  number;
        
private  String content;

        
public  DataItem( int  number) {
            
this .number  =  number;
            
this .content  =  a  +  number;
        }
    }
}


也可以从这里直接下载到完整的eclipse项目,除上面的代码外,还有thread dump文件和已经设置好的jprobe的配置文件。
(blogjava不能上传文件,所以只好放fs2you)
http://www.fs2you.com/files/59a26119-5d1a-11dd-ad4f-0014221b798a/

分享到:
评论

相关推荐

    java反序列化工具

    Java反序列化是一种将已序列化的对象状态转换回对象的过程,它是Java平台中持久化数据的一种常见方式。在Java应用程序中,序列化用于保存对象的状态以便稍后恢复,或者在网络间传输对象。然而,这个过程也可能引入...

    java源码包---java 源码 大量 实例

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java反射与EJBjava反射与EJBjava反射与EJBjava反射与EJBjava反射与EJB

    反射的应用场景广泛,例如在框架开发中用于动态调用方法,实现插件化,以及在序列化和反序列化过程中发挥作用。 EJB,全称Enterprise JavaBeans,是Java EE平台的一部分,主要用于构建可部署在服务器端的企业级应用...

    RMI-IIOP Java 源码实例.rar

    2. **BAT批处理命令**:这些批处理文件可能用于启动服务器端的EJB容器,注册RMI服务,或者部署和测试应用。 3. **EJB示例**:可能是简单的会话bean或实体bean,展示了如何在EJB中使用RMI-IIOP。 4. **配置文件**:...

    Java对象序列化.pdf

    Java EE服务器在处理EJB调用时,通常需要将对象序列化,以便在不同的Java虚拟机之间传递。HTTP协议也经常利用对象序列化,例如在Web服务中,将对象编码为JSON或XML格式进行通信。JDK提供了一套内置的序列化机制,...

    java完全自学手册-代码资料

    5. **输入/输出流(I/O)**:Java的I/O流处理涵盖了文件读写、网络通信、数据序列化等多个方面,是进行数据交换的关键部分。 6. **多线程**:Java内置了对多线程的支持,通过Thread类或Runnable接口可以创建并管理...

    java笔试题大集合及答案(jsp-java-ejb公司笔试题)

    Java笔试题大集合是针对Java开发者的一份综合测试资料,涵盖了JSP、Java核心和EJB(Enterprise JavaBeans)等关键领域。这份资料对于准备Java相关的面试或笔试具有极高的价值,因为它帮助开发者复习和检验自己的技能...

    基于Java的各种EJB之间的调用示例.zip

    - **远程方法调用(Remote Method Invocation, RMI)**:客户端通过RMI调用EJB的接口,EJB容器负责透明地处理网络通信和对象序列化。 - **本地接口调用(Local Interface)**:当客户端和EJB在同一个JVM中运行时,...

    Java EE 7 tutorial 中的examples代码

    10. **JSON Processing (JSON-P) and JSON Binding (JSON-B)**:JSON-P用于解析和生成JSON,而JSON-B则提供了将Java对象绑定到JSON的自动序列化和反序列化功能。 在“examples”文件夹中,你可能会找到展示这些技术...

    java源码包2

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    JAVA面试题集锦--宝贝

    24. **实例创建方式**:除了`new`关键字外,还可以通过反射、克隆、反序列化等方式创建实例。 25. **类加载机制**:JDK的API类由Bootstrap类加载器加载,Classpath中的类由Extension类加载器加载,而web-inf中的类由...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    密钥 Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存...

    EJB Design Patterns 源代码

    EJB家居工厂模式可能是关于如何动态地创建和管理这些家居实例的源代码,提供了一种灵活的方式来控制EJB的实例化。 7. **EJB命令(EJB Command)** EJB命令模式涉及使用EJBs作为命令对象来执行特定任务。这种方式有...

    Java2参考大全(第四版).pdf,非常不错的java2学习参考书附带测试代码,有下的迅速哈哈本人没分了

    4. **I/O流**:讲述了Java的输入输出系统,包括字节流、字符流、对象序列化、文件操作、网络通信以及NIO(New IO)框架。 5. **反射与注解**:深入解析了Java的反射机制,允许在运行时动态地获取类的信息并操作对象...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    密钥 Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存...

    WTC的EJB项目TOLOWER

    这通常涉及XML或者自定义协议的解析和序列化。 在"WTCEJB"这个压缩包文件中,可能包含了以下内容: 1. EJB组件代码:这些Java类实现了EJB接口,处理来自Tuxedo的请求,执行业务逻辑,并返回结果。 2. Tuxedo客户端...

    使用ejb2.0 ql教程代码(cmp)

    随着EJB版本的更新,CMP在EJB 3.0及后续版本中被JPA(Java Persistence API)所取代,提供了更现代、更灵活的持久化解决方案。 本教程针对EJB 2.0 CMP的实践,适合初学者了解和学习。通过Ejb2.0教程中的代码示例,...

    EJB2.0

    8. 组件模型:EJB2.0的组件模型强调了接口的重要性,Bean通过接口与客户端交互,这增强了代码的可测试性和可重用性。 9. 客户端视图:客户端可以通过本地接口(Local Interface)或远程接口(Remote Interface)与...

    java源码包3

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    C++通过CORBA访问EJB

    CORBA使用IDL(Interface Definition Language)来定义接口,然后由ORB(Object Request Broker)自动处理对象的定位、序列化和通信细节。 在"ejbcorba.txt"文件中,可能详细描述了以下步骤: 1. **设置环境**:...

Global site tag (gtag.js) - Google Analytics