001: // InitDBSL.java
002: // Stateless Session bean
003:
004: package org.objectweb.jonas.stests.manyops;
005:
006: import java.sql.Connection;
007: import java.sql.SQLException;
008: import java.sql.Statement;
009:
010: import javax.ejb.CreateException;
011: import javax.ejb.EJBException;
012: import javax.ejb.SessionBean;
013: import javax.ejb.SessionContext;
014: import javax.naming.InitialContext;
015: import javax.sql.DataSource;
016:
017: import org.objectweb.jonas.common.Log;
018: import org.objectweb.util.monolog.api.BasicLevel;
019: import org.objectweb.util.monolog.api.Logger;
020:
021: /**
022: *
023: */
024: public class InitDBSL implements SessionBean {
025:
026: static private Logger logger = null;
027: SessionContext ejbContext;
028:
029: // ------------------------------------------------------------------
030: // SessionBean implementation
031: // ------------------------------------------------------------------
032:
033: /**
034: * Set the associated session context. The container calls this method
035: * after the instance creation.
036: * The enterprise Bean instance should store the reference to the context
037: * object in an instance variable.
038: * This method is called with no transaction context.
039: *
040: * @param sessionContext A SessionContext interface for the instance.
041: * @throws EJBException Thrown by the method to indicate a failure caused by
042: * a system-level error.
043: */
044: public void setSessionContext(SessionContext ctx) {
045: if (logger == null)
046: logger = Log.getLogger("org.objectweb.jonas_tests");
047: logger.log(BasicLevel.DEBUG, "");
048: ejbContext = ctx;
049: }
050:
051: /**
052: * A container invokes this method before it ends the life of the session object.
053: * This happens as a result of a client's invoking a remove operation, or when a
054: * container decides to terminate the session object after a timeout.
055: * This method is called with no transaction context.
056: *
057: * @throws EJBException Thrown by the method to indicate a failure caused by
058: * a system-level error.
059: */
060: public void ejbRemove() {
061: logger.log(BasicLevel.DEBUG, "");
062: }
063:
064: /**
065: * The Session bean must define 1 or more ejbCreate methods.
066: *
067: * @throws CreateException Failure to create a session EJB object.
068: */
069: public void ejbCreate() throws CreateException {
070: logger.log(BasicLevel.DEBUG, "");
071: }
072:
073: /**
074: * A container invokes this method on an instance before the instance
075: * becomes disassociated with a specific EJB object.
076: */
077: public void ejbPassivate() {
078: logger.log(BasicLevel.DEBUG, "");
079: }
080:
081: /**
082: * A container invokes this method when the instance is taken out of
083: * the pool of available instances to become associated with a specific
084: * EJB object.
085: */
086: public void ejbActivate() {
087: logger.log(BasicLevel.DEBUG, "");
088: }
089:
090: // ------------------------------------------------------------------
091: // InitDB implementation
092: // ------------------------------------------------------------------
093:
094: /**
095: * createTable
096: */
097: public void createTable() {
098: logger.log(BasicLevel.DEBUG, "");
099: initDB("stestsmanyops");
100: }
101:
102: void initDB(String tableName) {
103: logger.log(BasicLevel.DEBUG, "");
104:
105: // Get my DataSource from JNDI
106: DataSource ds = null;
107: InitialContext ictx = null;
108: try {
109: ictx = new InitialContext();
110: } catch (Exception e) {
111: logger.log(BasicLevel.ERROR, "new InitialContext() : " + e);
112: throw new EJBException("Cannot get JNDI InitialContext");
113: }
114: try {
115: ds = (DataSource) ictx.lookup("java:comp/env/jdbc/mydb");
116: } catch (Exception e) {
117: logger.log(BasicLevel.ERROR, "cannot lookup datasource "
118: + e);
119: throw new EJBException("cannot lookup datasource");
120: }
121:
122: // Drop table
123: Connection conn = null;
124: Statement stmt = null;
125: try {
126: conn = ds.getConnection();
127: stmt = conn.createStatement();
128: stmt.execute("drop table " + tableName);
129: stmt.close();
130: } catch (SQLException e) {
131: // The first time, table will not exist.
132: logger
133: .log(BasicLevel.INFO, "Exception in dropTable : "
134: + e);
135: }
136:
137: // Create table.
138: try {
139: stmt = conn.createStatement();
140: stmt
141: .execute("create table "
142: + tableName
143: + "(name varchar(30) not null primary key, number integer, price integer)");
144: stmt.close();
145: conn.close();
146: } catch (SQLException e) {
147: logger.log(BasicLevel.ERROR, "Exception in createTable : "
148: + e);
149: throw new EJBException("Exception in createTable");
150: }
151: }
152:
153: }
|