[JBoss Seam] - Seam 2.0.0.GA and JAAS integration
by manuel.martin
Hello,
First of all, sorry for my english. Is not my first language :/
I'm trying to integrate a Seam application with my custom JAAS Login Module of JBossAS 4.2.2.GA.
I add the Login Module to JBoss login-config.xml:
| <application-policy name="webLogin">
| <authentication>
| <login-module ...>
| ...
| </login-module>
| </authentication>
| </application-policy>
|
Then I add the restrictions in web.xml:
| <security-constraint>
| ...
| </security-constraint>
|
| <login-config>
| <auth-method>BASIC</auth-method>
| <realm-name>webLogin</ream-name>
| </login-config>
|
| ...
|
And set the Login Module in jboss-web.xml:
| <jboss-web>
| <security-domain>java:jaas/webLogin</security-domain>
| </jboss-web>
|
As I saw in reference documentation I add the security component in components.xml:
| <security:identity jaas-config-name="webLogin" />
|
When I access to the application the container ask to me for a user and password, and seems to validate them correctly, but when I try to add web restrictions as s:hasRole('admin') the restriction doesn't work.
I try to write the identity in the page #{identity.username} but allways username is blank.
I don't know if I have something wrong in my configuration but I'm a bit dessesperate.
Thanks in advance!
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4103603#4103603
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4103603
18 years, 8 months
[JBoss Messaging] - Poss solution frequent deadlocks on SQLServer
by Jeremy Stone
When using SQLServer for the persistence back-end for JBoss Messaging we have been experiencing a large number of deadlocks when consumer thread transactions are committed:
| 2007-11-12 10:26:29,088 431718 WARN [org.jboss.messaging.core.impl.JDBCSupport] (Thread-42:) SQLException caught, SQLState 40001 code:1205- assuming deadlock detected, try:1
| com.microsoft.sqlserver.jdbc.SQLServerException: Transaction (Process ID 82) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
| at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(Unknown Source)
| at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(Unknown Source)
| at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(Unknown Source)
| at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(Unknown Source)
| at com.microsoft.sqlserver.jdbc.TDSCommand.execute(Unknown Source)
| at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(Unknown Source)
| at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(Unknown Source)
| at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(Unknown Source)
| at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeUpdate(Unknown Source)
| at org.jboss.resource.adapter.jdbc.CachedPreparedStatement.executeUpdate(CachedPreparedStatement.java:95)
| at org.jboss.resource.adapter.jdbc.WrappedPreparedStatement.executeUpdate(WrappedPreparedStatement.java:251)
| at org.jboss.messaging.core.impl.JDBCPersistenceManager$1HandleBeforeCommit2PCRunner.doTransaction(JDBCPersistenceManager.java:1447)
| at org.jboss.messaging.core.impl.JDBCSupport$JDBCTxRunner2.execute(JDBCSupport.java:453)
| at org.jboss.messaging.core.impl.JDBCSupport$JDBCTxRunner2.executeWithRetry(JDBCSupport.java:491)
| at org.jboss.messaging.core.impl.JDBCPersistenceManager.handleBeforeCommit2PC(JDBCPersistenceManager.java:1472)
| at org.jboss.messaging.core.impl.JDBCPersistenceManager$TransactionCallback.beforeCommit(JDBCPersistenceManager.java:2435)
| at org.jboss.messaging.core.impl.tx.Transaction.commit(Transaction.java:208)
| at org.jboss.jms.server.endpoint.ServerConnectionEndpoint.sendTransaction(ServerConnectionEndpoint.java:471)
| at org.jboss.jms.server.endpoint.advised.ConnectionAdvised.org$jboss$jms$server$endpoint$advised$ConnectionAdvised$sendTransaction$aop(ConnectionAdvised.java:101)
| at org.jboss.jms.server.endpoint.advised.ConnectionAdvised$sendTransaction_N3268650789275322226.invokeNext(ConnectionAdvised$sendTransaction_N3268650789275322226.java)
| at org.jboss.jms.server.container.SecurityAspect.handleSendTransaction(SecurityAspect.java:195)
| at sun.reflect.GeneratedMethodAccessor341.invoke(Unknown Source)
| at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
| at java.lang.reflect.Method.invoke(Method.java:585)
| at org.jboss.aop.advice.PerInstanceAdvice.invoke(PerInstanceAdvice.java:121)
| at org.jboss.jms.server.endpoint.advised.ConnectionAdvised$sendTransaction_N3268650789275322226.invokeNext(ConnectionAdvised$sendTransaction_N3268650789275322226.java)
| at org.jboss.jms.server.container.ServerLogInterceptor.invoke(ServerLogInterceptor.java:105)
| at org.jboss.jms.server.endpoint.advised.ConnectionAdvised$sendTransaction_N3268650789275322226.invokeNext(ConnectionAdvised$sendTransaction_N3268650789275322226.java)
| at org.jboss.jms.server.endpoint.advised.ConnectionAdvised.sendTransaction(ConnectionAdvised.java)
| at org.jboss.jms.wireformat.ConnectionSendTransactionRequest.serverInvoke(ConnectionSendTransactionRequest.java:82)
| at org.jboss.jms.server.remoting.JMSServerInvocationHandler.invoke(JMSServerInvocationHandler.java:143)
| at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:769)
| at org.jboss.remoting.transport.local.LocalClientInvoker.invoke(LocalClientInvoker.java:101)
| at org.jboss.remoting.Client.invoke(Client.java:1634)
| at org.jboss.remoting.Client.invoke(Client.java:548)
| at org.jboss.remoting.Client.invoke(Client.java:536)
| at org.jboss.jms.client.delegate.DelegateSupport.doInvoke(DelegateSupport.java:187)
| at org.jboss.jms.client.delegate.DelegateSupport.doInvoke(DelegateSupport.java:158)
| at org.jboss.jms.client.delegate.ClientConnectionDelegate.org$jboss$jms$client$delegate$ClientConnectionDelegate$sendTransaction$aop(ClientConnectionDelegate.java:221)
| at org.jboss.jms.client.delegate.ClientConnectionDelegate$sendTransaction_N3268650789275322226.invokeNext(ClientConnectionDelegate$sendTransaction_N3268650789275322226.java)
| at org.jboss.jms.client.container.FailoverValveInterceptor.invoke(FailoverValveInterceptor.java:92)
| at org.jboss.aop.advice.PerInstanceInterceptor.invoke(PerInstanceInterceptor.java:105)
| at org.jboss.jms.client.delegate.ClientConnectionDelegate$sendTransaction_N3268650789275322226.invokeNext(ClientConnectionDelegate$sendTransaction_N3268650789275322226.java)
| at org.jboss.jms.client.container.ClosedInterceptor.invoke(ClosedInterceptor.java:170)
| at org.jboss.aop.advice.PerInstanceInterceptor.invoke(PerInstanceInterceptor.java:105)
| at org.jboss.jms.client.delegate.ClientConnectionDelegate$sendTransaction_N3268650789275322226.invokeNext(ClientConnectionDelegate$sendTransaction_N3268650789275322226.java)
| at org.jboss.jms.client.delegate.ClientConnectionDelegate.sendTransaction(ClientConnectionDelegate.java)
| at org.jboss.jms.tx.ResourceManager.sendTransactionXA(ResourceManager.java:637)
| at org.jboss.jms.tx.ResourceManager.commit(ResourceManager.java:393)
| at org.jboss.jms.tx.MessagingXAResource.commit(MessagingXAResource.java:238)
| at org.jboss.resource.connectionmanager.xa.JcaXAResourceWrapper.commit(JcaXAResourceWrapper.java:53)
| at com.arjuna.ats.internal.jta.resources.arjunacore.XAResourceRecord.topLevelCommit(XAResourceRecord.java:487)
| at com.arjuna.ats.arjuna.coordinator.BasicAction.doCommit(BasicAction.java:3107)
| at com.arjuna.ats.arjuna.coordinator.BasicAction.doCommit(BasicAction.java:3022)
| at com.arjuna.ats.arjuna.coordinator.BasicAction.phase2Commit(BasicAction.java:2126)
| at com.arjuna.ats.arjuna.coordinator.BasicAction.End(BasicAction.java:1819)
| at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.end(TwoPhaseCoordinator.java:88)
| at com.arjuna.ats.arjuna.AtomicAction.commit(AtomicAction.java:177)
| at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.java:1382)
| at com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.commit(BaseTransaction.java:135)
| at com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.commit(BaseTransactionManagerDelegate.java:87)
| at org.jboss.tm.usertx.client.ServerVMClientUserTransaction.commit(ServerVMClientUserTransaction.java:140)
| at org.springframework.transaction.jta.JtaTransactionManager.doCommit(JtaTransactionManager.java:842)
| at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:662)
| at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:632)
| at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:314)
| at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:116)
| at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
| at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
| at $Proxy82.onMessage(Unknown Source)
| at org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:510)
| at org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:445)
| at org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:414)
| at org.springframework.jms.listener.AbstractMessageListenerContainer.executeListener(AbstractMessageListenerContainer.java:386)
| at org.springframework.jms.listener.SimpleMessageListenerContainer$2.onMessage(SimpleMessageListenerContainer.java:204)
| at org.jboss.resource.adapter.jms.JmsMessageListener.onMessage(JmsMessageListener.java:56)
| at org.jboss.jms.client.container.ClientConsumer.callOnMessage(ClientConsumer.java:157)
| at org.jboss.jms.client.container.ClientConsumer$ListenerRunner.run(ClientConsumer.java:965)
| at EDU.oswego.cs.dl.util.concurrent.QueuedExecutor$RunLoop.run(QueuedExecutor.java:89)
| at java.lang.Thread.run(Thread.java:595)
|
Our application uses the Spring SimpleMessageListenerContainer to consume messages from a queue and process them in some way. Processing often involves database updates as well as writing other messages to the same and other queues for other types of processing.
Analysis of the deadlock with the SQL Server Profiler indicated contention between various threads using the COMMIT_MESSAGE_REF1 query
(UPDATE JBM_MSG_REF SET STATE='C', TRANSACTION_ID = NULL WHERE TRANSACTION_ID=? AND STATE='+').
Looking at the indexes defined on the JBM_MSG_REF table we noticed that the STATE column is not included. Adding the STATE column after the TRANSACTION_ID column fixed the deadlock problem for us. I.e. the mssql-persistence-service.xml CREATE_IDX_MESSAGE_REF_TX line now reads...
CREATE_IDX_MESSAGE_REF_TX=CREATE INDEX JBM_MSG_REF_TX ON JBM_MSG_REF (TRANSACTION_ID, STATE)
|
Not sure yet if this will have any undesired side effects or whether the same change should be applied for other database persistence serices.
Any thoughts?
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4103599#4103599
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4103599
18 years, 8 months
[JBossCache] - JBossCache on JBoss 4.2.1.GA - Two Nodes not replicating
by burakbayramli
Hi all,
I wrote a simple Hibernate example and deployed this on two nodes in a cluster. I start the cluster using run.sh -c all method. I wrote a stress test that would randomly choose an object ID and a node, and do persist() on one node and then find() on another.
I see no SELECT statements on Hibernate log, which is good, however after test ends, the same ID on two nodes returns different values which tells me replication did not take place. Any thoughts?
My settings are
persistence.xml:
<persistence>
| <persistence-unit name="GGLocal">
| <provider>org.hibernate.ejb.HibernatePersistence</provider>
| <jta-data-source>java:/GGLocalDataSource</jta-data-source>
| <properties>
| <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
| <property name="hibernate.show_sql" value="true"/>
| <property name="hibernate.use_sql_comments" value="true"/>
| <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
|
| <property name="hibernate.cache.use_second_level_cache" value="true"/>
| <property name="hibernate.transaction.manager_lookup_class"
| value="org.hibernate.transaction.JBossTransactionManagerLookup"/>
| <property name="hibernate.cache.use_query_cache" value="true"/>
| <property name="hibernate.cache.provider_class"
| value="org.jboss.ejb3.entity.TreeCacheProviderHook"/>
| <property name="hibernate.treecache.mbean.object_name"
| value="jboss.cache:service=EJB3EntityTreeCache"/>
|
| </properties>
| </persistence-unit>
|
| </persistence>
|
POJO:
@Entity
| @Table(name="car")
| @Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
| public class Car implements Serializable {
|
| @Id
| @Column(name="license_plate")
| String licensePlate;
|
| public String getLicensePlate() {
| return licensePlate;
| }
|
| public void setLicensePlate(String newLicensePlate) {
| this.licensePlate = newLicensePlate;
| }
|
| String description;
|
| public String getDescription() {
| return description;
| }
|
| public void setDescription(String newDescription) {
| this.description = newDescription;
| }
|
| @ManyToOne()
| @JoinColumn(name="garage_id")
| Garage garage;
|
| public Garage getGarage() {
| return garage;
| }
|
| public void setGarage(Garage newGarage) {
| this.garage = newGarage;
| }
|
| }
|
Session Bean:
@Stateful
| public class CarService implements CarInterface, Serializable
| {
|
| private Logger log = Logger.getLogger("appLogger");
|
| @PersistenceContext(unitName="GGLocal")
| EntityManager entityManager;
|
| @TransactionAttribute(TransactionAttributeType.REQUIRED)
| public void updateCar(String id) {
| UUID uuid = java.util.UUID.randomUUID();
| Car car = entityManager.find(Car.class, id);
| car.setDescription(uuid.toString());
| entityManager.persist(car);
| }
|
| @TransactionAttribute(TransactionAttributeType.REQUIRED)
| public String readCarDescription(String id) {
| Car car = entityManager.find(Car.class, id);
| return car.getDescription();
| }
|
| @TransactionAttribute(TransactionAttributeType.REQUIRED)
| public void makeQuery() {
| Query q = entityManager.createQuery("from Car");
| q.setHint("org.hibernate.cacheable", true);
| System.out.println("size=" + q.getResultList().size());
| }
|
|
| }
|
Test:
| public class TerraTest {
|
| /**
| * Describe <code>main</code> method here.
| *
| * @param args a <code>String[]</code> value
| */
| public static void main(String[] args) {
| multiUpdateTest();
| }
|
| // ============================================================
|
| /**
| * Describe <code>multiUpdateTest</code> method here.
| *
| */
| public static void multiUpdateTest() {
|
| System.out.println("-------- started ----------");
|
| CarInterface refs[] = new CarInterface[2];
| refs[0] = getServiceRef("p1","1099");
| refs[1] = getServiceRef("p2","1099");
|
| System.out.println("------------ Refs received -----------");
|
| String plates[] =
| {"34 TTD 2202",
| "32 TF 22",
| "33 TD 202",
| "31 TGG 102",
| "30 TD 212"};
|
| Random nr = new Random();
| Random np = new Random();
|
| for (int i=0;i<400;i++) {
| // pick a random host and car for udpate
| int h = nr.nextInt(2);
| System.out.println("Updating car on node " + h);
| refs[h].updateCar(plates[np.nextInt(plates.length)]);
|
| // pick a random host and car for read
| h = nr.nextInt(2);
| String s = refs[h].readCarDescription(plates[np.nextInt(plates.length)]);
|
| }
|
| String s1 = refs[0].readCarDescription(plates[0]);
| String s2 = refs[1].readCarDescription(plates[0]);
|
| System.out.println("s1=" + s1);
| System.out.println("s2=" + s2);
|
| if (s1.equals(s2)) {
| System.out.println("------------ GOOD -----------");
| }
| }
|
Sample data:
| insert into car(license_plate, garage_id, description) values('34 TTD 2202',1, 'ornek description 1')
| insert into car(license_plate, garage_id, description) values('32 TF 22',1,'ornek description 2')
| insert into car(license_plate, garage_id, description) values('33 TD 202',1,'ornek description 3')
| insert into car(license_plate, garage_id, description) values('31 TGG 102',2,'ornek description 4')
| insert into car(license_plate, garage_id, description) values('30 TD 212',2,'ornek description 5')
|
The logs are attached below:
http://www.bilgidata.com/downloads/jc-logs.zip
Thanks in advance,
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4103595#4103595
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4103595
18 years, 8 months