How I should point to my resource.xml when I am setting up arquillian with tomee? -
with glassfish-embedded server used following line in arquillian.xml specify resource.xml
arquillian.xml
<container qualifier="glassfish-embedded" > <configuration> <property name="resourcesxml"> src/test/resources-glassfish-embedded/glassfish-resources.xml </property> </configuration> </container> glassfish-resources.xml
<resources> <jdbc-resource pool-name="arquillianembeddedderbypool" jndi-name="jdbc/arquillian"/> <jdbc-connection-pool name="arquillianembeddedderbypool" res-type="javax.sql.datasource" datasource-classname="org.apache.derby.jdbc.embeddeddatasource" is-isolation-level-guaranteed="false"> <property name="databasename" value="target/databases/derby"/> <property name="createdatabase" value="create"/> </jdbc-connection-pool> </resources> now trying use tomee , couldn't connect database, because cannot point out resource.xml in same way used glassfish.
here warning indicate resourcesxml property not supported tomee (in arquillian.xml)
warning: configuration contain properties not supported backing object org.apache.openejb.arquillian.embedded.embeddedtomeeconfiguration unused property entries: {resourcesxml= src/test/resources-glassfish-embedded/glassfish-resources.xml } i want know alternative setting specifying resources in tomee arquillian.i appreciate in regards.
finally managed setup arquillian cdi, hibernate, embeded in memory h2 database on tomee. don't need resource.xml. need beans.xml cdi , persistence.xml defining datasource , persistence unit. here shrinkwrap setting files tomee , h2, cdi , hibernate.
my test class shrinkwrap
import org.apache.openejb.assembler.classic.appinfo; import org.apache.openejb.assembler.classic.assembler; import org.apache.openejb.assembler.classic.reloadableentitymanagerfactory; import org.apache.openejb.jee.jba.cmp.addcolumntemplate; import org.apache.openejb.loader.systeminstance; import org.apache.openejb.spi.containersystem; import org.apache.ziplock.jarlocation; import org.jboss.arquillian.container.test.api.deployment; import org.jboss.arquillian.junit.arquillian; import org.jboss.shrinkwrap.api.archivepaths; import org.jboss.shrinkwrap.api.shrinkwrap; import org.jboss.shrinkwrap.api.asset.emptyasset; import org.jboss.shrinkwrap.api.asset.stringasset; import org.jboss.shrinkwrap.api.spec.webarchive; import org.jboss.shrinkwrap.resolver.api.resolutionexception; import org.jboss.shrinkwrap.resolver.api.maven.maven; import org.jboss.shrinkwrap.resolver.api.maven.scopetype; import org.jboss.shrinkwrap.resolver.api.maven.strategy.acceptscopesstrategy; import org.junit.after; import org.junit.assert; import org.junit.before; import org.junit.test; import org.junit.runner.runwith; import se.raindance.yashar.game; import javax.inject.inject; import javax.persistence.entitymanager; import javax.persistence.entitymanagerfactory; import javax.persistence.persistencecontext; import javax.persistence.persistencecontexttype; import javax.persistence.persistenceunit; import javax.transaction.usertransaction; import java.io.file; import java.util.arrays; import java.util.collection; import java.util.hashset; import java.util.list; import java.util.set; import static org.junit.assert.assertnotnull; import static org.junit.assert.asserttrue; @runwith(arquillian.class) public class hibernatetest { @deployment public static webarchive war() { file[] hibernate; try { // try offline first since faster hibernate = maven.resolver() .offline(true) .loadpomfromfile("src/test/resources/hibernate-pom.xml") .importruntimeandtestdependencies(new acceptscopesstrategy(scopetype.compile, scopetype.runtime)) .asfile(); } catch (resolutionexception re) { // try on central hibernate = maven.resolver() .loadpomfromfile("src/test/resources/hibernate-pom.xml") .importruntimeandtestdependencies(new acceptscopesstrategy(scopetype.compile, scopetype.runtime)) .asfile(); } webarchive webarchive = shrinkwrap.create(webarchive.class, "hibernate-app.war") .addaswebinfresource("test-persistence.xml", "classes/meta-inf/persistence.xml") .addaswebinfresource(emptyasset.instance, "classes/meta-inf/beans.xml") .addaslibraries(hibernate) .addaslibraries(jarlocation.jarlocation(resolutionexception.class)) .addclasses(game.class) .addaslibraries(jarlocation.jarlocation(org.jboss.shrinkwrap.resolver.api.maven.filter.mavenresolutionfilter.class)); system.out.println(webarchive.tostring(true)); return webarchive; } private static final string[] game_titles = { "super mario brothers", "mario kart", "f-zero" }; @persistencecontext(unitname = "yasharunit") entitymanager em; @inject usertransaction utx; @before public void preparepersistencetest() throws exception { cleardata(); insertdata(); starttransaction(); } private void cleardata() throws exception { utx.begin(); em.jointransaction(); system.out.println("dumping old records..."); em.createquery("delete game").executeupdate(); utx.commit(); } private void insertdata() throws exception { utx.begin(); em.jointransaction(); system.out.println("inserting records..."); (string title : game_titles) { game game = new game(title); em.persist(game); } utx.commit(); em.clear(); } private void starttransaction() throws exception { utx.begin(); em.jointransaction(); } @after public void committransaction() throws exception { utx.commit(); } @test public void shouldfindallgamesusingjpqlquery() throws exception { // given string fetchingallgamesinjpql = "select g game g order g.id"; // when system.out.println("selecting (using jpql)..."); list<game> games = em.createquery(fetchingallgamesinjpql, game.class).getresultlist(); // system.out.println("found " + games.size() + " games (using jpql):"); assertcontainsallgames(games); } private static void assertcontainsallgames(collection<game> retrievedgames) { assert.assertequals(game_titles.length, retrievedgames.size()); final set<string> retrievedgametitles = new hashset<string>(); (game game : retrievedgames) { system.out.println("* " + game); retrievedgametitles.add(game.gettitle()); } assert.asserttrue(retrievedgametitles.containsall(arrays.aslist(game_titles))); } } hibernate-pom.xml
<?xml version="1.0"?> <project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelversion>4.0.0</modelversion> <groupid>org.apache.openejb.arquillian.tests</groupid> <version>1.0.0</version> <artifactid>codi-deps</artifactid> <dependencies> <dependency> <groupid>org.hibernate</groupid> <artifactid>hibernate-entitymanager</artifactid> <version>4.1.6.final</version> <exclusions> <exclusion> <groupid>org.hibernate.javax.persistence</groupid> <artifactid>hibernate-jpa-2.0-api</artifactid> </exclusion> <exclusion> <groupid>org.jboss.spec.javax.transaction</groupid> <artifactid>jboss-transaction-api_1.1_spec</artifactid> </exclusion> <exclusion> <groupid>org.javassist</groupid> <artifactid>javassist</artifactid> </exclusion> </exclusions> </dependency> <dependency> <groupid>org.hibernate</groupid> <artifactid>hibernate-validator</artifactid> <version>4.3.0.final</version> <exclusions> <exclusion> <groupid>javax.validation</groupid> <artifactid>validation-api</artifactid> </exclusion> </exclusions> </dependency> </dependencies> </project> persistence.xml
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0"> <persistence-unit name="yasharunit" transaction-type="jta"> <jta-data-source>yashardatasource</jta-data-source> <non-jta-data-source>yasharunmanageddatasource</non-jta-data-source> <provider>org.hibernate.ejb.hibernatepersistence</provider> <class>se.raindance.yashar.game</class> <properties> <property name="hibernate.connection.username" value="sa" /> <property name="hibernate.connection.driver_class" value="org.h2.driver" /> <property name="hibernate.connection.password" value="" /> <property name="hibernate.connection.url" value="jdbc:h2:~/test;auto_server=true" /> <property name="hibernate.dialect" value="org.hibernate.dialect.h2dialect" /> <property name="hibernate.show_sql" value="true" /> <property name="hibernate.hbm2ddl.auto" value="create-drop" /> <property name="openjpa.jdbc.synchronizemappings" value="buildschema(foreignkeys=true)"/> </properties> </persistence-unit> </persistence> and our sample game entity
import java.io.serializable; import javax.persistence.entity; import javax.persistence.generatedvalue; import javax.persistence.id; import javax.validation.constraints.notnull; import javax.validation.constraints.size; /** * @author yashar bizhanzadeh * */ @entity public class game implements serializable { private long id; private string title; public game() {} public game(string title) { this.title = title; } @id @generatedvalue public long getid() { return id; } public void setid(long id) { this.id = id; } @notnull @size(min = 3, max = 50) public string gettitle() { return title; } public void settitle(string title) { this.title = title; } @override public string tostring() { return "game@" + hashcode() + "[id = " + id + "; title = " + title + "]"; } } arquillian.xml
<?xml version="1.0" encoding="utf-8" standalone="yes"?> <arquillian xmlns="http://jboss.org/schema/arquillian" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd"> <container qualifier="tomee-embedded" default="true"> <configuration> <property name="httpport">-1</property> <property name="stopport">-1</property> <property name="dir">target/tomee-embedded</property> <property name="appworkingdir">target/arquillian-embedded-working-dir</property> <property name="portrange">20001-30000</property> </configuration> </container> </arquillian> and empty beans.xml.
Comments
Post a Comment