-
1. Re: Jboss 7.x - HA Web Sessions via Database Persistence with Oracle
techtalk Jun 6, 2012 5:44 AM (in response to techtalk)I was expecting a reply
Anyway.. I found this link http://mastertheboss.com/jboss-application-server/432-develop-a-clustered-application-with-infinispan-data-grid.html?start=1 and now trying to implement the same (using injection). But I am getting this error at the end (with out any stack trace). I am using jboss 7.0.2 bunddled with liferay 6.1 EE.
ERROR [org.jboss.as.deployment] (DeploymentScanner-threads - 1) {"Composite operation failed and was rolled back. Steps that failed:" => {"Operation step-2" => "Operation handler failed to complete"}}
Here is my cache container placed under <Subsystem> of standalone.xml
<cache-container name="cluster" default-cache="dist"> <alias>cluster </alias> <transport lock-timeout="60000"/> <distributed-cache owners="3" mode="ASYNC" name="dist" batching="true"> <file-store/> </distributed-cache> </cache-container>
I have a Oracle datasource
<datasource jndi-name="java:jboss/datasources/LiferayPool_test" pool-name="OracleDS" enabled="true" jta="true" use-java-context="true" use-ccm="true"> <connection-url> jdbc:oracle:thin:@<myaddress>:XE </connection-url> <driver> oracle </driver> <transaction-isolation> TRANSACTION_READ_COMMITTED </transaction-isolation> <pool> <prefill> true </prefill> <use-strict-min> false </use-strict-min> <flush-strategy> FailingConnectionOnly </flush-strategy> </pool> <security> <user-name> username </user-name> <password> password </password> </security> </datasource>
This is how I am invoking the cache
@Resource(lookup="java:jboss/infinispan/container/cluster") private CacheContainer container;
Secondaly, I also tried without using injection, as expalined in comments of this link ( https://docs.jboss.org/author/display/ISPN/Getting+Started+Guide+-+JBoss+AS+7 ), like this
InitialContext ic = new InitialContext(); CacheContainer cc = (CacheContainer) ic.lookup("java:jboss/infinispan/container/cluster"); Cache<String, Object> cache = cc.getCache();
But in this case I got this error:
ERROR [stderr] (MSC service thread 1-4) java.lang.IllegalStateException
ERROR [stderr] (MSC service thread 1-4) at org.jboss.msc.value.InjectedValue.getValue(InjectedValue.java:47)
ERROR [stderr] (MSC service thread 1-4) at org.jboss.as.naming.service.BinderService.getValue(BinderService.java:116)
ERROR [stderr] (MSC service thread 1-4) at org.jboss.as.naming.service.BinderService.getValue(BinderService.java:43)
ERROR [stderr] (MSC service thread 1-4) at org.jboss.msc.service.ServiceControllerImpl.getValue(ServiceControllerImpl.java:1216)
Could experts please guide what I am doing wrong. I am new to liferay and jboss 7. Thanks for the help !
-
2. Re: Jboss 7.x - HA Web Sessions via Database Persistence with Oracle
techtalk Jun 13, 2012 10:45 AM (in response to techtalk)anyone please............
-
3. Re: Jboss 7.x - HA Web Sessions via Database Persistence with Oracle
pferraro Jul 5, 2012 3:47 PM (in response to techtalk)1 of 1 people found this helpfulTo enable session persistence to a database:
1. Configure your datasource. See https://community.jboss.org/wiki/DataSourceConfigurationInAS7
2. Assuming you're using an HA profile (e.g. standalone-ha.xml), change the default cache of the "web" cache container within the infinispan subsystem to use an invalidation-cache configured with a shared write-through jdbc cache store using the datasource defined in step 1.
e.g.
{code:xml}<cache-container name="web" default-cache="database" module="org.jboss.as.clustering.web.infinispan">
<invalidation-cache name="database" mode="ASYNC" batching="true">
<key-based-jdbc-store datasource="java:jboss/datasources/LiferayPool_test" passivation="false" purge="false" shared="true"/>
</invalidation-cache>
</cache-container>{code}
3. Make sure your web application's web.xml declares itself as <distributable/>.
-
4. Re: Jboss 7.x - HA Web Sessions via Database Persistence with Oracle
dbschofield Jul 2, 2012 7:56 PM (in response to pferraro)Paul, Manish was specifically asking about creating HA web sessions. In your comment you make mention of using a non-HA profile. Will the configuration you mention properly manage sessions when two non-HA profiles are pointed at the same database and therefore achieve HA web sessions? For example would JBoss instance A recognize changes to the database and therefore the active session made by JBoss instance B? If a session is started on instance A and the user gets bounced to instance B and then logs out invalidating the session, will the session get cleaned up on instance A?
-
5. Re: Jboss 7.x - HA Web Sessions via Database Persistence with Oracle
techtalk Jul 3, 2012 5:45 AM (in response to pferraro)Thanks Paul for the reply... getting following error with Jboss 7.0.2 and 7.1.1 ..
Message: JBAS014788: Unexpected attribute 'module' encountered.
Pls let me know which version supports the module tag.
-
6. Re: Jboss 7.x - HA Web Sessions via Database Persistence with Oracle
pferraro Jul 3, 2012 3:47 PM (in response to techtalk)The module attribute is new to the 1.3 version of the infinispan subsystem schema (found in 7.1.2.Final). For older versions - you should omit this attribute.
-
7. Re: Jboss 7.x - HA Web Sessions via Database Persistence with Oracle
techtalk Jul 4, 2012 6:05 AM (in response to pferraro)Hi Paul,
Even the
key-based-jdbc-store
is not supporting in 7.1.1 and below versions. I cannt swithc to 7.1.2 as it is not avaialble for downloads.Could you please give me a code which suits/works for 7.1.1 or 7.0.2.
Thanks
-
8. Re: Jboss 7.x - HA Web Sessions via Database Persistence with Oracle
pferraro Jul 5, 2012 11:14 AM (in response to techtalk)<key-based-jdbc-store/> was called <jdbc-store/> in 7.1.1 and earlier.
To use 7.1.2, download and build the source code from here: https://github.com/jbossas/jboss-as/zipball/7.1.2.Final
-
9. Re: Jboss 7.x - HA Web Sessions via Database Persistence with Oracle
pferraro Jul 5, 2012 11:42 AM (in response to dbschofield)Ben,
You're right - configuring HA web sessions in this way is not quite as robust as the traditional replication approach. A shared database session store *requires* sticky sessions (this is not a requirement for replicated sessions) - so the kind of bouncing you're talking about would only occur if the instance A was actually unavailable (crash, undeploy, restart, etc.), thus instance A would no longer know about the session in question and would look for it in the database, and when not found, assume it does not exist (or was invalidated).
-
10. Re: Jboss 7.x - HA Web Sessions via Database Persistence with Oracle
pferraro Jul 5, 2012 12:47 PM (in response to pferraro)Actually, you can eliminate the sticky session requirement by using an <invalidation-cache/> instead of a <local-cache/>. This, of course, would require that you use an HA-aware profile (e.g. standalone-ha.xml).
-
11. Re: Jboss 7.x - HA Web Sessions via Database Persistence with Oracle
techtalk Jul 6, 2012 11:29 AM (in response to pferraro)Paul Ferraro wrote:
Actually, you can eliminate the sticky session requirement by using an <invalidation-cache/> instead of a <local-cache/>. This, of course, would require that you use an HA-aware profile (e.g. standalone-ha.xml).
Hi Paul,
Thanks for your reply.
As per your suggestions I am using <invalidation-cache> in standalone-ha.xml... I am getting below error..
15:06:38,303 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-1) MSC00001: Failed to start service jboss.infinispan.web.database.config: org.jboss.msc.service.StartException in service jboss.infinispan.web.database.config: JBAS010291: Failed to add INVALIDATION_ASYNC database cache to non-clustered web cache container. at org.jboss.as.clustering.infinispan.subsystem.CacheConfigurationService.start(CacheConfigurationService.java:100) at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA] at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA] at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885) [rt.jar:1.6.0_03] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907) [rt.jar:1.6.0_03] at java.lang.Thread.run(Thread.java:619) [rt.jar:1.6.0_03] 15:06:38,350 INFO [org.infinispan.cdi.InfinispanExtension] (MSC service thread 1-2) ISPN017001: Infinispan CDI extension version: 5.1.4.FINAL
configuration in standalone-ha.xml is.. since infinispan 1.2 doesn't supports <
key-based-jdbc-store
> i am using <string-keyed-jdbc-store>. database type is oracle.<cache-container name="web" default-cache="database"> <invalidation-cache name="database" mode="ASYNC" batching="true"> <string-keyed-jdbc-store datasource="java:jboss/datasources/LiferayPool_test" passivation="false" preload="true" purge="false"> <property name="databaseType">oracle</property> <string-keyed-table prefix="stringbased "> <id-column name="id" type="VARCHAR2"/> <data-column name="datum" type="BLOB"/> <timestamp-column name="version" type="NUMBER"/> </string-keyed-table> </string-keyed-jdbc-store> </invalidation-cache> </cache-container>
Could you please guide me what I am doing wrong ?
-
12. Re: Jboss 7.x - HA Web Sessions via Database Persistence with Oracle
techtalk Jul 9, 2012 11:38 AM (in response to techtalk)Ok I added the <transport lock-timeout="60000"/> to cache-container... It starts attempting to create a table but by default suffixin "//deafult-host//<context-name>" to the table name ..hence causing SQL error. Below is the error I am getting now..
13:14:08,233 ERROR [org.infinispan.loaders.jdbc.TableManipulation] (MSC service thread 1-4) ISPN008011: Error while creating table; used DDL statement: 'CREATE TABLE stringbased_//default-host//JavaServerFaces (id VARCHAR2 NOT NULL, datum BLOB, version NUMBER, PRIMARY KEY (id))': java.sql.SQLException: ORA-00922: missing or invalid option at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288) at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743) at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:207) at oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:946) at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1168) at oracle.jdbc.driver.OracleStatement.executeUpdateInternal(OracleStatement.java:1614) at oracle.jdbc.driver.OracleStatement.executeUpdate(OracleStatement.java:1579) at org.jboss.jca.adapters.jdbc.WrappedStatement.executeUpdate(WrappedStatement.java:371) at org.infinispan.loaders.jdbc.TableManipulation.executeUpdateSql(TableManipulation.java:154) at org.infinispan.loaders.jdbc.TableManipulation.createTable(TableManipulation.java:130) at org.infinispan.loaders.jdbc.TableManipulation.start(TableManipulation.java:231) at org.infinispan.loaders.jdbc.stringbased.JdbcStringBasedCacheStore.doConnectionFactoryInitialization(JdbcStringBasedCacheStore.java:365) at org.infinispan.loaders.jdbc.stringbased.JdbcStringBasedCacheStore.start(JdbcStringBasedCacheStore.java:121) at org.infinispan.loaders.CacheLoaderManagerImpl.start(CacheLoaderManagerImpl.java:129) [infinispan-core-5.1.2.FINAL.jar:5.1.2.FINAL] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.6.0_03] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [rt.jar:1.6.0_03] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [rt.jar:1.6.0_03] at java.lang.reflect.Method.invoke(Method.java:597) [rt.jar:1.6.0_03] at org.infinispan.util.ReflectionUtil.invokeAccessibly(ReflectionUtil.java:236) [infinispan-core-5.1.2.FINAL.jar:5.1.2.FINAL] at org.infinispan.factories.AbstractComponentRegistry$PrioritizedMethod.invoke(AbstractComponentRegistry.java:882) [infinispan-core-5.1.2.FINAL.jar:5.1.2.FINAL] at org.infinispan.factories.AbstractComponentRegistry.invokeStartMethods(AbstractComponentRegistry.java:637) [infinispan-core-5.1.2.FINAL.jar:5.1.2.FINAL] at org.infinispan.factories.AbstractComponentRegistry.internalStart(AbstractComponentRegistry.java:626) [infinispan-core-5.1.2.FINAL.jar:5.1.2.FINAL] at org.infinispan.factories.AbstractComponentRegistry.start(AbstractComponentRegistry.java:530) [infinispan-core-5.1.2.FINAL.jar:5.1.2.FINAL] at org.infinispan.factories.ComponentRegistry.start(ComponentRegistry.java:173) [infinispan-core-5.1.2.FINAL.jar:5.1.2.FINAL] at org.infinispan.CacheImpl.start(CacheImpl.java:499) [infinispan-core-5.1.2.FINAL.jar:5.1.2.FINAL] at org.infinispan.manager.DefaultCacheManager.createCache(DefaultCacheManager.java:626) [infinispan-core-5.1.2.FINAL.jar:5.1.2.FINAL] at org.infinispan.manager.DefaultCacheManager.getCache(DefaultCacheManager.java:516) [infinispan-core-5.1.2.FINAL.jar:5.1.2.FINAL] at org.infinispan.manager.DefaultCacheManager.getCache(DefaultCacheManager.java:530) [infinispan-core-5.1.2.FINAL.jar:5.1.2.FINAL] at org.jboss.as.clustering.infinispan.DefaultEmbeddedCacheManager.getCache(DefaultEmbeddedCacheManager.java:148) at org.jboss.as.clustering.infinispan.DefaultEmbeddedCacheManager.getCache(DefaultEmbeddedCacheManager.java:139) at org.jboss.as.clustering.web.infinispan.DistributedCacheManagerFactory.getDistributedCacheManager(DistributedCacheManagerFactory.java:97) at org.jboss.as.web.session.DistributableSessionManager.<init>(DistributableSessionManager.java:159) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final] at org.jboss.as.web.deployment.JBossContextConfig.processWebMetaData(JBossContextConfig.java:250) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final] at org.jboss.as.web.deployment.JBossContextConfig.applicationWebConfig(JBossContextConfig.java:169) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final] at org.apache.catalina.startup.ContextConfig.start(ContextConfig.java:417) [jbossweb-7.0.13.Final.jar:] at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:182) [jbossweb-7.0.13.Final.jar:]
I am not sure why its appending //deafult-host//... to atble name every time i start server. Below is my new cache entry
<cache-container name="web" default-cache="database"> <transport lock-timeout="60000"/> <invalidation-cache name="database" mode="ASYNC" batching="true"> <string-keyed-jdbc-store datasource="java:jboss/datasources/LiferayPool_test" preload="true" passivation="false" purge="false"> <property name="databaseType"> oracle </property> <string-keyed-table prefix="stringbased"> <id-column name="id" type="VARCHAR2(200)"/> <data-column name="datum" type="BLOB"/> <timestamp-column name="version" type="NUMBER"/> </string-keyed-table> </string-keyed-jdbc-store> </invalidation-cache> </cache-container>
Please advice !!!! I am stuck
-
13. Re: Jboss 7.x - HA Web Sessions via Database Persistence with Oracle
techtalk Jul 9, 2012 11:43 AM (in response to techtalk)Here an update:
I just checked and I strange to note that even with the above exception message onto server console it does creating a table in Oracle DB with name stringbased_database !!! However nothing is getting stored so far....! Please advice how can I store Httpsessions in db. Thanks !!!