Praveen's Blog

February 27, 2012

Object references

Filed under: Tech stuff — Tags: , , — praveenmyls @ 11:01 am

select * from dba_dependencies where referenced_name='IOT_MACHINES'

February 21, 2012

Session and lock details in oracle

Filed under: Tech stuff — Tags: , , — praveenmyls @ 10:49 am

SELECT sess.process,sess.BLOCKING_SESSION, sess.SID, sess.serial#, sess.status, sess.action,
sess.BLOCKING_SESSION_STATUS, sess.state, sess.username, sess.schemaname,
sql.sql_text
FROM v$session sess, v$sql SQL
WHERE sql.sql_id(+) = sess.sql_id
AND sess.type = 'USER';

Get details on Locks

SELECT a.session_id, a.oracle_username, a.os_user_name, b.owner "OBJECT OWNER",
b.object_name, b.object_type, a.locked_mode
FROM (SELECT object_id, SESSION_ID, ORACLE_USERNAME, OS_USER_NAME, LOCKED_MODE
FROM v$locked_object) a,
(SELECT object_id, owner, object_name, object_type FROM dba_objects) b
WHERE a.object_id = b.object_id;

February 9, 2012

Unattended SFTP

Filed under: Tech stuff — Tags: , , , , — praveenmyls @ 7:14 am

To do unattended SFTP, say for a cron job.
Do the following:

    • On the source machine, Go to home/.ssh folder
    • Run ssh-keygen -trsa
    • Do not enter any password when prompted
    • cat **.pub
    • copy the public key
    • On the destination machine: Go to home/.ssh
    • vi authorized_keys, and paste the public key

Importantly: the access rights need to be set

  • .ssh folder has to be drwxr-xr-x
  • authorized_keys has to be -rw——-
  • *.pub has to be -rw-r–r–

Alter Materialized view in Oracle

Filed under: Tech stuff — Tags: , , , — praveenmyls @ 7:04 am

Apparently, there is no alter script for materialized view. You need to drop/recreate it. But there seems to be a simpler way.

Check out this link

SFTP EOF bash

Filed under: Tech stuff — praveenmyls @ 6:58 am

I had this script where I performed SFTP on a linux box. The issue I had was that after SFTP was done, the remaining commands in the script did not get executed.

sftp $USER@$REMOTEHOST << EOF
mget $REMOTEPATH/$FILENAME $LOCALPATH
bye
EOF
echo “Unzipping “$LOCALPATH/$FILENAME >> $LOGFILE
gzip -df $LOCALPATH/$FILENAME

The gzip or the echo after EOF never got executed. Apparently, the problem was that the EOF, shouldnt have a any leading or trailing spaces. It should be at the start of the line.

Anyway, EOF means, hey , whatever command.. from now on, all the commands you get, treat them as command line instructions until you meet EOF again.

 

 

 

September 22, 2011

Multi line search and replace using sed

Filed under: Tech stuff — praveenmyls @ 12:51 pm


/abcd/{
N
s/9.4.0/10.5.0-SNAPSHOT/
}

August 19, 2011

Dynamically Typed, Statically Typed, Strongly Typed, Weakly Typed

Filed under: Tech stuff — Tags: , , , — praveenmyls @ 7:30 am

A Programming language can be Dynamically Typed, Statically typed, Strongly Typed and Weakly Typed. Whats the difference?
Dynamically Typed:
There is no type check at compile time. If you pass wrong parameter types to a method, no compilation errors occur. Runtime failures happen. Examples are Ruby, Python.
Statically Typed:
There is type check at compile time. If you pass wrong parameter types to a method, compilation errors occur. Example : Java
Weakly Typed:
If type conversion happens, when you send different parameter to that expected (If possible, ofcourse).
Strongly Typed: NO type conversion happens, when you send different parameter to that expected (If possible, ofcourse).

Ruby is Strongly typed and dynamically typed.

July 19, 2011

Birthday Paradox

Filed under: Puzzles — Tags: , — praveenmyls @ 6:18 pm

Whats the birthday paradox?
How many people should be there in a room so that there is 50% chance that two people share the same birthday?

Solution:
Lets assume its not a leap year.
Let P be the probability where none of them share a birthday. Then (1 – P) is the probability where atleast 2 of them share a birthday.

For n people, if they do not share a birthday, the first one can have 365 options, the second one 364..etc etc
hence, P = ( 365 * 364 * 363 * ….. * (365 – n) ) / 365^n.

Here, I need some kind of a program to figure out the n. The answer came out to be 23. P came to be 0.49. 1-P = 0.50. Thats 50% chance.

September 22, 2010

java getResource()

Filed under: Tech stuff — Tags: , , , , , — praveenmyls @ 7:23 pm

try {
	    System.out.println("TestFindResource.class.getClass().getResource(\"config/x.prop\");");
	    URL url = TestFindResource.class.getClass().getResource("config/x.prop");
	    p.load(url.openStream());
	} catch (Exception e) {
	    // TODO Auto-generated catch block
	    e.printStackTrace();
	}

TestFindResource.class.getClass().getResource(“config/x.prop”);
java.lang.NullPointerException
at TestFindResource.main(TestFindResource.java:11)

	try {
	    System.out.println("TestFindResource.class.getClass().getResource(/config/x.prop)");
	    URL url =  TestFindResource.class.getClass().getResource("/config/x.prop");
	    p.load(url.openStream());
	} catch (Exception e) {
	    // TODO Auto-generated catch block
	    e.printStackTrace();
	}

TestFindResource.class.getClass().getResource(/config/x.prop)

	try {
	    System.out.println("TestFindResource.class.getClass().getResourceAsStream(config/x.prop)");
	    p.load( TestFindResource.class.getClass().getResourceAsStream("config/x.prop"));
	} catch (Exception e) {
	    // TODO Auto-generated catch block
	    e.printStackTrace();
	}

TestFindResource.class.getClass().getResourceAsStream(config/x.prop)
java.lang.NullPointerException
at java.util.Properties$LineReader.readLine(Properties.java:418)
at java.util.Properties.load0(Properties.java:337)
at java.util.Properties.load(Properties.java:325)
at TestFindResource.main(TestFindResource.java:26)

	try {
	    System.out.println("TestFindResource.class.getClass().getResourceAsStream(/config/x.prop)");
	    p.load( TestFindResource.class.getClass().getResourceAsStream("/config/x.prop"));
	} catch (Exception e) {
	    // TODO Auto-generated catch block
	    e.printStackTrace();
	}

TestFindResource.class.getClass().getResourceAsStream(/config/x.prop)

	try {
	    System.out.println("TestFindResource.class.getClassLoader().getResource(config/x.prop)");
	    URL url = TestFindResource.class.getClassLoader().getResource("config/x.prop");
	    p.load(url.openStream());
	} catch (Exception e) {
	    // TODO Auto-generated catch block
	    e.printStackTrace();
	}

TestFindResource.class.getClassLoader().getResource(config/x.prop)

	try {
	    System.out.println("TestFindResource.class.getClassLoader().getResource(/config/x.prop)");
	    URL url = TestFindResource.class.getClassLoader().getResource("/config/x.prop");
	    p.load(url.openStream());
	} catch (Exception e) {
	    // TODO Auto-generated catch block
	    e.printStackTrace();
	}

TestFindResource.class.getClassLoader().getResource(/config/x.prop)
java.lang.NullPointerException
at TestFindResource.main(TestFindResource.java:49)
java.lang.NullPointerException
at java.util.Properties$LineReader.readLine(Properties.java:418)
at java.util.Properties.load0(Properties.java:337)
at java.util.Properties.load(Properties.java:325)
at TestFindResource.main(TestFindResource.java:63)

	try {
	    System.out.println("TestFindResource.class.getClassLoader().getResourceAsStream(config/x.prop)");
	    p.load(TestFindResource.class.getClassLoader().getResourceAsStream("config/x.prop"));
	} catch (Exception e) {
	    // TODO Auto-generated catch block
	    e.printStackTrace();
	}

TestFindResource.class.getClassLoader().getResourceAsStream(config/x.prop)

	try {
	    System.out.println("TestFindResource.class.getClassLoader().getResourceAsStream(/config/x.prop)");
	    p.load( TestFindResource.class.getClassLoader().getResourceAsStream("/config/x.prop"));
	} catch (Exception e) {
	    // TODO Auto-generated catch block
	    e.printStackTrace();
	}

TestFindResource.class.getClassLoader().getResourceAsStream(/config/x.prop)

	try {
	    Enumeration resources = TestFindResource.class.getClassLoader().getResources("config/x.prop");
	    while(resources.hasMoreElements()){
		System.out.println(resources.nextElement());
	    }
	   
	} catch (Exception e) {
	    // TODO Auto-generated catch block
	    e.printStackTrace();
	}

file:/JBossClassloading/CommonLibrary/target/test-classes/config/x.prop

	try {
	    Enumeration resources = TestFindResource.class.getClassLoader().getResources("/config/x.prop");
	    while(resources.hasMoreElements()){
		System.out.println(resources.nextElement());
	    }
	} catch (Exception e) {
	    // TODO Auto-generated catch block
	    e.printStackTrace();
	}
	
    }
}

Nothing prints.

jboss-classloading.xml usecases

Filed under: Tech stuff — Tags: , , , — praveenmyls @ 6:28 pm

Two EJBs.

ConsumerEJB:

@Stateless
@LocalBinding(jndiBinding="service/ProducerServiceBean")
public class ProducerServiceBean implements ProducerServiceLocal,ProducerServiceRemote{
    private Logger logger = Logger.getLogger("ProducerServiceBean");
    
    public String sayHello() {
	logger.info("Called ProducerServiceBean Hello");
	return "Hello";
    }

}

ProducerEJB:

@Stateless
public class ConsumerServiceBean implements ConsumerServiceLocal, ConsumerServiceRemote {

    private Log logger = LogFactory.getLog("ConsumerServiceBean"); 
    
    public boolean callTheOtheEJB() {
	ProducerService myStateless = lookup(ProducerService.class, "service/ProducerServiceBean", true);
	logger.info("Called myStateless sayHello = "+  myStateless.sayHello());
	return true;
    }
}

UseCases:

1. jboss-classloading.xml set in ProducerEJB and ConsumerEJB. Domain : IsolatedDomain, ParentDomain: DefaultDomain.

     

2010-09-14 16:17:13,620 INFO  [ProducerServiceBean] (WorkerThread#0[127.0.0.1:63882]) Called ProducerServiceBean Hello
     2010-09-14 16:17:13,620 INFO  [ConsumerServiceBean] (WorkerThread#0[127.0.0.1:63882]) Called myStateless sayHello = Hello

2. jboss-classloading.xml set in ProducerEJB, NOT in ConsumerEJB. Domain : IsolatedDomain, ParentDomain: DefaultDomain.

<classloading xmlns="urn:jboss:classloading:1.0"
              domain="IsolatedDomain"
              export-all="NON_EMPTY"
              import-all="true">
</classloading>

ProducerEJB cannot access ConsumerEJB. 

Exception in thread “main” javax.ejb.EJBException: Unexpected Error
java.lang.NoClassDefFoundError: com/producer/service/ProducerService
at com.consumer.service.bean.ConsumerServiceBean.callTheOtheEJB(ConsumerServiceBean.java:22)

Caused by: java.lang.ClassNotFoundException: com.producer.service.ProducerService from BaseClassLoader@1aef201d{VFSClassLoaderPolicy@49255dbb{name=vfszip:/jboss-5.1.0.GA/server/default/deploy/ConsumerEJB-0.0.1-SNAPSHOT.jar/ domain=ClassLoaderDomain@10439d3b{name=DefaultDomain parentPolicy=BEFORE parent=org.jboss.bootstrap.NoAnnotationURLClassLoader@4b9a0203} roots=[MemoryContextHandler@875349377[path= context=vfsmemory://h5tb6l-2bxb67-ge39xz9q-1-ge3dbdx1-a1 real=vfsmemory://h5tb6l-2bxb67-ge39xz9q-1-ge3dbdx1-a1], DelegatingHandler@1733997289[path=ConsumerEJB-0.0.1-SNAPSHOT.jar context=file:/jboss-5.1.0.GA/server/default/deploy/ real=file:/jboss-5.1.0.GA/server/default/deploy/ConsumerEJB-0.0.1-SNAPSHOT.jar]]  delegates=null exported=[com.consumer.service.bean, com.consumer.service, META-INF.maven.Examples.ConsumerEJB, META-INF] NON_EMPTY}}
at org.jboss.classloader.spi.base.BaseClassLoader.loadClass(BaseClassLoader.java:448)
at java.lang.ClassLoader.loadClass(ClassLoader.java:250)

3. ProducerEJB: Domain : DefaultDomain, ParentDomain: DefaultDomain. 
     ConsumerEJB:   Domain : IsolatedDomain, ParentDomain: DefaultDomain.

Requirements are resolved in hierarchy. Hence works. ConsumerEJB finds ProducerEJB.

2010-09-14 16:51:00,404 INFO  [ProducerServiceBean] (WorkerThread#0[127.0.0.1:64147]) Called ProducerServiceBean Hello
2010-09-14 16:51:00,405 INFO  [ConsumerServiceBean] (WorkerThread#0[127.0.0.1:64147]) Called myStateless sayHello = Hello
2010-09-14 16:51:00,405 INFO  [ProducerServiceBean] (WorkerThread#0[127.0.0.1:64147]) Called ProducerServiceBean Hello
2010-09-14 16:51:00,405 INFO  [ConsumerServiceBean] (WorkerThread#0[127.0.0.1:64147]) Trying to access ProducerServiceBean Directly : Hello

4. Added wrong pkg in ProducerEJB: jboss-cl.xml (Should have been com.producer.service). Hides OSGI style.

<classloading xmlns="urn:jboss:classloading:1.0" domain="DefaultDomain"
	export-all="NON_EMPTY" import-all="true">
	<capabilities>
		<package name="com.consumer.service" />
	</capabilities>
</classloading>

Exception in thread “main” javax.ejb.EJBException: Unexpected Error
java.lang.NoClassDefFoundError: com/producer/service/ProducerService
at com.consumer.service.bean.ConsumerServiceBean.callTheOtheEJB(ConsumerServiceBean.java:23)
Caused by: java.lang.ClassNotFoundException: com.producer.service.ProducerService from BaseClassLoader@216b907c{VFSClassLoaderPolicy@1cdace08{name=vfszip:/jboss-5.1.0.GA/server/default/deploy/ConsumerEJB-0.0.1-SNAPSHOT.jar/ domain=ClassLoaderDomain@76640885{name=IsolatedDomain parentPolicy=BEFORE parent=ClassLoaderDomain@10439d3b{DefaultDomain}} roots=[MemoryContextHandler@1628208644[path= context=vfsmemory://h5tb6l-2bxb67-ge39xz9q-1-ge3faend-a9 real=vfsmemory://h5tb6l-2bxb67-ge39xz9q-1-ge3faend-a9], DelegatingHandler@1733997289[path=ConsumerEJB-0.0.1-SNAPSHOT.jar context=file:/jboss-5.1.0.GA/server/default/deploy/ real=file:/jboss-5.1.0.GA/server/default/deploy/ConsumerEJB-0.0.1-SNAPSHOT.jar]]  delegates=null exported=[com.consumer.service.bean, com.consumer.service, META-INF.maven.Examples.ConsumerEJB, META-INF] NON_EMPTY}}
at org.jboss.classloader.spi.base.BaseClassLoader.loadClass(BaseClassLoader.java:448

5. ProducerEJB: jboss-cl.xml

<classloading xmlns="urn:jboss:classloading:1.0" domain="DefaultDomain"
	export-all="NON_EMPTY" import-all="true">
	<capabilities>
		<package name="com.producer.service" />
	</capabilities>
</classloading>

2010-09-14 17:05:09,371 INFO  [ProducerServiceBean] (WorkerThread#0[127.0.0.1:64257]) Called ProducerServiceBean Hello
2010-09-14 17:05:09,371 INFO  [ConsumerServiceBean] (WorkerThread#0[127.0.0.1:64257]) Called myStateless sayHello = Hello

Exception in thread “main” javax.ejb.EJBException: Unexpected Error
java.lang.NoClassDefFoundError: com/producer/service/bean/ProducerServiceBean
at com.consumer.service.bean.ConsumerServiceBean.callTheOtheEJB(ConsumerServiceBean.java:25)

Caused by: java.lang.ClassNotFoundException: com.producer.service.bean.ProducerServiceBean from BaseClassLoader@37cbcec3{VFSClassLoaderPolicy@257380d3{name=vfszip:/jboss-5.1.0.GA/server/default/deploy/ConsumerEJB-0.0.1-SNAPSHOT.jar/ domain=ClassLoaderDomain@62ed088a{name=IsolatedDomain parentPolicy=BEFORE parent=ClassLoaderDomain@10439d3b{DefaultDomain}} roots=[MemoryContextHandler@1108258778[path= context=vfsmemory://h5tb6l-2bxb67-ge39xz9q-1-ge3fjo8v-aa real=vfsmemory://h5tb6l-2bxb67-ge39xz9q-1-ge3fjo8v-aa], DelegatingHandler@1733997289[path=ConsumerEJB-0.0.1-SNAPSHOT.jar context=file:/jboss-5.1.0.GA/server/default/deploy/ real=file:/jboss-5.1.0.GA/server/default/deploy/ConsumerEJB-0.0.1-SNAPSHOT.jar]]  delegates=null exported=[com.consumer.service.bean, com.consumer.service, META-INF.maven.Examples.ConsumerEJB, META-INF] NON_EMPTY}}

6. Different domains for ProducerEJB and ConsumerEJB. The classes are not visible to each other.
ProducerEJB:

<classloading xmlns="urn:jboss:classloading:1.0" domain="ConsumerDomain"
	export-all="NON_EMPTY" import-all="true">
	<capabilities>
		<package name="com.producer.service" />
	</capabilities>
</classloading>

ConsumerEJB:

<classloading xmlns="urn:jboss:classloading:1.0"
              domain="ProducerDomain"
              export-all="NON_EMPTY"
              import-all="true">
</classloading>

Exception in thread “main” javax.ejb.EJBException: Unexpected Error
java.lang.NoClassDefFoundError: com/producer/service/ProducerService
at com.consumer.service.bean.ConsumerServiceBean.callTheOtheEJB(ConsumerServiceBean.java:23)

7. Invalid “requirements” tag in ConsumerEJB.

<classloading xmlns="urn:jboss:classloading:1.0" domain="ProducerDomain"
	export-all="NON_EMPTY" import-all="true">
	<requirements>
		<module name="CommonLibrary.jar"/>
	</requirements>
</classloading>

DEPLOYMENTS MISSING DEPENDENCIES:
  Deployment “vfszip:/jboss-5.1.0.GA/server/default/deploy/ConsumerEJB-0.0.1-SNAPSHOT.jar/” is missing the following dependencies:
    Dependency “” (should be in state “ClassLoader”, but is actually in state “** UNRESOLVED ModuleRequirement{CommonLibrary.jar [0.0.0,?)} **")

DEPLOYMENTS IN ERROR:
  Deployment "" is in error due to the following reason(s): ** UNRESOLVED ModuleRequirement{CommonLibrary.jar [0.0.0,?)} **

at org.jboss.deployers.plugins.deployers.DeployersImpl.checkComplete(DeployersImpl.java:993)

8. Added correct "requirements" tag in ConsumerEJB.

<classloading xmlns="urn:jboss:classloading:1.0" domain="ProducerDomain"
	export-all="NON_EMPTY" import-all="true">
	<requirements>
		<module name="CommonLibrary-0.0.1-SNAPSHOT.jar"/>
	</requirements>
</classloading>

Exception in thread “main” javax.ejb.EJBException: Unexpected Error
java.lang.NoClassDefFoundError: com/producer/service/ProducerService
at com.consumer.service.bean.ConsumerServiceBean.callTheOtheEJB(ConsumerServiceBean.java:25)

Caused by: java.lang.ClassNotFoundException: com.producer.service.ProducerService from BaseClassLoader@1ee35bb2{VFSClassLoaderPolicy@609912f5{name=vfszip:/jboss-5.1.0.GA/server/default/deploy/ConsumerEJB-0.0.1-SNAPSHOT.jar/ domain=ClassLoaderDomain@76a45568{name=ProducerDomain parentPolicy=BEFORE parent=ClassLoaderDomain@470794d4{DefaultDomain}} roots=[MemoryContextHandler@1638646878[path= context=vfsmemory://h5tb6l-w1cn9l-ge4g82ce-1-ge4g8rkg-28 real=vfsmemory://h5tb6l-w1cn9l-ge4g82ce-1-ge4g8rkg-28], DelegatingHandler@1710140062[path=ConsumerEJB-0.0.1-SNAPSHOT.jar context=file:/jboss-5.1.0.GA/server/default/deploy/ real=file:/jboss-5.1.0.GA/server/default/deploy/ConsumerEJB-0.0.1-SNAPSHOT.jar]]  delegates=[FilteredDelegateLoader@53e9296a{delegate=VFSClassLoaderPolicy@4ba56ca0{vfszip:/jboss-5.1.0.GA/server/default/deploy/CommonLibrary-0.0.1-SNAPSHOT.jar/}}] exported=[com.consumer.service.bean, com.consumer.service, META-INF.maven.Examples.ConsumerEJB, META-INF] NON_EMPTY}}

9. Added ProducerEJB-0.0.1-SNAPSHOT to module requirements tag. ProducerEJB is deployed after ConsumerEJB, hence deployment fails.

<classloading xmlns="urn:jboss:classloading:1.0" domain="ProducerDomain"
	export-all="NON_EMPTY" import-all="true">
	<requirements>
		<module name="CommonLibrary-0.0.1-SNAPSHOT.jar"/>
		<module name="ProducerEJB-0.0.1-SNAPSHOT.jar"/>
	</requirements>
</classloading>

DEPLOYMENTS MISSING DEPENDENCIES:
  Deployment “vfszip:/jboss-5.1.0.GA/server/default/deploy/ConsumerEJB-0.0.1-SNAPSHOT.jar/” is missing the following dependencies:
    Dependency “” (should be in state “ClassLoader”, but is actually in state “** UNRESOLVED ModuleRequirement{ProducerEJB-0.0.1-SNAPSHOT.jar [0.0.0,?)} **")

DEPLOYMENTS IN ERROR:
  Deployment "" is in error due to the following reason(s): ** UNRESOLVED ModuleRequirement{ProducerEJB-0.0.1-SNAPSHOT.jar [0.0.0,?)} **

10. Add another jar to deploy folder. Not incl in requirements didnt effect it. The class was still visible to ConsumerEJB. Please note that CommonLibrary2-0.0.1-SNAPSHOT isnt part of the requirements and import-all is false. Both the libraries dont have jboss-classloading.xml.

<classloading xmlns="urn:jboss:classloading:1.0" domain="IsolatedDomain"
	export-all="NON_EMPTY" import-all="false">
	<requirements>
		<module name="CommonLibrary-0.0.1-SNAPSHOT.jar"/>
	</requirements>
	<capabilities>
		<package name="com.consumer.service" />
	</capabilities>
</classloading>

Exception in thread “main” javax.ejb.EJBException: Unexpected Error
java.lang.NoClassDefFoundError: com/producer/service/ProducerService
at com.consumer.service.bean.ConsumerServiceBean.callTheOtheEJB(ConsumerServiceBean.java:27)
Caused by: java.lang.ClassNotFoundException: com.producer.service.ProducerService from BaseClassLoader@7febaf45{VFSClassLoaderPolicy@4a401c9f{name=vfszip:/jboss-5.1.0.GA/server/default/deploy/ConsumerEJB-0.0.1-SNAPSHOT.jar/ domain=ClassLoaderDomain@4873269b{name=IsolatedDomain parentPolicy=BEFORE parent=ClassLoaderDomain@10439d3b{DefaultDomain}} roots=[MemoryContextHandler@924266702[path= context=vfsmemory://h5tb6l-bdtj3x-ge4jqt6i-1-ge4l4acd-a4 real=vfsmemory://h5tb6l-bdtj3x-ge4jqt6i-1-ge4l4acd-a4], DelegatingHandler@1206181996[path=ConsumerEJB-0.0.1-SNAPSHOT.jar context=file:/jboss-5.1.0.GA/server/default/deploy/ real=file:/jboss-5.1.0.GA/server/default/deploy/ConsumerEJB-0.0.1-SNAPSHOT.jar]]  delegates=[FilteredDelegateLoader@538540a3{delegate=VFSClassLoaderPolicy@768179c2{vfszip:/jboss-5.1.0.GA/server/default/deploy/CommonLibrary-0.0.1-SNAPSHOT.jar/}}] exported=[com.consumer.service]NON_EMPTY}}

2010-09-15 12:28:55,246 INFO  [ConsumerServiceBean] (WorkerThread#0[127.0.0.1:55994]) new CommonUtils().todaysDate() = Wed Sep 15 12:28:55 PDT 2010
2010-09-15 12:28:55,247 INFO  [ConsumerServiceBean] (WorkerThread#0[127.0.0.1:55994]) new CommonUtils2().todaysDate() = From222 :Wed Sep 15 12:28:55 PDT 2010

11. Adding jboss-classloading.xml to CommonLibrary-0.0.1-SNAPSHOT and CommonLibrary2-0.0.1-SNAPSHOT , ConsumerEJB didnt add any requirements and import-all was FALSE.

Exception in thread “main” javax.ejb.EJBException: Unexpected Error
java.lang.NoClassDefFoundError: com/common/library/CommonUtils
at com.consumer.service.bean.ConsumerServiceBean.callTheOtheEJB(ConsumerServiceBean.java:25)

12.  Adding jboss-classloading.xml to CommonLibrary-0.0.1-SNAPSHOT and CommonLibrary2-0.0.1-SNAPSHOT , ConsumerEJB didnt add any requirements and import-all was TRUE. ConsumerEJB can access CommonLibraries.

2010-09-15 12:40:11,037 INFO  [ConsumerServiceBean] (WorkerThread#0[127.0.0.1:56095]) new CommonUtils().todaysDate() = Wed Sep 15 12:40:11 PDT 2010
2010-09-15 12:40:11,039 INFO  [ConsumerServiceBean] (WorkerThread#0[127.0.0.1:56095]) new CommonUtils2().todaysDate() = From222 :Wed Sep 15 12:40:11 PDT 2010

13.  Adding jboss-classloading.xml to CommonLibrary-0.0.1-SNAPSHOT and CommonLibrary2-0.0.1-SNAPSHOT , ConsumerEJB adds CommonLibrary-0.0.1-SNAPSHOT as requirements and import-all was FALSE. ConsumerEJB can access CommonLibrary, but cannot access CommonLibary2.

<classloading xmlns="urn:jboss:classloading:1.0" domain="IsolatedDomain"
	export-all="NON_EMPTY" import-all="false">
	<requirements>
		<module name="CommonLibrary-0.0.1-SNAPSHOT.jar"/>
	</requirements>
	<capabilities>
		<package name="com.consumer.service" />
	</capabilities>
</classloading>

2010-09-15 12:43:06,435 INFO  [ConsumerServiceBean] (WorkerThread#0[127.0.0.1:56118]) new CommonUtils().todaysDate() = Wed Sep 15 12:43:06 PDT 2010
Exception in thread “main” javax.ejb.EJBException: Unexpected Error
java.lang.NoClassDefFoundError: com/common2/library/CommonUtils
at com.consumer.service.bean.ConsumerServiceBean.callTheOtheEJB(ConsumerServiceBean.java:26)
Caused by: java.lang.ClassNotFoundException: com.common2.library.CommonUtils from BaseClassLoader@4a8c7267{VFSClassLoaderPolicy@4aaaee6d{name=vfszip:/jboss-5.1.0.GA/server/default/deploy/ConsumerEJB-0.0.1-SNAPSHOT.jar/ domain=ClassLoaderDomain@3381423d{name=IsolatedDomain parentPolicy=BEFORE parent=ClassLoaderDomain@10439d3b{DefaultDomain}} roots=[MemoryContextHandler@470506599[path= context=vfsmemory://h5tb6l-bdtj3x-ge4jqt6i-1-ge4lmb30-ae real=vfsmemory://h5tb6l-bdtj3x-ge4jqt6i-1-ge4lmb30-ae], DelegatingHandler@1206181996[path=ConsumerEJB-0.0.1-SNAPSHOT.jar context=file:/jboss-5.1.0.GA/server/default/deploy/ real=file:/jboss-5.1.0.GA/server/default/deploy/ConsumerEJB-0.0.1-SNAPSHOT.jar]]  delegates=[FilteredDelegateLoader@2ddf7c93{delegate=VFSClassLoaderPolicy@f272e4a{vfszip:/jboss-5.1.0.GA/server/default/deploy/CommonLibrary-0.0.1-SNAPSHOT.jar/}}] exported=[com.consumer.service]NON_EMPTY}}

14. Adding jboss-classloading.xml to CommonLibrary-0.0.1-SNAPSHOT and CommonLibrary2-0.0.1-SNAPSHOT , ConsumerEJB adds CommonLibrary-0.0.1-SNAPSHOT,CommonLibrary2-0.0.1-SNAPSHOT  as requirements and import-all was FALSE. ConsumerEJB  doesnt deploy.

2010-09-15 14:27:57,455 ERROR [org.jboss.kernel.plugins.dependency.AbstractKernelController] (main) Error resolving dependencies for ClassLoader: name=vfszip:/jboss-5.1.0.GA/server/default/deploy/ConsumerEJB-0.0.1-SNAPSHOT.jar/ state=Describe mode=Manual requiredState=ClassLoader
java.lang.IllegalStateException: VFSDeploymentClassLoaderPolicyModule CommonLibrary2-0.0.1-SNAPSHOT.jar:0.0.0 cannot be added because it is exports package META-INF which conflicts with VFSDeploymentClassLoaderPolicyModule CommonLibrary-0.0.1-SNAPSHOT.jar:0.0.0
at org.jboss.classloading.spi.dependency.ClassLoadingSpace.join(ClassLoadingSpace.java:223)
at org.jboss.classloading.spi.dependency.ClassLoadingSpace.joinAndResolve(ClassLoadingSpace.java:120)

15. Adding jboss-classloading.xml to CommonLibrary-0.0.1-SNAPSHOT and CommonLibrary2-0.0.1-SNAPSHOT. Excluding META-INF directory resolves the earlier error @ 14. ConsumerEJB adds CommonLibrary-0.0.1-SNAPSHOT,CommonLibrary2-0.0.1-SNAPSHOT  as requirements and import-all was FALSE. 

<classloading xmlns="urn:jboss:classloading:1.0" domain="IsolatedDomain"
	export-all="NON_EMPTY" import-all="false" excluded="META-INF">
</classloading>

2010-09-15 15:04:09,335 INFO  [ConsumerServiceBean] (WorkerThread#0[127.0.0.1:57282]) new CommonUtils().todaysDate() = Wed Sep 15 15:04:09 PDT 2010
2010-09-15 15:04:09,336 INFO  [ConsumerServiceBean] (WorkerThread#0[127.0.0.1:57282]) new CommonUtils2().todaysDate() = From222 :Wed Sep 15 15:04:09 PDT 2010

Exception in thread “main” javax.ejb.EJBException: Unexpected Error
java.lang.NoClassDefFoundError: com/common3/library/CommonUtils
at com.consumer.service.bean.ConsumerServiceBean.callTheOtheEJB(ConsumerServiceBean.java:27)
Caused by: java.lang.ClassNotFoundException: com.common3.library.CommonUtils from BaseClassLoader@2c84d9d{VFSClassLoaderPolicy@2c5f7fd8{name=vfszip:/jboss-5.1.0.GA/server/default/deploy/ConsumerEJB-0.0.1-SNAPSHOT.jar/ domain=ClassLoaderDomain@3f78d35f{name=IsolatedDomain parentPolicy=BEFORE parent=ClassLoaderDomain@3aeebf17{DefaultDomain}} roots=[MemoryContextHandler@834819242[path= context=vfsmemory://h5tb6l-tlfjex-ge4qm7bh-1-ge4qmvy9-29 real=vfsmemory://h5tb6l-tlfjex-ge4qm7bh-1-ge4qmvy9-29], DelegatingHandler@1057935256[path=ConsumerEJB-0.0.1-SNAPSHOT.jar context=file:/jboss-5.1.0.GA/server/default/deploy/ real=file:/jboss-5.1.0.GA/server/default/deploy/ConsumerEJB-0.0.1-SNAPSHOT.jar]]  delegates=[FilteredDelegateLoader@4d447e6b{delegate=VFSClassLoaderPolicy@4a65d816{vfszip:/jboss-5.1.0.GA/server/default/deploy/CommonLibrary-0.0.1-SNAPSHOT.jar/}}, FilteredDelegateLoader@4bc7ca6e{delegate=VFSClassLoaderPolicy@3b887b2{vfszip:/jboss-5.1.0.GA/server/default/deploy/CommonLibrary2-0.0.1-SNAPSHOT.jar/}}] exported=[com.consumer.service]NON_EMPTY}}

16. Added new library called ZZLibrary. Added jboss-classloading.xml to it. Excluded META-INF. This is how jboss-cl for ConsumerEJB looks. Works. 

<classloading xmlns="urn:jboss:classloading:1.0" domain="IsolatedDomain"
	export-all="NON_EMPTY" import-all="false">
	<requirements>
		<module name="CommonLibrary-0.0.1-SNAPSHOT.jar"/>
		<module name="CommonLibrary2-0.0.1-SNAPSHOT.jar"/>
		<module name="ZZLibrary-0.0.1-SNAPSHOT.jar"/>
	</requirements>
	<capabilities>
		<package name="com.consumer.service" />
	</capabilities>
</classloading>

2010-09-15 15:11:57,366 INFO  [ConsumerServiceBean] (WorkerThread#0[127.0.0.1:57354]) new CommonUtils().todaysDate() = Wed Sep 15 15:11:57 PDT 2010
2010-09-15 15:11:57,368 INFO  [ConsumerServiceBean] (WorkerThread#0[127.0.0.1:57354]) new CommonUtils2().todaysDate() = From222 :Wed Sep 15 15:11:57 PDT 2010
2010-09-15 15:11:57,369 INFO  [ConsumerServiceBean] (WorkerThread#0[127.0.0.1:57354]) new CommonUtils3().todaysDate() = FromZZLibrary :Wed Sep 15 15:11:57 PDT 2010

Exception in thread “main” javax.ejb.EJBException: Unexpected Error
java.lang.NoClassDefFoundError: com/producer/service/ProducerService
at com.consumer.service.bean.ConsumerServiceBean.callTheOtheEJB(ConsumerServiceBean.java:28)

17. Added ProducerEJB to ConsumerEJB’s requirements. Added ProducerEJB-0.0.1-SNAPSHOT.jar to ProducerEJB capabilities. But that meant, all the packages were imported.
ConsumerEJB:

<classloading xmlns="urn:jboss:classloading:1.0" domain="IsolatedDomain"
	export-all="NON_EMPTY" import-all="false" excluded="META-INF">
	<requirements>
		<module name="CommonLibrary-0.0.1-SNAPSHOT.jar"/>
		<module name="CommonLibrary2-0.0.1-SNAPSHOT.jar"/>
		<module name="ZZLibrary-0.0.1-SNAPSHOT.jar"/>
		<module name="ProducerEJB-0.0.1-SNAPSHOT.jar"/>
	</requirements>
	<capabilities>
		<package name="com.consumer.service" />
	</capabilities>
</classloading>

ProducerEJB:

<classloading xmlns="urn:jboss:classloading:1.0" domain="IsolatedDomain"
	export-all="NON_EMPTY" import-all="true" excluded="META-INF">
	<capabilities>
		<package name="com.producer.service" />
		<module name="ProducerEJB-0.0.1-SNAPSHOT.jar"/>
	</capabilities>
</classloading>

2010-09-15 15:31:26,385 INFO  [ProducerServiceBean] (WorkerThread#0[127.0.0.1:57509]) Called ProducerServiceBean Hello
2010-09-15 15:31:26,385 INFO  [ConsumerServiceBean] (WorkerThread#0[127.0.0.1:57509]) Called myStateless sayHello = Hello
2010-09-15 15:31:26,386 INFO  [ProducerServiceBean] (WorkerThread#0[127.0.0.1:57509]) Called ProducerServiceBean Hello
2010-09-15 15:31:26,386 INFO  [ConsumerServiceBean] (WorkerThread#0[127.0.0.1:57509]) Trying to access ProducerServiceBean Directly (new ProducerServiceBean()).sayHello(): Hello

18. Same settings as above, expect added com.producer.service.bean to excluded attribute. Looks like the EJBDeployer didnt find the Bean class.

<classloading xmlns="urn:jboss:classloading:1.0" domain="IsolatedDomain"
	export-all="NON_EMPTY" import-all="true" excluded="META-INF,com.producer.service.bean">
	<capabilities>
		<package name="com.producer.service" />
		<module name="ProducerEJB-0.0.1-SNAPSHOT.jar"/>
	</capabilities>
</classloading>

Caused by: java.lang.ClassNotFoundException: com.producer.service.bean.ProducerServiceBean from BaseClassLoader@37ea14c3{VFSClassLoaderPolicy@68f92ae2{name=vfszip:/jboss-5.1.0.GA/server/default/deploy/ProducerEJB-0.0.1-SNAPSHOT.jar/ domain=ClassLoaderDomain@65a45a7f{name=IsolatedDomain parentPolicy=BEFORE parent=ClassLoaderDomain@6da05bdb{DefaultDomain}} roots=[MemoryContextHandler@1047433541[path= context=vfsmemory://h5tb6l-8a1qj2-ge4rx1ww-1-ge4rxpdu-2a real=vfsmemory://h5tb6l-8a1qj2-ge4rx1ww-1-ge4rxpdu-2a], DelegatingHandler@1292069128[path=ProducerEJB-0.0.1-SNAPSHOT.jar context=file:/jboss-5.1.0.GA/server/default/deploy/ real=file:/jboss-5.1.0.GA/server/default/deploy/ProducerEJB-0.0.1-SNAPSHOT.jar]]  delegates=null exported=[com.producer.service] NON_EMPTY}}
at org.jboss.classloader.spi.base.BaseClassLoader.loadClass(BaseClassLoader.java:448)

EAR Setting

1. Added ProducerEJB and ConsumerEJB as ejb-jars. And *Libraries as lib/*.

All the jboss-classloading.xml’s have domain=DefaultDomain.

But, JBoss JMX shows a different picture for EJB’s. The Lib jars are present under DefaultDomain. The EJB’s are in a different domain.

2. Removed jboss-classloading.xml’s from all EJB’s and the jars. There seems to be NO seperate domain created. Everything is in DefaultDomain.

See, No isolated domain

3. Added jb-cl.xml to CommonLibrary. domain=DefaultDomain. No Deployment issues. But isolation didnt happen. My EJB was able to access com.common.library. (Even after removing the capabilities). 

<classloading xmlns="urn:jboss:classloading:1.0" domain="DefaultDomain"
	export-all="NON_EMPTY" import-all="false" excluded="META-INF,com.common.library">
	<capabilities>
		<module name="CommonLibrary-0.0.1-SNAPSHOT.jar" />
	</capabilities>
</classloading>

2010-09-16 12:12:34,333 INFO  [ConsumerServiceBean] (WorkerThread#0[127.0.0.1:50076]) new CommonUtils().todaysDate() = Thu Sep 16 12:12:34 PDT 2010
2010-09-16 12:12:34,334 INFO  [ConsumerServiceBean] (WorkerThread#0[127.0.0.1:50076]) Please keep it a secret:Thu Sep 16 12:12:34 PDT 2010
2010-09-16 12:12:34,335 INFO  [ConsumerServiceBean] (WorkerThread#0[127.0.0.1:50076]) new CommonUtils2().todaysDate() = From222 :Thu Sep 16 12:12:34 PDT 2010
2010-09-16 12:12:34,337 INFO  [ConsumerServiceBean] (WorkerThread#0[127.0.0.1:50076]) new CommonUtils3().todaysDate() = FromZZLibrary :Thu Sep 16 12:12:34 PDT 2010

4. No jb-cl.xml to ProducerEJB. ZAnotherEAR refers to ProducerEJB and does it succesfully.

5. Apparently, if an EJB is part of an EAR. One shouldnt give the “domain”, but just the “parent-domain” tag. Then the behaviour is replicated.
Upon TRACEing the jboss logs upon , I stumbled upon this:

Will use synthetic domain for classloader of subdeployment

I checked org.jboss.deployers.plugins.classloading.AbstractClassLoaderDescribeDeployer.

if (deployment.isTopLevelClassLoader() == false)
{
     if (deployment.getParentDomain() == null) {
            deployment.setDomain(unitName);
            log.debugf("Will use synthetic domain for classloader of subdeployment: %1s", unitName);
     }else{
             log.debugf("Will create top level classloader for subdeployment: %1s", unitName);
     }
  }

It clearly shows, if the parent-domain is missing, the domain is set to the EAR name.
Hence, The jboss-classloading.xml

<classloading xmlns="urn:jboss:classloading:1.0" parent-domain="DefaultDomain"
	export-all="NON_EMPTY" import-all="true" excluded="META-INF">
	<capabilities>
		<package name="<interface-package>" />
	</capabilities>
</classloading>

Older Posts »

Theme: WordPress Classic. Blog at WordPress.com.

Follow

Get every new post delivered to your Inbox.