I found this on the web that seems to explain why the problem is
occurring...

http://opensource2.atlassian.com/projects/spring/browse/SPR-1518

"Sean Dockery" <[EMAIL PROTECTED]> wrote in message 
news:[EMAIL PROTECTED]
>I have a TestCase as follows...
>
> package example;
>
> import java.util.Date;
>
> import junit.framework.TestCase;
>
> public class JavaBeanTest extends TestCase {
>
> public JavaBeanTest(String testName) {
>  super(testName);
> }
>
> public void testThrowawayCopy() throws Exception {
>  // setup
>  final JavaBean bean = new JavaBean();
>  bean.setId(1L);
>  bean.setName("hello");
>  // exercise
>  final JavaBean copy = bean.throwawayCopy();
>  bean.setExpired(new Date());
>  copy.setId(2L);
>  copy.setName("world");
>  // verify
>  assertEquals("id affected by copy.setId(long) call", 2L, bean.getId());
>  assertEquals("name not affected by copy.setName(String) call", "hello",
> bean.getName());
>  assertNotNull("expired has changed", bean.getExpired());
>
>  assertEquals("id has changed", 2L, copy.getId());
>  assertEquals("name has changed", "world", copy.getName());
>  assertNull("expired not affected by bean.setExpired(Date) call",
> copy.getExpired());
> }
>
> public static Test suite() {
>  TestSuite suite = new TestSuite();
>  Test test = new JavaBeanTest("testThrowawayCopy");
>  for (int i = 0; i < 1000; i++) {
>   suite.addTest(test);
>  }
>  return suite;
> }
>
> }
>
> ...for which I have a JavaBean class as follows...
>
> package example;
>
> import java.lang.reflect.Method;
> import java.util.Date;
>
> public class JavaBean {
>
> private long id;
> private String name;
> private Date expired;
>
> public JavaBean() {
>  // default constructor for JavaBean
> }
>
> public Date getExpired() {
>  return expired;
> }
>
> public void setExpired(Date expired) {
>  this.expired = expired;
> }
>
> public long getId() {
>  return id;
> }
>
> public void setId(long id) {
>  this.id = id;
> }
>
> public String getName() {
>  return name;
> }
>
> public void setName(String name) {
>  this.name = name;
> }
>
> public JavaBean throwawayCopy() {
>  return new ThrowawayJavaBean();
> }
>
> private final class ThrowawayJavaBean extends JavaBean {
>
>  private boolean propagateId;
>
>  private ThrowawayJavaBean() {
>   copyProperties();
>   propagateId = true;
>  }
>
>  private void copyProperties() {
>   try {
>    Method[] methods = JavaBean.this.getClass().getDeclaredMethods();
>    for (int i = 0; i < methods.length; i++) {
>     final Method source = methods[i];
>     if (source.getName().startsWith("get")) {
>      Method target = getClass().getMethod("set" +
> source.getName().substring(3), new Class[] { source.getReturnType() });
>      target.invoke(this, new Object[] { source.invoke(JavaBean.this, new
> Object[] {}) });
>     }
>    }
>   } catch (Exception e) {
>    throw unchecked(e);
>   }
>  }
>
>  public void setId(long id) {
>   super.setId(id);
>
>   if (propagateId) {
>    JavaBean.this.setId(id);
>   }
>  }
>
>  private RuntimeException unchecked(Exception e) {
>   if (e instanceof RuntimeException) {
>    return (RuntimeException) e;
>   }
>   return new RuntimeException(e);
>  }
>
> }
>
> }
>
>
> This code has been adapted from some code in a production application at 
> my
> work.  The production code actually uses Spring's
> BeanUtils.copyProperties(Object source, Object target) method in the
> ThrowawayJavaBean constructor, but we should be accomplishing the same 
> thing
> by using reflection directly.
>
> As you can see, the ThrowawayJavaBean class is a *private* nested class.
> During load tests of the production application, the production code
> (running in Tomcat) *sometimes* experiences an IllegalAccessException due 
> to
> the fact that we're using reflection against a private nested class.  The
> problem has never occurred when the visibility of the nested class is
> public.  Additionally, I have *never* seen the exception occur in the 
> JUnit
> TestRunner with neither the code I have presented above, nor the 
> production
> code itself.
>
> My confusion lies with the question of why the IllegalAccessException 
> occurs
> only infrequently in the production code running under Tomcat instead of
> always occurring.  That is, why doesn't (wouldn't) it happen all the
> time--for example, in my TestCase?
>
> Thanks for your time. 




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to