/*
* JBoss, Home of Professional Open Source
* Copyright 2014, Red Hat, Inc. and/or its affiliates, and individual
* contributors by the @authors tag. See the copyright.txt in the
* distribution for a full listing of individual contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jboss.as.quickstarts.ejbinwar.ejb;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.annotation.Resource;
import javax.ejb.EJBContext;
import javax.ejb.Stateful;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
import javax.sql.DataSource;
/**
* A simple Hello World EJB. The EJB does not use an interface.
*
* @author paul.robinson@redhat.com, 2011-12-21
*/
@Stateful
@TransactionManagement(TransactionManagementType.CONTAINER)
public class GreeterEJB {
@Resource(name = "java:jboss/datasources/ExampleDS")
private DataSource ds;
@Resource
private EJBContext context;
/**
* This method takes a name and returns a personalised greeting.
*
* @param name
* the name of the person to be greeted
* @return the personalised greeting.
*/
public String sayHello( String name ) {
int count = checkTable();
try ( Connection conn = ds.getConnection(); Statement stmt = conn.createStatement(); ) {
String sql = "insert into TEST (id, name) values (" + (count + 1) + ", 'john')";
stmt.execute( sql );
System.out.println( "done! " + sql );
if ( true ) {
throw new SQLException( "dummy" );
}
} catch ( SQLException e ) {
e.printStackTrace();
context.setRollbackOnly();
// throw new RuntimeException( e );
}
return "Hello " + name;
}
private int checkTable() {
int count = 0;
try {
String sql = "select count(*) from TEST";
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery( sql );
while ( rs.next() ) {
count = rs.getInt( 1 );
}
System.out.println( "done! " + sql );
stmt.close();
conn.close();
} catch ( Exception e ) {
try {
String sql = "create table TEST (id int primary key, name varchar)";
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
stmt.execute( sql );
System.out.println( "create! " + sql );
stmt.close();
conn.close();
return 0;
} catch ( Exception e1 ) {
e1.printStackTrace();
}
}
return count;
}
}