| /* |
| * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved. |
| * |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Public License v. 2.0, which is available at |
| * http://www.eclipse.org/legal/epl-2.0. |
| * |
| * This Source Code may also be made available under the following Secondary |
| * Licenses when the conditions for such availability set forth in the |
| * Eclipse Public License v. 2.0 are satisfied: GNU General Public License, |
| * version 2 with the GNU Classpath Exception, which is available at |
| * https://www.gnu.org/software/classpath/license.html. |
| * |
| * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 |
| */ |
| |
| package com.sun.s1peqe.transaction.txhung.ejb.test; |
| |
| import jakarta.ejb.*; |
| import javax.naming.*; |
| import jakarta.ejb.SessionContext; |
| |
| import java.sql.Statement; |
| import java.sql.ResultSet; |
| import java.sql.Connection; |
| import javax.sql.DataSource; |
| import javax.naming.Context; |
| import javax.naming.InitialContext; |
| import java.util.Enumeration; |
| import java.rmi.RemoteException; |
| import java.util.*; |
| |
| |
| public class TestBean implements SessionBean, SessionSynchronization { |
| private String user = null; |
| private String dbURL1XA = null; |
| private String dbURL1NonXA = null; |
| private String resource = null; |
| private String password = null; |
| private SessionContext ctx = null; |
| |
| |
| |
| // SessionBean methods |
| |
| public void ejbCreate() throws CreateException { |
| System.out.println("TestBean ejbCreate"); |
| |
| } |
| |
| public void ejbActivate() { |
| System.out.println("TestBean ejbActivate"); |
| } |
| |
| public void ejbPassivate() { |
| } |
| |
| public void ejbRemove() { |
| |
| } |
| |
| public void setSessionContext(SessionContext sc) { |
| System.out.println("setSessionContext in BeanB"); |
| try { |
| ctx = sc; |
| Context ic = new InitialContext(); |
| user = (String) ic.lookup("java:comp/env/user"); |
| password = (String) ic.lookup("java:comp/env/password"); |
| dbURL1XA = (String) ic.lookup("java:comp/env/dbURL1-XA"); |
| dbURL1NonXA = (String) ic.lookup("java:comp/env/dbURL1-NonXA"); |
| } catch (Exception ex) { |
| System.out.println("Exception in setSessionContext: " +ex.getMessage()); |
| ex.printStackTrace(); |
| } |
| |
| |
| } |
| |
| |
| public boolean testA1(boolean xa) throws CreateException { |
| if(xa) |
| resource = dbURL1XA; |
| else |
| resource = dbURL1NonXA; |
| |
| System.out.println("Executing the business method testA1"); |
| return true; |
| |
| } |
| |
| |
| public void beforeCompletion() { |
| System.out.println("in beforeCompletion"); |
| Connection con1 = null; |
| System.out.println("insert in BeanB"); |
| try { |
| con1 = getConnection(resource); |
| Statement stmt1 = con1.createStatement(); |
| String acc = "100"; |
| float bal = 5000; |
| stmt1.executeUpdate("INSERT INTO txAccount VALUES ('" + acc + "', " + bal + ")"); |
| System.out.println("Account added Successfully in "+resource+"..."); |
| System.out.println("Rolling back the transaction"); |
| ctx.setRollbackOnly(); |
| //return true; |
| } catch (Exception ex) { |
| System.out.println("Exception in insert: " + ex.toString()); |
| ex.printStackTrace(); |
| //return false; |
| } finally { |
| try { |
| con1.close(); |
| } catch (java.sql.SQLException ex) { |
| } |
| } |
| } |
| |
| public void afterBegin() { |
| System.out.println("in afterBegin"); |
| } |
| |
| public void afterCompletion(boolean committed) { |
| System.out.println("in afterCompletion"); |
| } |
| |
| private Connection getConnection(String dbURL) { |
| Connection con = null; |
| System.out.println("getConnection in BeanB"); |
| try{ |
| Context context = new InitialContext(); |
| DataSource ds = (DataSource) context.lookup(dbURL); |
| con = ds.getConnection(user, password); |
| System.out.println("Got DB Connection Successfully..."); |
| } catch (Exception ex) { |
| System.out.println("Exception in getConnection: " + ex.toString()); |
| ex.printStackTrace(); |
| } |
| return con; |
| } |
| |
| |
| |
| } |