[jboss-user] [JBoss Seam] - Problem injecting (@In) entityManger in TestNG unit test

roger_goldman2000 do-not-reply at jboss.com
Wed Jun 6 22:41:10 EDT 2007


I'm trying to cause the EntityManager to be injected into a unit test class running via TestNG, but am having no luck.  I'm hoping someone here can shed some light as to why.

Here's the steps I took (using Seam 1.2.1GA, JBoss4.2.0GA, JBossIDE 2.0.0Beta2)

  | 1. "seam setup" to create a brand new project "SimpleTest"
  | 2. "seam new-project"
  | 3. "seam explode"
  | 4. Using JBossIDE, created New General Project for SimpleTest
  | 5. Created a class SimpleTest as follows:
  | 
  |   | package simpletest;
  |   | 
  |   | import javax.persistence.EntityManager;
  |   | 
  |   | import org.jboss.seam.annotations.In;
  |   | import org.jboss.seam.annotations.Name;
  |   | import org.jboss.seam.mock.SeamTest;
  |   | import org.testng.annotations.Test;
  |   | 
  |   | @Name("SimpleTest")
  |   | public class SimpleTest extends SeamTest {
  |   | 
  |   | 	@Test
  |   | 	public void theTest() {
  |   | 		entityManager.getTransaction().begin(); // I get a NullPointerException here!!!
  |   | 		entityManager.getTransaction().commit();
  |   | 	}
  |   | 	
  |   | 	@In
  |   | 	private EntityManager entityManager;
  |   | }
  |   | 
  | 6. Created a TestNG configuration file as follows:
  | 
  |   | <!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd">
  |   | <suite name="Test">
  |   | 	<test verbose="10" name="TheSimpleTest" annotations="JDK">
  |   | 		<packages>
  |   | 			<package name="simpletest" />
  |   | 		</packages>
  |   | 	</test>
  |   | </suite>
  |   | 
  | 7. Ran TestNG with the following classpath elements:
  | 
  |   | 1. \SimpleTest\embedded-ejb\conf
  |   | 2. \SimpleTest\resources
  |   | 3. \SimpleTest\classes
  |   | 4. C:\jboss-seam-1.2.1.GA\lib\*.jar
  |   | 5. C:\jboss-seam-1.2.1GA\jboss-seam.jar
  |   | 
  | 
  | 
  | Out of the box, I got the following error:
  | 
  |   | ...
  |   | 22:24:56,381 INFO  [Initialization] two components with same name, higher precedence wins: org.jboss.seam.persistence.persistenceProvider
  |   | 22:24:56,501 INFO  [Initialization] two components with same name, higher precedence wins: org.jboss.seam.security.identity
  |   | ...
  |   | Failed to invoke @Configuration method org.jboss.seam.mock.SeamTest.init:Could not create Component: org.jboss.seam.security.identity
  |   | [Invoker 6889270] Keeping method org.jboss.seam.mock.SeamTest.begin() for class [TestClass class simpletest.SimpleTest]
  |   | [Invoker 6889270] Keeping method org.jboss.seam.mock.SeamTest.end() for class [TestClass class simpletest.SimpleTest]
  |   | [Invoker 6889270]         Keeping method org.jboss.seam.mock.SeamTest.begin() for class [TestClass class simpletest.SimpleTest]
  |   | [Invoker 6889270]         Keeping method org.jboss.seam.mock.SeamTest.end() for class [TestClass class simpletest.SimpleTest]
  |   | [Invoker 6889270]         Keeping method org.jboss.seam.mock.SeamTest.cleanup() for class [TestClass class simpletest.SimpleTest]
  |   | 
  |   | *********** INVOKED METHODS
  |   | 
  |   | 	org.jboss.seam.mock.SeamTest.init() 22481956
  |   | 		simpletest.SimpleTest.theTest() 22481956
  |   | 
  |   | ***********
  |   | 
  |   | Creating C:\Projects\SimpleTest\test-output\Test\TheSimpleTest.html
  |   | FAILED CONFIGURATION: @BeforeClass init
  |   | java.lang.RuntimeException: Could not create Component: org.jboss.seam.security.identity
  |   | 	at org.jboss.seam.init.Initialization.addComponent(Initialization.java:865)
  |   | 	at org.jboss.seam.init.Initialization.installComponents(Initialization.java:796)
  |   | 	at org.jboss.seam.init.Initialization.init(Initialization.java:503)
  |   | 	at org.jboss.seam.mock.SeamTest.init(SeamTest.java:701)
  |   | Caused by: java.lang.IllegalArgumentException: no such setter method: org.jboss.seam.security.Identity.securityRules
  |   | 	at org.jboss.seam.util.Reflections.getSetterMethod(Reflections.java:219)
  |   | 	at org.jboss.seam.Component.initInitializers(Component.java:401)
  |   | 	at org.jboss.seam.Component.<init>(Component.java:263)
  |   | 	at org.jboss.seam.Component.<init>(Component.java:203)
  |   | 	at org.jboss.seam.init.Initialization.addComponent(Initialization.java:851)
  |   | 	... 25 more
  |   | ... Removed 22 stack frames
  |   | SKIPPED CONFIGURATION: @BeforeMethod begin
  |   | SKIPPED CONFIGURATION: @AfterMethod end
  |   | SKIPPED CONFIGURATION: @AfterClass cleanup
  |   | SKIPPED: theTest
  |   | 
  | 
  | So, I commented out the following lines in components.xml:
  | 
  |   |    <drools:rule-base name="securityRules">
  |   |        <drools:rule-files>
  |   |            <value>/security.drl</value>
  |   |        </drools:rule-files>
  |   |    </drools:rule-base>
  |   | 
  |   |    <security:identity authenticate-method="#{authenticator.authenticate}"
  |   |                            security-rules="#{securityRules}"/>
  |   | 
  | and got much further, but still got a NullPointerException trying to reference the entityManager that I was hoping to have injected by the @In annotation.  As you can see the "entityManager" component was initialized from components.xml but @In didn't seem to inject it.
  | 
  |   | ...
  |   | 22:27:46,646 INFO  [Initialization] two components with same name, higher precedence wins: org.jboss.seam.security.identity
  |   | 22:27:46,736 INFO  [Initialization] two components with same name, higher precedence wins: org.jboss.seam.persistence.persistenceProvider
  |   | 22:27:46,766 INFO  [Component] Component: org.jboss.seam.core.init, scope: APPLICATION, type: JAVA_BEAN, class: org.jboss.seam.core.Init
  |   | 22:27:46,946 INFO  [Initialization] Installing components...
  |   | 22:27:46,986 INFO  [Component] Component: entityManager, scope: CONVERSATION, type: JAVA_BEAN, class: org.jboss.seam.core.ManagedPersistenceContext
  |   | ...
  |   | 22:27:47,397 INFO  [Ejb] starting the embedded EJB container
  |   | 22:27:48,759 WARN  [BeanSchemaBinding] You should use the 2.0 version of the Microcontainer xml. xmlns='urn:jboss:bean-deployer:2.0'
  |   | 22:27:49,480 INFO  [LocalTxDataSource] Bound datasource to JNDI name 'java:/DefaultDS'
  |   | 22:27:50,441 INFO  [LocalTxDataSource] Bound datasource to JNDI name 'java:/SimpleTestTestDatasource'
  |   | 22:27:51,462 INFO  [Ejb3Deployment] EJB3 deployment time took: 971
  |   | 22:27:52,534 INFO  [Ejb3Deployment] EJB3 deployment time took: 1072
  |   | 22:27:52,664 INFO  [MCKernelAbstraction] installing bean: jboss.j2ee:jar=jboss-seam,name=Dispatcher,service=EJB3 with dependencies:
  |   | 22:27:53,125 INFO  [EJBContainer] STARTED EJB: org.jboss.seam.core.Dispatcher ejbName: Dispatcher
  |   | 22:27:53,225 INFO  [MCKernelAbstraction] installing bean: jboss.j2ee:jar=jboss-seam,name=TransactionListener,service=EJB3 with dependencies:
  |   | 22:27:53,335 INFO  [EJBContainer] STARTED EJB: org.jboss.seam.core.TransactionListener ejbName: TransactionListener
  |   | 22:27:53,385 INFO  [Lifecycle] starting up: org.jboss.seam.servlet.exceptionFilter
  |   | 22:27:53,395 INFO  [Lifecycle] starting up: org.jboss.seam.captcha.captchaImage
  |   | 22:27:54,877 INFO  [Lifecycle] starting up: org.jboss.seam.servlet.multipartFilter
  |   | 22:27:54,877 INFO  [Lifecycle] starting up: org.jboss.seam.servlet.redirectFilter
  |   | 22:27:54,877 INFO  [Initialization] done initializing Seam
  |   | [Invoker 6889270] Keeping method org.jboss.seam.mock.SeamTest.begin() for class [TestClass class simpletest.SimpleTest]
  |   | [Invoker 6889270] Keeping method org.jboss.seam.mock.SeamTest.end() for class [TestClass class simpletest.SimpleTest]
  |   | [Invoker 6889270]         Keeping method org.jboss.seam.mock.SeamTest.begin() for class [TestClass class simpletest.SimpleTest]
  |   | [Invoker 6889270] Invoking @BeforeMethod org.jboss.seam.mock.SeamTest.begin()
  |   | [Invoker 6889270] Invoking simpletest.SimpleTest.theTest
  |   | [Invoker 6889270]         Keeping method org.jboss.seam.mock.SeamTest.end() for class [TestClass class simpletest.SimpleTest]
  |   | [Invoker 6889270] Invoking @AfterMethod org.jboss.seam.mock.SeamTest.end()
  |   | [Invoker 6889270]         Keeping method org.jboss.seam.mock.SeamTest.cleanup() for class [TestClass class simpletest.SimpleTest]
  |   | [Invoker 6889270] Invoking @AfterClass org.jboss.seam.mock.SeamTest.cleanup()
  |   | 22:27:54,907 INFO  [Ejb] stopping the embedded EJB container
  |   | 
  |   | *********** INVOKED METHODS
  |   | 
  |   | 	org.jboss.seam.mock.SeamTest.init() 5822128
  |   | 		simpletest.SimpleTest.theTest() 5822128
  |   | 	org.jboss.seam.mock.SeamTest.cleanup() 5822128
  |   | 
  |   | ***********
  |   | 
  |   | Creating C:\Projects\SimpleTest\test-output\Test\TheSimpleTest.html
  |   | FAILED: theTest
  |   | java.lang.NullPointerException
  |   | 	at simpletest.SimpleTest.theTest(SimpleTest.java:15)
  |   | ... Removed 21 stack frames
  |   | 
  | 
  | Any ideas?
  | 
  | Thanks in advance.
  | 
  | /rag

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4051956#4051956

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4051956



More information about the jboss-user mailing list