package fi.otavanopisto.muikku.plugins.data; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.net.URLConnection; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import java.util.Map; import java.util.StringTokenizer; import java.util.logging.Logger; import javax.ejb.Stateful; import javax.enterprise.context.Dependent; import javax.inject.Inject; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; @Dependent @Stateful public class MySQLDataPluginScriptHandler implements DataPluginScriptHandler { @Inject private Logger logger; @Override public String getName() { return "MySQL"; } @Override public void executeScript(String uri, Map<String, String> parameters) throws IOException, SQLException { URL url = new URL(uri); URLConnection connection = url.openConnection(); connection.setDoInput(true); connection.setDoOutput(true); InputStream inputStream = connection.getInputStream(); try { executeScript(inputStream, parameters); } finally { inputStream.close(); } } @Override public void executeScript(InputStream inputStream, Map<String, String> parameters) throws IOException, SQLException { String sqlString = IOUtils.toString(inputStream); if (StringUtils.isNotBlank(sqlString)) { StringTokenizer sqlTokenizer = new StringTokenizer(sqlString, ";"); while (sqlTokenizer.hasMoreTokens()) { String sql = StringUtils.trim(sqlTokenizer.nextToken()); if (StringUtils.isNotBlank(sql)) { executeSql(sql); } } } } private DataSource getDataSource() { try { Context context = new InitialContext(); return (javax.sql.DataSource) context.lookup("java:/jdbc/muikku"); } catch (NamingException e) { } return null; } @Override public Connection getConnection(Map<String, String> parameters) throws SQLException { return getDataSource().getConnection(); } private void executeSql(String sql) throws SQLException { logger.info("Executing sql: " + sql); Connection connection = getConnection(null); try { Statement statement = connection.createStatement(); statement.execute(sql); } finally { connection.close(); } } }