Queer error: java.lang.LinkageError: loader constraints viol
subhash.bhushan Mar 4, 2008 4:54 AMHi,
I faced a queer error with JBoss 4.2.2 GA, so thought of reporting it even though I managed to circumvent the problem.
I have a stateless EJB LoginBean, with remote interface Login:
Remote Interface:
package com.justbooks.security;
import javax.ejb.Remote;
import com.justbooks.entities.Profile;
@Remote
public interface Login {
public boolean signOn(Profile profile);
public boolean signOn(String loginName, String loginPassword);
}
Bean Class:
package com.justbooks.security; import javax.ejb.Stateless; import com.justbooks.entities.Profile; import com.justbooks.security.Login; import javax.persistence.*; import com.justbooks.utility.*; public @Stateless class LoginBean implements Login
I have a DAO Stateless EJB called ProfileDAOBean, with remote interface ProfileDAO:
Remote Interface:
package com.justbooks.dao;
import javax.ejb.Remote;
import com.justbooks.entities.Profile;
@Remote
public interface ProfileDAO {
public Profile findProfile(String loginName);
public boolean authenticate(String loginName, String loginPassword);
public boolean changePassword(String loginName, String oldPassword,
String newPassword);
}
Bean Class:
package com.justbooks.dao; import javax.naming.Context; import javax.naming.NamingException; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.Query; import javax.ejb.Stateless; import com.justbooks.utility.EJBFinder; import com.justbooks.entities.Profile; import com.justbooks.security.ChangePassword; import com.justbooks.security.Login; public @Stateless class ProfileDAOBean implements ProfileDAO
If I include the lookup code for LoginBean inside ProfileDAOBean, then the application works just fine. But if I use a helper class to find EJBs, my application throws up an error saying
15:01:57,890 ERROR [[default]] Servlet.service() for servlet default threw exception
java.lang.LinkageError: loader constraints violated when linking com/justbooks/security/Login class
EJBHelper:
package com.justbooks.utility;
import javax.naming.Context;
import javax.naming.NamingException;
import com.justbooks.security.ChangePassword;
import com.justbooks.security.Login;
public final class EJBHelper {
private static Context getInitialContext()
throws javax.naming.NamingException
{
return new javax.naming.InitialContext();
}
public static Login getLoginEJB() {
try {
Context jndiContext = getInitialContext();
//TODO put these lookup strings in properties file
Object ref = jndiContext.lookup("JustAutomate/LoginBean/remote");
Login login = (Login)ref;
return login;
}catch (NamingException ne) {
ne.printStackTrace();
return null;
}
}
public static ChangePassword getChangePasswordEJB() {
try {
Context jndiContext = getInitialContext();
//TODO put these lookup strings in properties file
Object ref = jndiContext.lookup("JustAutomate/ChangePasswordBean/remote");
ChangePassword changePassword = (ChangePassword)ref;
return changePassword;
}catch (NamingException ne) {
ne.printStackTrace();
return null;
}
}
}If I change the name of the class to EJBFinder, then everything starts working fine again. Not sure what the problem is.
As of now, I have circumvented the problem by renaming the class from EJBHelper to EJBFinder.