blob: a82b10932ce42e097eb36fe3724f43f5b3269899 [file] [log] [blame]
/*
* Copyright (c) 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 test;
import jakarta.ejb.*;
import javax.naming.*;
import javax.sql.DataSource;
import java.sql.*;
import com.sun.jdo.api.persistence.support.PersistenceManagerFactory;
/**
* This SessionBean is used to test Read-Only CMP beans by inserting
* initial data into the table and updating column 'NAME' when requested.
* This allows to use java2db for the actual beans.
* This bean does not access CMP beans.
*/
public class TestBean implements SessionBean {
private DataSource ds = null;
// SessionBean methods
public void ejbCreate() throws CreateException {
System.out.println("TestBean ejbCreate");
try {
ds = lookupDataSource();
} catch (NamingException ex) {
throw new EJBException(ex.getMessage());
}
}
public void ejbActivate() {
System.out.println("TestBean ejbActivate");
}
public void ejbPassivate() {
ds = null;
}
public void ejbRemove() {
}
public void setSessionContext(SessionContext sc) {
}
/** Look up a DataSource by JNDI name.
* The JNDI name is expected to be 'jdo/pmf', but it can reference
* either a PersistenceManagerFactory or a DataSource. In case of
* a former, the DataSource name will be a ConnectionFactory's name.
*/
private DataSource lookupDataSource() throws NamingException {
Context initial = new InitialContext();
Object objref = initial.lookup("jdo/pmf");
if (objref instanceof PersistenceManagerFactory) {
PersistenceManagerFactory pmf = (PersistenceManagerFactory)objref;
String cfname = pmf.getConnectionFactoryName();
System.out.println("DATASOURCE NAME: " + cfname);
objref = initial.lookup(cfname);
}
return (DataSource) objref;
}
/** Insert values via jdbc call */
public void insertValues (String table_name) {
String st = "INSERT INTO " + table_name + " VALUES ('" +
table_name + "', '" + table_name + "', '" + table_name + "')";
System.out.println("INSERT STATEMENT: " + st);
executeStatement(st);
// Insert another row
st = "INSERT INTO " + table_name + " VALUES ('" +
table_name + "1', '" + table_name + "1', '" + table_name + "1')";
System.out.println("INSERT STATEMENT: " + st);
executeStatement(st);
}
/** Update values via jdbc call */
public void updateValues (String table_name) {
String st = "UPDATE " + table_name + " SET SHORTNAME = 'FOO' WHERE ID = '" + table_name + "'";
System.out.println("UPDATE STATEMENT: " + st);
executeStatement(st);
}
/** Execute SQL statement.
* @param st the SQL statement as a String.
* @throws EJBException to wrap a SQLException.
*/
private void executeStatement (String st) {
Connection conn = null;
try {
conn = ds.getConnection();
PreparedStatement ps = conn.prepareStatement(st);
ps.execute();
} catch (SQLException e) {
e.printStackTrace();
throw new EJBException(e.toString());
} finally {
try {
if (conn != null) conn.close();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
}
}