I work on a project in which we instrument EJBs on Weblogic application
servers. I have successfully instrumented EJBs on Weblogic 6.X and 7.X
servers (after many, many trials and tribulations). Hence I have a lot
of "in the trenches" experience and success using BCEL. However, when I
take my methodologies to Weblogic 8.X servers I am getting an error on
some - not all - of the EJBs that I instrument and it has me a bit
stumped. What I do know that has changed is that Weblogic moved form
JDK 1.3.X to 1.4.X so I suspect that the byte code verifier may be more
picky, or at least just different. Has anyone seen a similar issue? I
believe that I may be just missing some step in my methodology that the
old byte code verifier did not care about but the new one does.
Also note that the EJB being instrumented is final and if I have my
system ignore (not modify) all final classes that does seem to work.
However, what has got me a bit baffled is that the verifier only
complains about a small subset of the final classes that I instrument -
most of the modified final classes are passed with no problems.
I guess the basic questions I have are: How would the byte code
verifier even know that I have changed the class? Why is it only
complaining about changes to final classes? And why only some of the
final classes (not all of them)?
The error I am getting is:
[EJB:011006]Unable to bind a cluster-aware stateless session EJBObject
to the name: Patient Enterprise AppSession-EJBsRe
cordSessionEJB_EO. Please ensure that the jndi-name in the
weblogic-ejb-jar.xml is correct.
javax.naming.CommunicationException. Root exception is
java.rmi.ServerError: A error occurred the server; nested except
ion is:
java.lang.VerifyError: (class:
com/bea/medrec/controller/RecordSessionEJB_q386wz_EOImpl_WLStub, method:
getRecordsSummary signature:
(Ljava/lang/Integer;)Lcom/bea/medrec/common/RecordsSummary;) Illegal
constant pool index
at
weblogic.rmi.internal.ServerRequest.sendReceive(ServerRequest.java:196)
at
weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.
java:286)
at
weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.
java:246)
at weblogic.jndi.internal.ServerNamingNode_WLStub.rebind(Unknown
Source)
at
weblogic.jndi.internal.WLContextImpl.rebind(WLContextImpl.java:133)
at
weblogic.ejb20.internal.StatelessEJBHome.activate(StatelessEJBHome.java:
109)
at
weblogic.ejb20.deployer.ClientDrivenBeanInfoImpl.activate(ClientDrivenBe
anInfoImpl.java:1032)
at
weblogic.ejb20.deployer.EJBDeployer.activate(EJBDeployer.java:1318)
at
weblogic.ejb20.deployer.EJBModule.activate(EJBModule.java:567)
at
weblogic.j2ee.J2EEApplicationContainer.activateModule(J2EEApplicationCon
tainer.java:2628)
at
weblogic.j2ee.J2EEApplicationContainer.activate(J2EEApplicationContainer
.java:1747)
at
weblogic.j2ee.J2EEApplicationContainer.activate(J2EEApplicationContainer
.java:1672)
at
weblogic.management.deploy.slave.SlaveDeployer.setActivationStateForAllA
pplications(SlaveDeployer.java:2741)
at
weblogic.management.deploy.slave.SlaveDeployer.resume(SlaveDeployer.java
:388)
at
weblogic.management.deploy.DeploymentManagerServerLifeCycleImpl.resume(D
eploymentManagerServerLifeCycleImpl.java:230)
at
weblogic.t3.srvr.SubsystemManager.resume(SubsystemManager.java:140)
at weblogic.t3.srvr.T3Srvr.resume(T3Srvr.java:886)
at weblogic.t3.srvr.T3Srvr.run(T3Srvr.java:350)
at weblogic.Server.main(Server.java:32)
Caused by: java.lang.VerifyError: (class:
com/bea/medrec/controller/RecordSessionEJB_q386wz_EOImpl_WLStub, method:
getRe
cordsSummary signature:
(Ljava/lang/Integer;)Lcom/bea/medrec/common/RecordsSummary;) Illegal
constant pool index
at
weblogic.rmi.internal.ServerRequest.sendReceive(ServerRequest.java:181)
... 18 more
Burt Wagner, Senior Software Engineer
Alignment Software, Inc. www.alignmentsoftware.com
<http://www.alignmentsoftware.com>
(Formerly NPULSE Software, Inc. www.npulse.com <http://www.npulse.com> )
100 Superior Plaza Way, Suite 200
Superior, Colorado 80027
Work: (303) 642-4457 WFax: (303) 642-4002
Cell: (303) 589-3095