OC4J CLassloading Information
gday All --
Classloading questions are quite common on this forum. It's a complicated area and each container will more than likely have slightly different nuances in how it works.
We have a very good technical paper which explains general classloading and the specifics of the implementation used in OC4J available on OTN.
This document usually is able to provide answers to questions and issues that arise.
http://otn.oracle.com/tech/java/oc4j/pdf/ClassLoadingInOC4J_WP.pdf
It's a great document so I'd really like to encourage you to have a good look at it when you are thinking about class packaging, loading, etc.
I'll put a link to it on the front page of the OC4J OTN area so it's more readily accessible.
cheers
-steve-
Here is the response I got through paid support:
"There are at least 4 class loaders within OC4J:
(a) system class loader: e.g. for java.util.Date
(b) application launcher class loader: classes from oc4j.jar when oc4j is started with "java -jar oc4j.jar"
(c) server wide class loader: e.g. jar from j2ee/home/lib
(d) web app class loader: e.g. classes from WEB-INF
[They are hirarchical in some sense.]"
I assume the bean container is between c and d, but don't quote me on it.
Similar Messages
-
OC4J ClassLoader defect ??
Hello,
I try to load some resources (xml documents) from within some JARs inside my EAR, deployed on the OC4J container (904).
To do so, I'll use the getResources(String) operation on the ClassLoader. This operation always returns an empty enumeration (of URLs). However, when I try to load just one resource using getResource(String), I do receive the correct resource URL.
After some investigation, I noticed the java.lang.ClassLoader has 2 methods to serve both operations: findResource(String) and findResources(String) which must be overriden by the OC4J classloader implementation. My sense is telling me, only the findResource(String) is overriden and not the findResources(String) (since they return an empty enum by default). Furthermore, when I inspect the com.sun.enterprise.util.EJBClassLoader, this feeling is confirmed since, this class only implements the findResource(String) operation. Is there a reason for this behaviour or a work-around or am I just totally wrong?
Anyway, thanx in advance for looking at my problem,
Kind regards,
StijnHello,
The first thing that I will check is how you get the class loader from your context. Since you are in a J2EE container/application it is always a good practise to take the class loader of the current thread Thread.currentThread().getContextClassLoader(). Is it the way you are getting access to the class loader or your are using the System one (default).
I will invite you to read about ClassLoader and OC4J in this technical paper.
Regards
Tugdual Grall -
Connector Class Loader in OC4J Classloader Tree
Where does connector class loader fit in the OC4J class loader tree. Is it a parent to the EJB Classloader (as in SunOne) or does it use its own classloader to load classes (similar to weblogic). Becos it can impact visibility into resource adapter's classes.
The classloader tree in the ClassLoadingInOC4J_WP.pdf applies to 10.1.2 and 9.0.4, probably even earlier, where the connector classcloader is the root classloader of an application.
For 10.1.3, the root classloader of an application loads both connector jars and ejb jars. See chapter 3 of Oracle Containers for J2EE Developer's Guide(10.1.3 preview). -
OC4J session information with App Server Console
Hello
I have installed BI&Forms 10.1.2.0.2.
I have an application deployed to that app server.
I would like to see session information against that app, and to be able to clear sessions down.
Can this be done with App server Console and how?
Thanks
AndyFixed this. The ServerName param in httpd.conf was incorrect.
-
I am trying to establish the order of precedence fllowed by OC4J when it's trying to locate a particular class.
Given this expanded/exploded directory structure
j2ee
|
--home
|
--classes
|
--lib
|
--my_web_app
|
--WEB-INF
|
--classes
|
--lib
My understanding is that J2EE applications ought to follow this order of precedence:
WEB-INF/classes
WEB-INF/lib
<home>/classes
<home>/lib
However, one of colleagues reckons he has an OC4J installation where WEB-INF/lib is taking precedence over WEB-INF/classes.
I have to say that I have found nothing in the Oracle documentation to confirm which way OC4J operates. Is my understanding of J2EE at fault?
Can anybody out there clarify the matter for me?
Cheers, APCHere is the response I got through paid support:
"There are at least 4 class loaders within OC4J:
(a) system class loader: e.g. for java.util.Date
(b) application launcher class loader: classes from oc4j.jar when oc4j is started with "java -jar oc4j.jar"
(c) server wide class loader: e.g. jar from j2ee/home/lib
(d) web app class loader: e.g. classes from WEB-INF
[They are hirarchical in some sense.]"
I assume the bean container is between c and d, but don't quote me on it. -
Default-charset in oc4j 10.1.3
Hi,
We are planning on migrating to OC4J 10.1.3.
It seems default-charset in global-web-application.xml is not recognized by OC4J 10.1.3 as it was in 9.0.3.
I can see lot of discussions about default-charset in this forum, could not find any answer to my problem.
Here is the header of my global-web-application.xml
<orion-web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://xmlns.oracle.com/oracleas/schema/orion-web-10_0.xsd"
jsp-cache-directory="./persistence"
servlet-webdir="/servlet"
development="false"
jsp-timeout="0"
jsp-cache-tlds="standard"
schema-major-version="10"
schema-minor-version="0"
default-charset="UTF-8"
>
Please note I also have the jsp page directive as it was used in 9.0.3.
<%@page language ="java" contentType="text/html; charset=UTF-8" %>
Any help will be appreciated. Please try testing on German umlaut character ü (ms keyboard entry ALT+129).
Thanks,
ddasIn previous OC4J versions, the "servlet-webdir"
attribute was used as the default servlet path
whenever there was no "servlet-mapping" element
defined in the "web.xml" file of the Web application.
The above excerpt indicates that this is no longer
true for OC4J 10.1.3 -- unless you set the java
[System] property "http.webdir.enable" to 'true'. In
fact, without a "servlet-mapping" element you cannot
activate your servlet at all!
My point is that after reading the above, that I must
forget everything I knew about OC4J (in versions
prior to 10.1.3). 10.1.3 is a totally
different product to its predecessors. I must now
start learning OC4J from scratch. So pardon me while
I throw the last four years of my work experience
with OC4J down the toilet.I can see your point and share your sentiment. However, your last exaggeration sounds funny. That was just a minor change needed for security requirement. In case you use Jdeveloper, servlet declaration and mapping will be done automatically for you. After all, if it does not work, this forum and formal oracle support will help you.
Apart from usnig this post to vent my anger and
frustration with the Oracle OC4J development team
(yes you, messrs Debu Panda, Steve Button, Qiang Lin,
Deepak Arora and others), I wish to inform you,
Matic, that if the behaviour of the "servlet-webdir"
attribute has changed, most probably that of the
"default-charset" attribute has also changed.
So please Oracle OC4J people, inform us where we can
find information/documentation explaining the
behaviour changes of OC4J 10.1.3.0.0 stand-alone as
compared with previous versions.Thanks for the suggestion, Avi. I will ask the documentation writer to see if they have documented that change of behavior of the "servlet-webdir" and if not, document them in an appropriate book such as upgrade guide.
By the way, I do not think the semantic of "default-charset" attribute has changed from 10.1.2 to 10.1.3. If you know it otherwise, please provide a test case for me. Thanks. -
Dabu etal: per war classloader vs XML API per war
OC4J classloader folks;
A general problem for the deployment folks/production env
is
how to host or configure the deployment of war's that need specific versions or
specific vendor's XML apis.
IMO the XML api vendors, designers have not helped at all with package name spaces and
top level factories and
VM wide system properties for determining the instandiated engine.
Anybody have thoughts on how a OC4J production environment can effectively be
a "job shop" for deploying anonymous wars who might have internal dependancies on specific XML parsers, versions or vendors?
Ok, so a little easier, we're not an anonymous war job-shop. We do know what's
being deployed and have complete control over the wars. What help is this in
solving the problem? :)
Thanks, curtHi Lars,
Hay, the new tag <web-app-class-loader search-local-classes-first="true" />
for 903 is great!
I stand corrected, I would have bet $10, maybe $50, that this
is the default behavior of a J2EE container. :)
But I'm on 902 OC4J so this isn't available anyway.
BTW, whats the rationale for this NOT being default behavior?
You know if other J2EE containers do class loading from world on down to war by default
too?
Thanks
curt -
OC4j CLASSPATH unable to find my jar, no EJB3 injection
Hello,
I have a problem deploying my application.
I am working with OAS 10.1.3.3, developing an application with jdeveloper 10.1.x.
I need to deploy an EJB3 application, but I have a lot of deployment problems. To find a solution I tried a step by step deployment.
Firs: From my servlet I call some functions, which using classes from a separate jar file. The oc4j classloader can´t find my classes. I checked a lot to fix that with no success. The library is located in WEB-INF/lib, the element can be found. The error message states that the class can´t be found in the class path, only in the lib path. But this should be done automatically.
I tried some different entries in the MANIFEST.mf, but with the same result. I thought it could be a loader problem, but as stated it´s the same loader. I still don´t have any idea.
10/12/08 17:08:33.860 asn1-frontend-war: 10.1.3.3.0 Started
10/12/08 17:10:06.999 asn1-frontend-war: Servlet error
oracle.classloader.util.AnnotatedNoClassDefFoundError:
Missing class: com.opensynergy.car2xreference.backend.model.typeuniverse.generic.communicationprotocol.Message
Dependent class: com.opensynergy.car2xreference.backend.asn1.marben.impl.ASN1CoderFacade
Loader: asn1-frontend-war.web.asn1-frontend-war:0.0.0
Code-Source: /opt/oracle/ias10133/j2ee/home/applications/asn1-frontend-war/asn1-frontend-war/WEB-INF/classes/
Configuration: WEB-INF/classes/ in /opt/oracle/ias10133/j2ee/home/applications/asn1-frontend-war/asn1-frontend-war/WEB-INF/classes
The missing class is available from the following locations:
1. Code-Source: /opt/oracle/ias10133/j2ee/home/applications/asn1-frontend-war/asn1-frontend-war/WEB-INF/lib/model-jar.jar (from WEB-INF/lib/ directory in /opt/oracle/ias10133/j2ee/home/applications/asn1-frontend-war/asn1-frontend-war/WEB-INF/lib)
This code-source is available in loader asn1-frontend-war.web.asn1-frontend-war:0.0.0.
at oracle.classloader.PolicyClassLoader.handleClassNotFound (PolicyClassLoader.java:2068) [opt/oracle/ias10133/j2ee/home/lib/pcl.jar (from system property java.class.path), by sun.misc.Launcher$AppClassLoader@27634497]
Second problem is, that I get an NullPointerException, if I call any EJB from my servlet. My code isn´t special. To fix that I tried a simple hello world example from my servlet which fails.
The code is
public class VehicleEndpointBackingBeanImpl extends VehicleEndpoint {
@EJB(name = "EJBManager")
EJBManager manager;
void process(){
manager.sayHello();
and the EJB looks like that:
@Stateless(name="EJBManager")
@StatelessDeployment(
minInstances=5,
poolCacheTimeout=90
public class EJBManagerBean implements EJBManager, EJBManagerLocal {
@PersistenceContext(unitName="JobEventMechanism")
as you can see a simple hello world example.
I checked the EnterpriseManager and found, that the application contains the EJB Session Bean. The table from em is:
Session Beans
Name [Sorted in ascending order] Type Active EJB Methods Method Execution Time (seconds) Method Execution Rate (per second)
"EJBManager" Stateless Session Bean Unavailable Unavailable Unavailable
In some examples I have seen that people working with InitialContext, but I am sure that in EJB3 it isn´t necessary.
I extended the application with an ejb-jar.xml where I added
<enterprise-beans>
<session>
<ejb-name>EJBManager</ejb-name>
</session>
with no effect. So how can I fix this?
Any help welcome, I can´t find a solution. Are there some hints for JDEveloper or so?
Bye
Rolf-Dieteryes Everything you say is right in my prog. but it still does n't works.
i haven't set my j2ee_classpath & does it have anything to do with my error.
if so, where to find the drivers(MS-SQL) .jar file.
Thank You for Your reply
-Suresh Kumar.R -
servlet crashes at run time:
06/09/27 16:44:52 CharScanner; panic: ClassNotFoundException: org.antlr.stringtemplate.language.ChunkToken
06/09/27 16:44:52 Shutting down OC4J...
I've checked and the class is included in the project libraries (In fact I got a little frustrated and included all the JBoss rules jars.
anyhow I don't see why it can't find an included libraryCan you try and see if copying the jar files to the
[jdev-root]\j2ee\home\lib directory helps?That didn't help unfortunately. I've been trying to understand how oc4j classloading works - were you assuming that:
"The missing class is present, but the loader configured to use it is a child of the initiating loader." - (from the ..conatainers for j2ee developers guide)?
I've also tried deploying to a .war file in JDeveloper and tested it with tomcat where it works fine. Deploying the same .war file thorugh the oc4j (launched in standalone mode) web interface results in the same problem - bringing down the oc4j server - as it does clicking 'run' in JDeveloper.
Is there some code I can put in my servlet (it's an extremely simple web-app to test using drools with oc4j) to output what classloaders are active and where they are looking? I've never had to do this before either. -
AspectJ load time weaving AnnotatedNoClassDefFoundError
I am trying to use AspectJ load time weaving on an application running on OC4J 10.1 on JRE 1.5. I get AnnotatedNoClassDefFoundError with Missing class: org.aspectj.runtime.internal.AroundClosure message.
Here is what I am doing:
1. Starting the server with JVM argument -javaagent:aspectjweaver.jar to enable AspectJ load time weaving.
2. I put an AspectJ library MaintainJAspect.jar under j2ee\home\applib folder.
3. I put the aspect defined in aop.xml at j2ee\home\applib\META-INF\aop.xml .
The aspect defined in aop.xml is properly weaved into the application class (I can see in the dumped source). But when the application is running, it fails with the message pasted below.
My question is, while it says that the missing class is available in oc4j classloader, which is parent of system and application class loaders, why is it not available to my application?
Thanks in advance,
Choudary Kothapalli.
oracle.classloader.util.AnnotatedNoClassDefFoundError:
Missing class: org.aspectj.runtime.internal.AroundClosure
Dependent class: com.maintainj.aspect.ExecutionAspect
Loader: global.libraries:1.0
Code-Source: /C:/Programs/oc4j10/j2ee/home/applib/MaintainJAspect.jar
Configuration: <code-source> in /c:/Programs/oc4j10/j2ee/home/config/server.xml
The missing class is available from the following locations:
1. Code-Source: /C:/Programs/oc4j10/j2ee/home/maintainj/aspectjweaver.jar (from system property java.class.path)
This code-source is available in loader oc4j:10.1.3.
at oracle.classloader.PolicyClassLoader.handleClassNotFound (PolicyClassLoader.java:2068) [C:/Programs/oc4j10/j2ee/home/lib/pcl.jar (from system property java.class.path), by sun.misc.Launcher$AppClassLoader@9627532]
at oracle.classloader.PolicyClassLoader.internalLoadClass (PolicyClassLoader.java:1679) [C:/Programs/oc4j10/j2ee/home/lib/pcl.jar (from system property java.class.path), by sun.misc.Launcher$AppClassLoader@9627532]
at oracle.classloader.PolicyClassLoader.loadClass (PolicyClassLoader.java:1635) [C:/Programs/oc4j10/j2ee/home/lib/pcl.jar (from system property java.class.path), by sun.misc.Launcher$AppClassLoader@9627532]
at oracle.classloader.PolicyClassLoader.loadClass (PolicyClassLoader.java:1620) [C:/Programs/oc4j10/j2ee/home/lib/pcl.jar (from system property java.class.path), by sun.misc.Launcher$AppClassLoader@9627532]
at java.lang.ClassLoader.loadClassInternal (ClassLoader.java:319) [jre bootstrap, by jre.bootstrap:1.5.0_08]
at com.maintainj.aspect.ExecutionAspect.ajc$around$com_maintainj_aspect_ExecutionAspect$1$133697c9proceed (ExecutionAspect.aj:1) [C:/Programs/oc4j10/j2ee/home/applib/MaintainJAspect.jar (from <code-source> in /c:/Programs/oc4j10/j2ee/home/config/server.xml), by global.libraries:1.0]
at com.maintainj.aspect.ExecutionAspect.ajc$around$com_maintainj_aspect_ExecutionAspect$1$133697c9 (ExecutionAspect.aj:42) [C:/Programs/oc4j10/j2ee/home/applib/MaintainJAspect.jar (from <code-source> in /c:/Programs/oc4j10/j2ee/home/config/server.xml), by global.libraries:1.0]
at simple.SimpleServlet.<init> (SimpleServlet.java:12) [C:/Programs/oc4j10/j2ee/home/applications/SimpleWeb/SimpleWeb/WEB-INF/classes/ (from WEB-INF/classes/ in C:\Programs\oc4j10\j2ee\home\applications\SimpleWeb\SimpleWeb\WEB-INF\classes), by SimpleWeb.web.SimpleWeb:0.0.0]Not sure what you mean by "support". AspectJ rewrites bytecodes so the VM will just execute them. You'll probably encounter increased memory usage with load-time weaving as class loading/initialization occurs in Immortal memory. Also load-time weaving won't be compatible with Java RTS's Initialization Time Compilation (ITC) feature ... or at least not the pre-initialization part. It's likely that no-heap threads won't work well running weaved code if there are any references back to heap-allocated AspectJ runtime objects, and similarly (like most libraries) it's not likely to work from scoped memory.
HTH.
David Holmes -
Dependency Package in Exploded Application WLS6.1sp2
I am working with the sample application used in Chapter 24 of Professional
Java Server Programming J2EE 1.3 Edition. The application is a test for
displaying ClassLoader information for ejb and web modules and their
associated dependent packages. I am able to deploy the packaged EAR without
a problem under WLS 6.1sp2, but when I attempt to deploy the same
application in exploded format, I am getting a NoClassDefFoundError during
deployment of the ejb module. The manifest files are unchanged and the
dependent jar files are located at the root of the exploded application...
below is a sample of the directory structure.
My question is, where should I put dependent classes and/or packages in an
exploded application and how do I setup the manifest to load them?
Thanks in advance for any help,
Tim Kuntz
\ear_root
Util1.jar
Util3.jar
Util6.jar
Util7.jar
\ejb
\depend1
\META-INF
MANIFEST.MF
Manifest-Version: 1.0
Class-Path: Util1.jar Util3.jar Util6.jar Util7.jar
http://www.theserverside.com/resources/articles/J2EE-Deployment/chapter.htmlHere is the answer I received from a BEA Developer Relations Engineer
regarding this...
"When you deploy the EAR file, it is deployed under one classloader. When
you deploy the EAR file in the exploded format, then each EJB jar file is
loaded in a separate classloader. As long as the dependent (helper) classes
are in the classpath, you can always redeploy the EJB jar file, but if you
want to make changes to the dependent class then you have to restart the
WebLogic Server."
"Tim Kuntz" <[email protected]> wrote in message
news:3c616a90$[email protected]..
I am working with the sample application used in Chapter 24 ofProfessional
Java Server Programming J2EE 1.3 Edition. The application is a test for
displaying ClassLoader information for ejb and web modules and their
associated dependent packages. I am able to deploy the packaged EARwithout
a problem under WLS 6.1sp2, but when I attempt to deploy the same
application in exploded format, I am getting a NoClassDefFoundError during
deployment of the ejb module. The manifest files are unchanged and the
dependent jar files are located at the root of the exploded application...
below is a sample of the directory structure.
My question is, where should I put dependent classes and/or packages in an
exploded application and how do I setup the manifest to load them?
Thanks in advance for any help,
Tim Kuntz
\ear_root
Util1.jar
Util3.jar
Util6.jar
Util7.jar
\ejb
\depend1
\META-INF
MANIFEST.MF
Manifest-Version: 1.0
Class-Path: Util1.jar Util3.jar Util6.jar Util7.jar
http://www.theserverside.com/resources/articles/J2EE-Deployment/chapter.html
>
> -
Jdbc 10.1.0.4 & OCF4 9.0.4
Hi all,
I've replaced the jdbc Thin driver 9i (nls_charset12.jar, classes12.jar) by the 10g version (ojdbc14.jar, orai18n.jar, ocrs12.jar) in my application.
It compiles fine, but when the application is deployed in the middle tier (iAS & OC4J 9.0.4.0.0), I got this error:
java.lang.NoSuchMethodError: oracle.sql.CharacterSet.AL32UTF8ToString([BII)Ljava/lang/String; at oracle.jdbc.driver.DBConversion.CharBytesToString(DBConversion.java:527) at oracle.jdbc.driver.T4CTTIoauthenticate.receiveOauth(T4CTTIoauthenticate.java:672) at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:308) at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:348) at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:151) at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32) at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:563) at java.sql.DriverManager.getConnection(DriverManager.java:512) at java.sql.DriverManager.getConnection(DriverManager.java:140) at oracle.toplink.sessions.DefaultConnector.connect(DefaultConnector.java:57) at oracle.toplink.sessions.DatabaseLogin.connect(DatabaseLogin.java:218) at oracle.toplink.internal.databaseaccess.DatabaseAccessor.connect(DatabaseAccessor.java:398) at oracle.toplink.internal.databaseaccess.DatabaseAccessor.connect(DatabaseAccessor.java:423) at oracle.toplink.threetier.ConnectionPool.buildConnection(ConnectionPool.java:90) at oracle.toplink.threetier.ConnectionPool.startUp(ConnectionPool.java:328) at oracle.toplink.threetier.ServerSession.connect(ServerSession.java:447) at oracle.toplink.publicinterface.DatabaseSession.login(DatabaseSession.java:531) at oracle.toplink.tools.sessionmanagement.SessionManager.getSession(SessionManager.java:250) at oracle.toplink.tools.sessionmanagement.SessionManager.getSession(SessionManager.java:181) at oracle.skill.model.toplink.common.ToplinkUtils.getSession(ToplinkUtils.java:174) at oracle.skill.model.toplink.common.ToplinkUtils.getClientSession(ToplinkUtils.java:163) at oracle.security.controller.struts.action.CheckAppAvailability.execute(CheckAppAvailability.java:83) at oracle.jheadstart.controller.struts.action.JhsAction.execute(JhsAction.java:245) at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484) at oracle.jheadstart.controller.struts.JhsRequestProcessor.processActionPerform(JhsRequestProcessor.java:351) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274) at oracle.jheadstart.controller.struts.JhsRequestProcessor.process(JhsRequestProcessor.java:635) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482) at oracle.jheadstart.controller.struts.JhsActionServlet.process(JhsActionServlet.java:139) at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507) at javax.servlet.http.HttpServlet.service(HttpServlet.java:740) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.http.ResourceFilterChain.doFilter(ResourceFilterChain.java:65) at oracle.security.controller.AuthenticationFilter.doFilter(AuthenticationFilter.java:171) at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.http.EvermindFilterChain.doFilter(EvermindFilterChain.java:16) at oracle.jheadstart.controller.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:174) at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:600) at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:317) at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:790) at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.http.AJPRequestHandler.run(AJPRequestHandler.java:208) at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.http.AJPRequestHandler.run(AJPRequestHandler.java:125) at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:192) at java.lang.Thread.run(Thread.java:534)
I just want my application use only those libraries placed in the ear file, none from the continer ..
In the Jdbc Forum, I was told that the issue is probably due to the way the OC4J Classloader works ..
Could someone help me ?
Thanks in advance,
Eduardo.Eduardo,
Have you either:
(1) edited the MANIFEST.MF within oc4j.jar so that there is no reference to classes12.jar or classes12dms.jar and instead there are references to ojdbc14.jar which you will have copied into jdbc/lib
or
(2) have a look at Note:305679.1 - they have another way of editing the jdbc driver config there using java.ext.dir
Regards,
pj. -
Modifying eBusiness 11.5.10.2 OAF page?
We are on eBusiness 11.5.10.2 and I would like to modify a workflow email notification. This email notification calls an OAF region. The OAF region is what I need to modify. Can you please tell me what development tools I will need and what version of JDeveloper I need to install?
Thanks for your time.
Shaunasphelps wrote:
No it is not in the query... I'll probably need help when I get to that point as well. :(
Right now I'm having an issue configuring JDeveloper 9i. Where can I find the right DBC file to use? Where can I get the OC4J connection information from?This link should be helpful -- https://forums.oracle.com/forums/search.jspa?threadID=&q=JDeveloper+AND+DBC&objID=f210&dateRange=all&userID=&numResults=15&rankBy=10001
Thanks,
Hussein -
Reloading classes on the fly?
Is there a convenient way to reload changed classes without shutting down and restarting the cluster nodes? I would like to just do cache.clear() then reload the class files and begin populating the cache with the new objects.
Thanks,
AndrewThat depends on how the classes are loaded.
You probably used the CLASSPATH environment variable to load classes into classpath.
In this case you have to restart your nodes in order for new classes to be loaded by the JVM.
To my knowledge, Coherence does not provide any separate classloading features as, for example, an application server does
where each deployed application gets its own classloader on top of the system classloader defined by CLASSPATH.
In order to provide this same functionality you have to write a separate classloader that loads the classes of the types
you load in the cache. In this case the coherence.jar etcetera are in the system classloader (CLASSPATH), while your
application classes are loaded by a custom classloader.
ConfigurablePofContext is ClassLoaderAware (http://download.oracle.com/docs/cd/E18686_01/coh.37/e18683/com/tangosol/io/ClassLoaderAware.html)
From the ConfigurablePofContext API (http://download.oracle.com/docs/cd/E18686_01/coh.37/e18683/com/tangosol/io/pof/ConfigurablePofContext.html):
"It is conceivable that the ConfigurablePofContext is loaded by the system ClassLoader (or some other relatively global ClassLoader), while the objects
deserialized by the PofContext are loaded by an application-specific ClassLoader, such as is typical within an application server. The ConfigurablePofContext
is designed to load the configuration, the POF-able object classes and the PofSerializer classes from within a specified ClassLoader context, and to pass
the ClassLoader information on to the PofSerializer instances, just in case they are not loaded from within the application's ClassLoader context.
In other words, the ConfigurablePofContext, its configuration, the PofSerializer classes and the POF-able classes can all be loaded by the same ClassLoader,
or they can all be loaded by different ClassLoaders, so long as the configuration, the POF-able classes and the PofSerializer classes can be loaded by either
the specified ClassLoader or by the ClassLoader that loaded the ConfigurablePofContext itself."
The problem is (with most classloading) how to unload the classes that are referenced in a runtime environment. This usually means, in the case of an
application server, to delete a certain deployment and redeploy again.
Hope it makes a little sense.
An example of a custom classloader and same more background on classloading can be found here: http://middlewaremagic.com/weblogic/?p=6725 -
I have a project that runs great on oc4j 10.0.3.4 under jdk 1.6. (everything worked great)
I recently tried to run it under jdk 1.5 and i've run into a little problem with the shared-lib's:
The classloader's debug file reports the following: (i have translated some of it)
Class error: oracle.classloader.util.AnnotatedNoClassDefFoundError:
Missing class: javax.xml.bind.JAXBContext
Dependant class: nl.comp.util.XmlUtil
Classloader: comp:0.1
Code-source: /C:/programs/oc4j/j2ee/home/shared-lib/comp/0.1/comp.jar
Configuration: <code-source> in /c:/programs/oc4j/j2ee/home/config/server.xml
The missing class is available from the following location:
1. Code-source: /C:/programs/oc4j/lib/xml.jar (from <code-source> (ignore manifest Class-Path) in META-INF/boot.xml in C:\programs\oc4j\j2ee\home\oc4j.jar)
This code-source is available from classloader oracle.xml:10.1.0_2
2. Code-source: /C:/programs/oc4j/j2ee/home/shared-lib/jaxb/2.1.6/jaxb-api.jar (from <code-source> in /c:/programs/oc4j/j2ee/home/config/server.xml)
This code-source is available from classloader jaxb:2.1.6.
So the classloader knows where to find the necessary lib, but it isn't loading it? If i run the exact same code (with same descriptors and everything) under jdk 1.6, it works, under 1.5 i get the above error.
What is different on the class loader level between the two jdk versions that might affect the program in such a way?
Need i update a descriptor or do something else?Jack,
Not a definitive answer for you (sorry), just a few suggestions (that I assume you are unaware of).
1. Try unsetting your "ClassPath" variable. Open a "command" window and type the following:
set ClassPath=2. Launch OC4J from the directory where the "oc4j.jar" file is located, for example:
D:
cd oc4j\j2ee\home
java -jar oc4j.jar3. I'm just guessing, but if your drive "D:" is a mapped, network drive, this may be causing the problem. Perhaps try installing OC4J on a local drive?
Hope this helps.
Good Luck,
Avi.
Maybe you are looking for
-
After running bootcamp, DVD drive is detected by Windows 8. But after installing drivers, no longer can detect. Device Manager shows that DVD drive is unplugged! Drivers in Bootcamp "removed" the DVD drive. I think there is an issue because I reinsta
-
I am having a strange error I never had before. My program gives me the NumberFormatException every time, the matter what I type in. It seems to be trying to parse the text in the println instead of the actual input, because when I told it to print o
-
I'm sorry but the move tool isn't working again. I have a blue background layer and a text layer. Neither of the layers are locked. When I'm on the background layer the handles on the move tool appear but they don't appear on the text layer. I ne
-
We have a ERP 3004 system The messges have come in from XI and are sitting in the inbound queues and not going forward can you please help me how to start the messages going through Thanks Nikhil
-
How do I disable Computrace on Yoga 13
I have found that having Computrace enabled seems to be preventing me from updating my Yoga 13 BIOS. Whenever I try the BIOS update I get an error: ''the system is currently under Intel Ant-Theft Technology 4.0 protection. Please un-enroll the client