⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 beanificationtestcase.java

📁 APACHE 公司出的java bean 工具包
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                signal.setBean(BeanUtilsBean.getInstance());
                signal.setConvertUtils(ConvertUtilsBean.getInstance());
                signal.setPropertyUtils(PropertyUtilsBean.getInstance());
            }
            
            public String toString() {
                return "GetBeanUtilsBeanThread";
            }
        }
            
        Signal signal = new Signal();
        signal.setSignal(1);
        
        GetBeanUtilsBeanThread thread = new GetBeanUtilsBeanThread(signal);
        thread.setContextClassLoader(new TestClassLoader());
        
        thread.start();
        thread.join();
        
        assertEquals("Signal not set by test thread", 2, signal.getSignal());
        assertTrue(
                    "Different BeanUtilsBean instances per context classloader", 
                    BeanUtilsBean.getInstance() != signal.getBean());
        assertTrue(
                    "Different ConvertUtilsBean instances per context classloader", 
                    ConvertUtilsBean.getInstance() != signal.getConvertUtils());                    
        assertTrue(
                    "Different PropertyUtilsBean instances per context classloader", 
                    PropertyUtilsBean.getInstance() != signal.getPropertyUtils());        
    }
    
    
    /** 
     * Tests whether difference instances are loaded by different 
     * context classloaders.
     */
    public void testContextClassLoaderLocal() throws Exception {
            
        class CCLLTesterThread extends Thread {
            
            private Signal signal;
            private ContextClassLoaderLocal ccll;
        
            CCLLTesterThread(Signal signal, ContextClassLoaderLocal ccll) {
                this.signal = signal;
                this.ccll = ccll;
            }
            
            public void run() {
                ccll.set(new Integer(1789));
                signal.setSignal(2);
                signal.setMarkerObject(ccll.get());
            }
            
            public String toString() {
                return "CCLLTesterThread";
            }
        }
            
        ContextClassLoaderLocal ccll = new ContextClassLoaderLocal();
        ccll.set(new Integer(1776));
        assertEquals("Start thread sets value", new Integer(1776), ccll.get());  
        
        Signal signal = new Signal();
        signal.setSignal(1);
        
        CCLLTesterThread thread = new CCLLTesterThread(signal, ccll);
        thread.setContextClassLoader(new TestClassLoader());
        
        thread.start();
        thread.join();
        
        assertEquals("Signal not set by test thread", 2, signal.getSignal());     
        assertEquals("Second thread preserves value", new Integer(1776), ccll.get()); 
        assertEquals("Second thread gets value it set", new Integer(1789), signal.getMarkerObject()); 
    }
    
    /** Tests whether calls are independent for different classloaders */
    public void testContextClassloaderIndependence() throws Exception {
    
        class TestIndependenceThread extends Thread {
            private Signal signal;
            private PrimitiveBean bean;
        
            TestIndependenceThread(Signal signal, PrimitiveBean bean) {
                this.signal = signal;
                this.bean = bean;
            }
            
            public void run() {
                try {
                    signal.setSignal(3);
                    ConvertUtils.register(new Converter() {
                                            public Object convert(Class type, Object value) {
                                                return new Integer(9);
                                            }
                                                }, Integer.TYPE);
                    BeanUtils.setProperty(bean, "int", new Integer(1));
                } catch (Exception e) {
                    e.printStackTrace();
                    signal.setException(e);
                }
            }
            
            public String toString() {
                return "TestIndependenceThread";
            }
        }
        
        PrimitiveBean bean = new PrimitiveBean();
        BeanUtils.setProperty(bean, "int", new Integer(1));
        assertEquals("Wrong property value (1)", 1, bean.getInt());

        ConvertUtils.register(new Converter() {
                                public Object convert(Class type, Object value) {
                                    return new Integer(5);
                                }
                                    }, Integer.TYPE);
        BeanUtils.setProperty(bean, "int", new Integer(1));
        assertEquals("Wrong property value(2)", 5, bean.getInt());
    
        Signal signal = new Signal();
        signal.setSignal(1);
        TestIndependenceThread thread = new TestIndependenceThread(signal, bean);
        thread.setContextClassLoader(new TestClassLoader());
        
        thread.start();
        thread.join();
        
        assertNull("Exception thrown by test thread:" + signal.getException(), signal.getException());
        assertEquals("Signal not set by test thread", 3, signal.getSignal());
        assertEquals("Wrong property value(3)", 9, bean.getInt());
        
    }
    
    /** Tests whether different threads can set beanutils instances correctly */
    public void testBeanUtilsBeanSetInstance() throws Exception {
            
        class SetInstanceTesterThread extends Thread {
            
            private Signal signal;
            private BeanUtilsBean bean;
        
            SetInstanceTesterThread(Signal signal, BeanUtilsBean bean) {
                this.signal = signal;
                this.bean = bean;
            }
            
            public void run() {
                BeanUtilsBean.setInstance(bean);
                signal.setSignal(21);
                signal.setBean(BeanUtilsBean.getInstance());
            }
            
            public String toString() {
                return "SetInstanceTesterThread";
            }
        }
        
        Signal signal = new Signal();
        signal.setSignal(1);

        BeanUtilsBean beanOne = new BeanUtilsBean();
        BeanUtilsBean beanTwo = new BeanUtilsBean();
        
        SetInstanceTesterThread thread = new SetInstanceTesterThread(signal, beanTwo);
        thread.setContextClassLoader(new TestClassLoader());
        
        BeanUtilsBean.setInstance(beanOne);
        assertEquals("Start thread gets right instance", beanOne, BeanUtilsBean.getInstance()); 
        
        thread.start();
        thread.join();
        
        assertEquals("Signal not set by test thread", 21, signal.getSignal());     
        assertEquals("Second thread preserves value", beanOne, BeanUtilsBean.getInstance()); 
        assertEquals("Second thread gets value it set", beanTwo, signal.getBean()); 
    }
    
    /** Tests whether the unset method works*/
    public void testContextClassLoaderUnset() throws Exception {
        BeanUtilsBean beanOne = new BeanUtilsBean();
        ContextClassLoaderLocal ccll = new ContextClassLoaderLocal();
        ccll.set(beanOne);
        assertEquals("Start thread gets right instance", beanOne, ccll.get()); 
        ccll.unset();
        assertTrue("Unset works", !beanOne.equals(ccll.get())); 
    }
    
    private boolean isPre14JVM() {
        // some pre 1.4 JVM have buggy WeakHashMap implementations 
        // this is used to test for those JVM
        String version = System.getProperty("java.specification.version");
        StringTokenizer tokenizer = new StringTokenizer(version,".");
        if (tokenizer.nextToken().equals("1")) {
            String minorVersion = tokenizer.nextToken();
            if (minorVersion.equals("0")) return true;
            if (minorVersion.equals("1")) return true;
            if (minorVersion.equals("2")) return true;
            if (minorVersion.equals("3")) return true;
        }
        return false;
    }
    
    // ---- Auxillary classes
    
    class TestClassLoader extends ClassLoader {
        public String toString() {
            return "TestClassLoader";
        }
    }
    
    class Signal {
        private Exception e;
        private int signal = 0;
        private BeanUtilsBean bean;
        private PropertyUtilsBean propertyUtils;
        private ConvertUtilsBean convertUtils;
        private Object marker;
        
        public Exception getException() {
            return e;
        }
        
        public void setException(Exception e) {
            this.e = e;
        }
        
        public int getSignal() {
            return signal;
        }
        
        public void setSignal(int signal) {
            this.signal = signal;
        }
        
        public Object getMarkerObject() {
            return marker;
        }
        
        public void setMarkerObject(Object marker) {
            this.marker = marker;
        }
        
        public BeanUtilsBean getBean() {
            return bean;
        }
        
        public void setBean(BeanUtilsBean bean) {
            this.bean = bean;
        }
        
        public PropertyUtilsBean getPropertyUtils() {
            return propertyUtils;
        }
        
        public void setPropertyUtils(PropertyUtilsBean propertyUtils) {
            this.propertyUtils = propertyUtils;
        }
        
        public ConvertUtilsBean getConvertUtils() {
            return convertUtils;
        }
        
        public void setConvertUtils(ConvertUtilsBean convertUtils) {
            this.convertUtils = convertUtils;
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -