Re: Test classpath problem in multi module project

2008-03-04 Thread VUB Stefan Seidel

Hi Petr,

I have a default.persistence.properties in the artifact with the EJB3 
abstract test case. There I can specify whatever I like. Also, in the 
jboss in deploy/ejb3.deployer/META-INF there is another 
persistence.properties where I specify the production properties.


Stefan

Petr Nejedly wrote:

Thanks Stefan,

 


Very helpful. Just a question:

 


You said you're using only one persistence.xml for both, testing and
live deployment. How do you specify different Hibernate properties for
those, eg dialect (Oracle vs HSQLDB), auto create schema (on vs off),
etc?

 


Cheers, Petr



The information contained in this email and its attachments is confidential and may be the subject of legal, professional or other privileged information. It is intended only for the named addressees and may not be disclosed to anyone else without consent from On Demand. If you are not the named addressee you must not use, disclose, distribute, copy, print or rely on the contents of this email and should destroy it immediately. Whilst On Demand takes care to protect its systems from electronic virus attack or other harmful event, the firm gives no warranty that this email message (including any attachments to it) is free of any virus or other harmful matter and accepts no responsibility for any loss or damage resulting from the recipient receiving, opening or using it. If you need any further information, please contact the originator of this message on +44 (0)20 7131 6700. Website: www.ondemand.co.uk. Registered Office: 1 Stephen Street, London, W1T 1AL. Registered in the 

UK No.4094951.


This message has been scanned for viruses by BlackSpider MailControl - 
www.blackspider.com




-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Test classpath problem in multi module project

2008-02-28 Thread Petr Nejedly
Thanks Stefan,

 

Very helpful. Just a question:

 

You said you're using only one persistence.xml for both, testing and
live deployment. How do you specify different Hibernate properties for
those, eg dialect (Oracle vs HSQLDB), auto create schema (on vs off),
etc?

 

Cheers, Petr



The information contained in this email and its attachments is confidential and 
may be the subject of legal, professional or other privileged information. It 
is intended only for the named addressees and may not be disclosed to anyone 
else without consent from On Demand. If you are not the named addressee you 
must not use, disclose, distribute, copy, print or rely on the contents of this 
email and should destroy it immediately. Whilst On Demand takes care to protect 
its systems from electronic virus attack or other harmful event, the firm gives 
no warranty that this email message (including any attachments to it) is free 
of any virus or other harmful matter and accepts no responsibility for any loss 
or damage resulting from the recipient receiving, opening or using it. If you 
need any further information, please contact the originator of this message on 
+44 (0)20 7131 6700. Website: www.ondemand.co.uk. Registered Office: 1 Stephen 
Street, London, W1T 1AL. Registered in the UK No.4094951.

This message has been scanned for viruses by BlackSpider MailControl - 
www.blackspider.com


Re: Test classpath problem in multi module project

2008-02-26 Thread VUB Stefan Seidel

Hi Petr,

is seems to me that you're trying to work around maven mechanisms, which 
is usually not a good idea. In this case, although I haven't completely 
understood what you are trying to do, I can share some experience about 
EJB3 and Testing.
I have one artifact P where the JBoss embedded container xml files are 
in P/src/test/resources:

-- default.persistence.properties
-- ejb3-interceptors-aop.xml
-- embedded-jboss-beans.xml

Of P I build a test-jar. P has dependencies to
 -- jboss-ejb3-all
 -- thirdparty-all
 -- hibernate-all
JARs as system.

The artifacts A...O contain EJB3 beans, with only a persistence.xml in
A/src/main/resources/META-INF
which is the production persistence.xml and usually only contains the 
jta-data-source. The artifacts also contain a test-scope dependency to 
the test-jar of P.


There is no other persistence.xml in the projects.

Then I changed embedded-jboss-beans.xml so that our own datasources are 
being created as HSQLDB instances.


For testing EJB3 within their own build cycle, a trick is needed: in 
 I declare that the normal tests should not be run in 
the "test" phase, but rather in the "integration-test" phase:

  
maven-surefire-plugin

  true


  
integration-test

  test


  ${maven.test.skip.exec}

  

  

This has two advantages: Firstly, the built jar is available during the 
tests, secondly, the other dependencies are available as JAR files, not 
as directories.


Then, I have created an Abstract Test Case in P/src/test/java/...:
--- SNIP
import java.io.File;
import java.net.URISyntaxException;

import junit.framework.TestCase;

import org.jboss.ejb3.embedded.EJB3StandaloneBootstrap;

public abstract class AbstractEJB3TestCase extends TestCase {

public AbstractEJB3TestCase() {
super();
}

public AbstractEJB3TestCase(String _name) {
super(_name);
}

public void addEJB3BeanJar(Class _class) {
appendPathToClasspath(_class.getResource(
"/" + _class.getCanonicalName().replace(".", "/") + 
".class").toString().replaceAll(
"-client.jar!", ".jar!").replaceFirst("jar:file:([^!]+).*", 
"$1"));

}

@Override
protected void setUp() throws Exception {
System.setProperty("java.naming.factory.initial",
"org.jnp.interfaces.LocalOnlyContextFactory");
System.setProperty("java.naming.factory.url.pkgs", 
"org.jboss.naming:org.jnp.interfaces");


addBuildJarToClasspath();

EJB3StandaloneBootstrap.boot(null);
EJB3StandaloneBootstrap.scanClasspath();
}

protected void addBuildJarToClasspath() throws URISyntaxException {
final File targetDir = new 
File(this.getClass().getResource("/").toURI()).getParentFile();

File myJar = null;
for (File f : targetDir.listFiles()) {
final String name = f.getName();
if (name.endsWith(".jar") && !name.contains("-test") && 
!name.contains("-client")) {

myJar = f;
break;
}
}
if (myJar != null) {
appendPathToClasspath(myJar.getAbsolutePath());
} else {
System.err.println("WARNING: JAR could not be found in the 
classpath.");

System.err.println("Make sure that surefire runs in phase "
+ "\u00bbintegration-test\u00ab, not in the default 
phase \u00bbtest\u00ab.");

}
}

protected void appendPathToClasspath(final String _ap) {
final String oldCP = System.getProperty("java.class.path");
if (oldCP.contains(_ap) || !_ap.endsWith(".jar")) {
return;
}
System.setProperty("java.class.path", oldCP + 
File.pathSeparatorChar + _ap);

}

@Override
protected void tearDown() throws Exception {
EJB3StandaloneBootstrap.shutdown();
}
}
--- SNIP

This will do several things: Firstly, it searches for the jar that has 
just been built by accessing "/" through the classloader, secondly, it 
will modify java.class.path in order that the JBoss embedded deployer 
will find the JARs and deploy them, thirdly, it allows you to specify 
any EJB3 bean class in addEJB3BeanJar and will search for the 
appropriate JAR file in the classpath and will add it to java.class.path.


The in the EJB3 modules, your test cases just need to extend the 
abstract test case, and your EJB3 beans will be deployed just like in 
production environment, but to a local in-memory HSQLDB. You can insert 
test data after the deploy using dbUnit. You can test your beans without 
any mock objects and just as if you had a JBoss running.


Hope that this was not too long,

Stefan

Petr Nejedly wrote:

Hi guys,

 


I'm trying to solve this issue for a few days and haven't been able to
crack it so far.

Test classpath problem in multi module project

2008-02-26 Thread Petr Nejedly
Hi guys,

 

I'm trying to solve this issue for a few days and haven't been able to
crack it so far. The scenario is following:

 

I have a parent project that includes sub-modules, each having their own
pom.xml. Each of these modules produces an ejb3 package. I want to be
able to run unit/integration tests using the JBoss embedded container on
those modules from the parent project (so that it builds all modules).
The resources are different for the test phase from the ones to be
deployed (obviously). Normally it could all be achieved using
src/main/resources and src/test/tesources but in this case SureFire can
see all the resource files on its classpath and tries to use them (eg
persistence.xml -> tries to deploy test AND live persistence units which
fails the tests).

 

I kind of hacked it so that I'm able to run tests in one module and
package it. I end up with the following structure:

 

A

--target

classes

--META-INF (incl resources for tests, dependent modules can use
these, when deploying this module's EJBs in the embedded JBoss for
example)

test-classes

--A.jar (includes META-INF with resources for deployment)

 

When I run the build from the parent project though, it builds the first
one properly (eg A.jar) and when testing project B (which depends on A)
it can see on its classpath A/target/classes + A/target/test-classes
(this includes the proper resources for passing the tests) AND the built
A.jar (deployment - ready, including resources that fail the tests).

 

Dependency in B pom.xml is:

 



foo

A

ejb

provided



 

Is there a way how to exclude built A.jar from classpath when two
modules are dependent?

 

Hope this makes sense,

 

Petr 



The information contained in this email and its attachments is confidential and 
may be the subject of legal, professional or other privileged information. It 
is intended only for the named addressees and may not be disclosed to anyone 
else without consent from On Demand. If you are not the named addressee you 
must not use, disclose, distribute, copy, print or rely on the contents of this 
email and should destroy it immediately. Whilst On Demand takes care to protect 
its systems from electronic virus attack or other harmful event, the firm gives 
no warranty that this email message (including any attachments to it) is free 
of any virus or other harmful matter and accepts no responsibility for any loss 
or damage resulting from the recipient receiving, opening or using it. If you 
need any further information, please contact the originator of this message on 
+44 (0)20 7131 6700. Website: www.ondemand.co.uk. Registered Office: 1 Stephen 
Street, London, W1T 1AL. Registered in the UK No.4094951.

This message has been scanned for viruses by BlackSpider MailControl - 
www.blackspider.com