static classloading issue...

A

asaguden

Hi,
We are facing a hard-to-debug problem i our Weblogic server.
The problem has something to do with errors in the classloading
process.

- Here is the exception:
<exception>
....Root cause of ServletException: java.lang.NoClassDefFoundError
A.init ( a.java 3 )
</exception>


- Here is the setup ( pseudo code, may not compile ):
<code>
public class A{
init(){
B b = new B( );
}
}

public class B{

// static attributes
public static HashMap map;

private static final String VAL_1 = "value1";
private static final String VAL_2 = "value2";
private static final String VAL_3 = "value3";
private static final String VAL_4 = "value4";
private static final String VAL_CS = "value4";
private static final String VAL_BS = "value4";

private static final List prod_cs =
ProductHelper.getInstance().getAllProducts( new Category(CS) );
private static final List prod_bs =
ProductHelper.getInstance().getAllProducts( new Category(BS) );
...


// static methods...


// static block
static{
map = new HashMap( );

map.put( "val1", VAL_1 );
map.put( "val2", VAL_2 );
map.put( "val3", VAL_3 );
map.put( "val4", VAL_4 );
map.put( VAL_BS, prod_bs );
map.put( VAL_CS, prod_cs );
...

}
}
}
</code>

As seen in the exception, probable cause is that B is not initialized.
Can someone explain
exactly what happens in the scenario where something in
ProductHelper.getInstance().getAllProducts()
fails...?


PS. The names have been changed to protect the bla bla...

Regards asaguden
 
A

Andrey Ryabov

Hi,
We are facing a hard-to-debug problem i our Weblogic server.
The problem has something to do with errors in the classloading
process.

- Here is the exception:
<exception>
...Root cause of ServletException: java.lang.NoClassDefFoundError
A.init ( a.java 3 )
</exception>

- Here is the setup ( pseudo code, may not compile ):
<code>
public class A{
init(){
B b = new B( );
}

}

public class B{

// static attributes
public static HashMap map;

private static final String VAL_1 = "value1";
private static final String VAL_2 = "value2";
private static final String VAL_3 = "value3";
private static final String VAL_4 = "value4";
private static final String VAL_CS = "value4";
private static final String VAL_BS = "value4";

private static final List prod_cs =
ProductHelper.getInstance().getAllProducts( new Category(CS) );
private static final List prod_bs =
ProductHelper.getInstance().getAllProducts( new Category(BS) );
...

// static methods...

// static block
static{
map = new HashMap( );

map.put( "val1", VAL_1 );
map.put( "val2", VAL_2 );
map.put( "val3", VAL_3 );
map.put( "val4", VAL_4 );
map.put( VAL_BS, prod_bs );
map.put( VAL_CS, prod_cs );
...

}
}}

</code>

As seen in the exception, probable cause is that B is not initialized.
Can someone explain
exactly what happens in the scenario where something in
ProductHelper.getInstance().getAllProducts()
fails...?

PS. The names have been changed to protect the bla bla...

Regards asaguden


Sounds like an exception throws in static initializer.
Check if ProductHelper.getInstance().getAllProducts( new
Category(CS)); throws exception..
In generally it's very bad idea to perform any except trivial
initialization in static initializer
 
D

Daniel Pitts

Hi,
We are facing a hard-to-debug problem i our Weblogic server.
The problem has something to do with errors in the classloading
process.

- Here is the exception:
<exception>
...Root cause of ServletException: java.lang.NoClassDefFoundError
A.init ( a.java 3 )
</exception>

- Here is the setup ( pseudo code, may not compile ):
<code>
public class A{
init(){
B b = new B( );
}

}

public class B{

// static attributes
public static HashMap map;

private static final String VAL_1 = "value1";
private static final String VAL_2 = "value2";
private static final String VAL_3 = "value3";
private static final String VAL_4 = "value4";
private static final String VAL_CS = "value4";
private static final String VAL_BS = "value4";

private static final List prod_cs =
ProductHelper.getInstance().getAllProducts( new Category(CS) );
private static final List prod_bs =
ProductHelper.getInstance().getAllProducts( new Category(BS) );
...

// static methods...

// static block
static{
map = new HashMap( );

map.put( "val1", VAL_1 );
map.put( "val2", VAL_2 );
map.put( "val3", VAL_3 );
map.put( "val4", VAL_4 );
map.put( VAL_BS, prod_bs );
map.put( VAL_CS, prod_cs );
...

}
}}

</code>

As seen in the exception, probable cause is that B is not initialized.
Can someone explain
exactly what happens in the scenario where something in
ProductHelper.getInstance().getAllProducts()
fails...?

PS. The names have been changed to protect the bla bla...

Regards asaguden

Consider the bla bla protected :)


Anyway, if you are using Spring, Hibernate, or any other library that
relies on cglib, you might get this exception after a number of hot-
deploys.

We've seen this happen in Resin, where after a while, we start getting
spurious NoClassDefFoundError and OutOfMemoryError: Java heap space

If this still occures with a cold deploy (restarting the container),
then it is a problem somewhere else.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,482
Members
44,901
Latest member
Noble71S45

Latest Threads

Top