01: package org.mvel.tests.main;
02:
03: import org.mvel.MVEL;
04: import org.mvel.optimizers.OptimizerFactory;
05:
06: import java.io.Serializable;
07:
08: public class MVELThreadTest {
09:
10: public static void main(String[] args) {
11: MVELThreadTest threadTest = new MVELThreadTest();
12: threadTest.start();
13: }
14:
15: public void start() {
16: //Create two of the same expressions
17: final String expression = "firstname";
18: final String expression2 = "lastname";
19:
20: //Create a bean to run expressions against
21: final Bean bean = new Bean();
22:
23: //Set thread safety ON
24: MVEL.setThreadSafe(true);
25:
26: //Use reflection mode
27: OptimizerFactory
28: .setDefaultOptimizer(OptimizerFactory.SAFE_REFLECTIVE);
29:
30: //Compile the expressions
31: Serializable mvelExp1 = MVEL.compileExpression(expression);
32: Serializable mvelExp2 = MVEL.compileExpression(expression2);
33:
34: //run the threads
35: runThreads(bean, mvelExp1, mvelExp2);
36: }
37:
38: public void runThreads(final Bean bean,
39: final Serializable mvelExpr1, final Serializable mvelExpr2) {
40: //Start 5 threads, each executing the specified MVEL expressions
41: for (int i = 0; i < 5; i++) {
42: Thread t = new Thread() {
43: public void run() {
44: testMvel(bean, mvelExpr1, mvelExpr2);
45: }
46: };
47: t.start();
48: }
49: ;
50: }
51:
52: //by synchronizing the testMvel method, the exception does not occur
53: public void testMvel(Bean bean, Serializable mvelExpr1,
54: Serializable mvelExpr2) {
55: int iterations = 100;
56: for (int i = 0; i < iterations; i++) {
57: MVEL.executeExpression(mvelExpr1, bean);
58: MVEL.executeExpression(mvelExpr2, bean);
59: }
60: }
61:
62: /**
63: * Bean
64: */
65: public static class Bean {
66: private String firstname;
67:
68: private String lastname;
69:
70: public String getFirstname() {
71: return firstname;
72: }
73:
74: public void setFirstname(String firstname) {
75: this .firstname = firstname;
76: }
77:
78: public String getLastname() {
79: return lastname;
80: }
81:
82: public void setLastname(String lastname) {
83: this.lastname = lastname;
84: }
85: }
86: }
|