[JBoss Seam] - Problem writing unit tests
by Alpha1251
Hello all.
I was trying to write a simple unit test for Seam hotel booking example and had some troubles. Seam 1.2.1GA
Test was the following
@Test
public void test_1_COMPONENT_CreateUser () throws Exception {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("bookingDatabase");
final EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
User user = new User();
user.setUsername("blabla");
user.setName("foobar");
user.setPassword("foobar");
RegisterAction action = new RegisterAction();
//action.setUser(user);
setField (action,"user",user);
action.setEm(em);
action.setVerify("foobar");
action.register();
assert action.isRegistered()==true;
em.getTransaction().commit();
em.close();
}
And I had the following exception
javax.persistence.PersistenceException: org.hibernate.QueryException: unexpected char: '#' [select u.username from org.jboss.seam.example.booking.User u where u.username=#{user.username}]
at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:567)
at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:79)
at org.jboss.seam.example.booking.RegisterAction.register(RegisterAction.java:36)
at org.jboss.seam.example.booking.test.CreateUserTest.test_1_COMPONENT_CreateUser(CreateUserTest.java:36)
Caused by: org.hibernate.QueryException: unexpected char: '#' [select u.username from org.jboss.seam.example.booking.User u where u.username=#{user.username}]
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:203)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:110)
at org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:77)
at org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:56)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:71)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1612)
at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:76)
... 24 more
but I seems, that the main cause is the following
09:44:14,331 ERROR [AbstractKernelController] Error installing to Start: name=jboss.j2ee:jar=bin,name=Dispatcher,service=EJB3 state=Create
javax.naming.NamingException: Could not bind statless proxy with ejb name Dispatcher into JNDI under jndiName: /Dispatcher/local [Root exception is javax.naming.NameAlreadyBoundException]
at org.jboss.ejb3.stateless.BaseStatelessProxyFactory.start(BaseStatelessProxyFactory.java:70)
at org.jboss.ejb3.stateless.StatelessLocalProxyFactory.start(StatelessLocalProxyFactory.java:63)
at org.jboss.ejb3.ProxyDeployer.start(ProxyDeployer.java:107)
at org.jboss.ejb3.SessionContainer.start(SessionContainer.java:85)
at org.jboss.ejb3.stateless.StatelessContainer.start(StatelessContainer.java:80)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.jboss.reflect.plugins.introspection.ReflectionUtils.invoke(ReflectionUtils.java:55)
at org.jboss.reflect.plugins.introspection.ReflectMethodInfoImpl.invoke(ReflectMethodInfoImpl.java:107)
at org.jboss.joinpoint.plugins.BasicMethodJoinPoint.dispatch(BasicMethodJoinPoint.java:66)
at org.jboss.kernel.plugins.dependency.KernelControllerContextActions.dispatchJoinPoint(KernelControllerContextActions.java:100)
at org.jboss.kernel.plugins.dependency.KernelControllerContextActions$LifecycleAction.installAction(KernelControllerContextActions.java:582)
at org.jboss.kernel.plugins.dependency.KernelControllerContextActions$KernelControllerContextAction.install(KernelControllerContextActions.java:175)
at org.jboss.dependency.plugins.AbstractControllerContextActions.install(AbstractControllerContextActions.java:51)
at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:226)
at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:593)
at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:346)
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:438)
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:379)
at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:225)
at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:151)
at org.jboss.kernel.plugins.dependency.AbstractKernelController.install(AbstractKernelController.java:79)
at org.jboss.kernel.plugins.dependency.AbstractKernelController.install(AbstractKernelController.java:73)
at org.jboss.ejb3.MCKernelAbstraction.install(MCKernelAbstraction.java:91)
at org.jboss.ejb3.Ejb3Deployment.registerEJBContainer(Ejb3Deployment.java:439)
at org.jboss.ejb3.Ejb3Deployment.start(Ejb3Deployment.java:486)
at org.jboss.ejb3.embedded.EJB3StandaloneDeployer.start(EJB3StandaloneDeployer.java:460)
at org.jboss.seam.core.Ejb.startup(Ejb.java:56)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.jboss.seam.util.Reflections.invoke(Reflections.java:20)
at org.jboss.seam.util.Reflections.invokeAndWrap(Reflections.java:123)
at org.jboss.seam.Component.callComponentMethod(Component.java:1834)
at org.jboss.seam.Component.callCreateMethod(Component.java:1757)
at org.jboss.seam.Component.newInstance(Component.java:1746)
at org.jboss.seam.contexts.Lifecycle.startup(Lifecycle.java:175)
at org.jboss.seam.contexts.Lifecycle.endInitialization(Lifecycle.java:145)
at org.jboss.seam.init.Initialization.init(Initialization.java:504)
at org.jboss.seam.mock.SeamTest.init(SeamTest.java:701)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:604)
at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:394)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:142)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:79)
at org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:165)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:103)
at org.testng.TestRunner.runWorkers(TestRunner.java:678)
at org.testng.TestRunner.privateRun(TestRunner.java:624)
at org.testng.TestRunner.run(TestRunner.java:495)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:300)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:295)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:275)
at org.testng.SuiteRunner.run(SuiteRunner.java:190)
at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:792)
at org.testng.TestNG.runSuitesLocally(TestNG.java:765)
at org.testng.TestNG.run(TestNG.java:699)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:73)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:122)
Caused by: javax.naming.NameAlreadyBoundException
at org.jnp.server.NamingServer.bind(NamingServer.java:144)
at org.jnp.server.NamingServer.bind(NamingServer.java:109)
at org.jnp.interfaces.NamingContext.bind(NamingContext.java:567)
at org.jnp.interfaces.NamingContext.bind(NamingContext.java:532)
at org.jboss.util.naming.Util.bind(Util.java:102)
at org.jboss.util.naming.Util.bind(Util.java:89)
at org.jboss.ejb3.stateless.BaseStatelessProxyFactory.start(BaseStatelessProxyFactory.java:67)
... 64 more
Also, I've tried to initialize EntityManager, like it was showed in a manual, and I had absolutelly another exception.
When I have tried to start ready unit tests from the examples, I had also some different kind of exceptions, but, seems, they all are caused by the same.
To show this. Icefaces had during unit testing the following:
10:23:57,890 WARN [Interpolator] exception interpolating string: New booking: #{booking.id} for #{user.username}
java.lang.IllegalStateException: No application context active
at org.jboss.seam.ScopeType.getContext(ScopeType.java:139)
at org.jboss.seam.Component.getInstance(Component.java:1621)
at org.jboss.seam.Component.getInstance(Component.java:1599)
at org.jboss.seam.Component.getInstance(Component.java:1594)
at org.jboss.seam.core.Expressions.instance(Expressions.java:265)
at org.jboss.seam.core.Interpolator.interpolateExpressions(Interpolator.java:88)
at org.jboss.seam.core.Interpolator.interpolate(Interpolator.java:67)
at org.jboss.seam.log.LogImpl.interpolate(LogImpl.java:142)
at org.jboss.seam.log.LogImpl.info(LogImpl.java:85)
at org.jboss.seam.example.booking.HotelBookingAction.confirm(HotelBookingAction.java:99)
at org.jboss.seam.example.booking.test.BookingUnitTest.testHotelBooking(BookingUnitTest.java:80)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:604)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:470)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:564)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:830)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
at org.testng.TestRunner.runWorkers(TestRunner.java:678)
at org.testng.TestRunner.privateRun(TestRunner.java:624)
at org.testng.TestRunner.run(TestRunner.java:495)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:300)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:295)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:275)
at org.testng.SuiteRunner.run(SuiteRunner.java:190)
at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:792)
at org.testng.TestNG.runSuitesLocally(TestNG.java:765)
at org.testng.TestNG.run(TestNG.java:699)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:73)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:122)
DVDStore, the following:
10:26:17,344 WARN [LocalTxDataSource] Destroying connection that could not be successfully matched: org.jboss.resource.connectionmanager.TxConnectionManager$TxConnectionEventListener@196eed5[state=NORMAL mc=org.jboss.resource.adapter.jdbc.local.LocalManagedConnection@110caf0 handles=0 lastUse=1183364777313 permit=false trackByTx=false mcp=org.jboss.resource.connectionmanager.JBossManagedConnectionPool$OnePool@17b6178 context=org.jboss.resource.connectionmanager.InternalManagedConnectionPool@13c2ac3 xaResource=org.jboss.resource.connectionmanager.TxConnectionManager$LocalXAResource@11b92e6 txSync=null]
10:26:17,344 WARN [LocalTxDataSource] Throwable while attempting to get a new connection: null
org.jboss.resource.JBossResourceException: Could not create connection; - nested throwable: (org.jboss.resource.JBossResourceException: No Driver class specified!)
at org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.createManagedConnection(LocalManagedConnectionFactory.java:177)
at org.jboss.resource.connectionmanager.InternalManagedConnectionPool.createConnectionEventListener(InternalManagedConnectionPool.java:579)
at org.jboss.resource.connectionmanager.InternalManagedConnectionPool.getConnection(InternalManagedConnectionPool.java:247)
at org.jboss.resource.connectionmanager.JBossManagedConnectionPool$BasePool.getConnection(JBossManagedConnectionPool.java:540)
at org.jboss.resource.connectionmanager.BaseConnectionManager2.getManagedConnection(BaseConnectionManager2.java:339)
at org.jboss.resource.connectionmanager.TxConnectionManager.getManagedConnection(TxConnectionManager.java:301)
at org.jboss.resource.connectionmanager.BaseConnectionManager2.allocateConnection(BaseConnectionManager2.java:392)
at org.jboss.resource.adapter.jdbc.local.LocalTxDataSource$ConnectionManagerDelegate.allocateConnection(LocalTxDataSource.java:78)
at org.jboss.resource.adapter.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:88)
at org.hibernate.connection.DatasourceConnectionProvider.getConnection(DatasourceConnectionProvider.java:69)
at org.hibernate.tool.hbm2ddl.SuppliedConnectionProviderConnectionHelper.prepare(SuppliedConnectionProviderConnectionHelper.java:27)
at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:178)
at org.hibernate.tool.hbm2ddl.SchemaExport.drop(SchemaExport.java:141)
at org.hibernate.impl.SessionFactoryImpl.close(SessionFactoryImpl.java:807)
at org.jbpm.persistence.db.DbPersistenceServiceFactory.close(DbPersistenceServiceFactory.java:120)
at org.jbpm.JbpmConfiguration.close(JbpmConfiguration.java:460)
at org.jbpm.JbpmConfiguration.close(JbpmConfiguration.java:437)
at org.jboss.seam.core.Jbpm.shutdown(Jbpm.java:76)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.jboss.seam.util.Reflections.invoke(Reflections.java:20)
at org.jboss.seam.util.Reflections.invokeAndWrap(Reflections.java:123)
at org.jboss.seam.Component.callComponentMethod(Component.java:1834)
at org.jboss.seam.Component.callDestroyMethod(Component.java:1765)
at org.jboss.seam.contexts.Contexts.destroy(Contexts.java:231)
at org.jboss.seam.contexts.Lifecycle.endApplication(Lifecycle.java:185)
at org.jboss.seam.mock.SeamTest.cleanup(SeamTest.java:709)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:604)
at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:394)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:142)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:79)
at org.testng.internal.TestMethodWorker.invokeAfterClassMethods(TestMethodWorker.java:208)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
at org.testng.TestRunner.runWorkers(TestRunner.java:678)
at org.testng.TestRunner.privateRun(TestRunner.java:624)
at org.testng.TestRunner.run(TestRunner.java:495)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:300)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:295)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:275)
at org.testng.SuiteRunner.run(SuiteRunner.java:190)
at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:792)
at org.testng.TestNG.runSuitesLocally(TestNG.java:765)
at org.testng.TestNG.run(TestNG.java:699)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:73)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:122)
Caused by: org.jboss.resource.JBossResourceException: No Driver class specified!
at org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.getDriver(LocalManagedConnectionFactory.java:257)
at org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.createManagedConnection(LocalManagedConnectionFactory.java:168)
... 50 more
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4059529#4059529
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4059529
17Â years, 6Â months
[JBoss Seam] - Re: Is
by avbentem
"amitev" wrote : How is the "remember me" functionality working?
Errrr... When a browser sends a request to a web server, it will also send any cookie it knows for that domain to the server. If that's new for you, then I guess you should read about cookies, and meanwhile also read a bit on HTTP sessions. Even reading about the HTTP protocol, though not Seam-specific at all, might be very useful. For example: search the net for an example about doing a HTTP request yourself, using telnet. Quite useful for anyone developing web applications, I feel.
Anyway, in this case: the browser only knows the username, as you noticed in the cookie. So it will send the username to the server, and Seam can preset the username in the login form. The browser does not send any password to the server. If the password is filled in as well, then your browser is to blame for that.
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4059522#4059522
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4059522
17Â years, 6Â months
[Persistence, JBoss/CMP, Hibernate, Database] - Before Server Started: Binding Component And Storing Cache T
by rasor22
Hi To All,
Please allow me to reiterate my problem here. This may be a beginner question but this is more related to Hibernate. I have a project which involves the following scenario (1 and 2 must all occur before JBoss is fully started).
1. I have to create a component that will call an MS SQL stored proc (sp). This sp will fetch a huge amount of structured data more than 200MB. Once this is fetched, the data will be formatted into an array list.
2. This 200MB+ arraylist-formatted data will be stored as a cache into oscache with a unique key. This all happens before the JBoss is completely started.
3. While the web server is in service and calls an action class method, the method will check for the oscache entry with the unique key. It must see that cache/key so it won't have to re-fetch that data and put it in a bean, since fetching the data and processing it within the action class entails processing time of 1.25 hours.
4. The cache entry is set as alive throughout the web application life span, so this must occur only during JBoss startup. This means binding the component within JBoss so the component will be able to see oscache static instance, perform the 1 and 2 process, and store the formatted data to oscache before JBoss is fully started.
I can create a java component to do this, but how will it be binded to JBoss making sure that the component can communicate to the oscache instance even before JBoss is fully started?
I know the info I gave may be incomplete, although I would like to add that this is a J2EE application with JBoss, MVC, JSP, JavaBeans, and Struts.
Thank you very much in advance for any help!
Ritchie
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4059521#4059521
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4059521
17Â years, 6Â months