[ 2042733 ] Remove non-Lan connection profile code
[ 2188252 ] Make Adempiere build using both jdk 5 and jdk 6
This commit is contained in:
parent
b0d7f89e8a
commit
126f1f06e3
|
@ -43,7 +43,6 @@
|
||||||
<classpathentry exported="true" kind="lib" path="tools/lib/commons-logging.jar"/>
|
<classpathentry exported="true" kind="lib" path="tools/lib/commons-logging.jar"/>
|
||||||
<classpathentry exported="true" kind="lib" path="tools/lib/commons-net-1.4.0.jar"/>
|
<classpathentry exported="true" kind="lib" path="tools/lib/commons-net-1.4.0.jar"/>
|
||||||
<classpathentry exported="true" kind="lib" path="tools/lib/jgraph.jar"/>
|
<classpathentry exported="true" kind="lib" path="tools/lib/jgraph.jar"/>
|
||||||
<classpathentry exported="true" kind="lib" path="tools/lib/jcommon-1.0.5.jar"/>
|
|
||||||
<classpathentry exported="true" kind="lib" path="tools/lib/postgresql.jar"/>
|
<classpathentry exported="true" kind="lib" path="tools/lib/postgresql.jar"/>
|
||||||
<classpathentry exported="true" kind="lib" path="tools/lib/c3p0-0.9.1.2.jar"/>
|
<classpathentry exported="true" kind="lib" path="tools/lib/c3p0-0.9.1.2.jar"/>
|
||||||
<classpathentry exported="true" kind="lib" path="tools/lib/c3p0-oracle-thin-extras-0.9.1.2.jar"/>
|
<classpathentry exported="true" kind="lib" path="tools/lib/c3p0-oracle-thin-extras-0.9.1.2.jar"/>
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
#Sun Aug 03 07:33:03 SGT 2008
|
#Fri Oct 24 10:43:33 SGT 2008
|
||||||
eclipse.preferences.version=1
|
eclipse.preferences.version=1
|
||||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
|
instance/org.eclipse.core.net/org.eclipse.core.net.hasMigrated=true
|
||||||
org.eclipse.jdt.core.compiler.compliance=1.5
|
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
|
||||||
|
org.eclipse.jdt.core.compiler.compliance=1.6
|
||||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||||
org.eclipse.jdt.core.compiler.source=1.5
|
org.eclipse.jdt.core.compiler.source=1.6
|
||||||
|
|
|
@ -46,7 +46,6 @@ import net.sf.jasperreports.engine.JasperReport;
|
||||||
import net.sf.jasperreports.engine.util.JRLoader;
|
import net.sf.jasperreports.engine.util.JRLoader;
|
||||||
|
|
||||||
import org.compiere.db.CConnection;
|
import org.compiere.db.CConnection;
|
||||||
import org.compiere.db.ServerConnection;
|
|
||||||
import org.compiere.interfaces.MD5;
|
import org.compiere.interfaces.MD5;
|
||||||
import org.compiere.interfaces.MD5Home;
|
import org.compiere.interfaces.MD5Home;
|
||||||
import org.compiere.model.MAttachment;
|
import org.compiere.model.MAttachment;
|
||||||
|
@ -352,14 +351,7 @@ public class ReportStarter implements ProcessCall, ClientProcess {
|
||||||
*/
|
*/
|
||||||
protected Connection getConnection()
|
protected Connection getConnection()
|
||||||
{
|
{
|
||||||
if (DB.isRemoteObjects())
|
return DB.getConnectionRW();
|
||||||
{
|
|
||||||
return new ServerConnection();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return DB.getConnectionRW();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -27,8 +27,6 @@ import javax.swing.JOptionPane;
|
||||||
import org.compiere.*;
|
import org.compiere.*;
|
||||||
import org.compiere.interfaces.*;
|
import org.compiere.interfaces.*;
|
||||||
import org.compiere.util.*;
|
import org.compiere.util.*;
|
||||||
import org.jboss.security.SecurityAssociation;
|
|
||||||
import org.jboss.security.SimplePrincipal;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adempiere Connection Descriptor
|
* Adempiere Connection Descriptor
|
||||||
|
@ -45,12 +43,12 @@ public class CConnection implements Serializable, Cloneable
|
||||||
private static CLogger log = CLogger.getCLogger (CConnection.class);
|
private static CLogger log = CLogger.getCLogger (CConnection.class);
|
||||||
|
|
||||||
/** Connection profiles */
|
/** Connection profiles */
|
||||||
|
@Deprecated
|
||||||
public static ValueNamePair[] CONNECTIONProfiles = new ValueNamePair[]{
|
public static ValueNamePair[] CONNECTIONProfiles = new ValueNamePair[]{
|
||||||
new ValueNamePair("L", "LAN"),
|
new ValueNamePair("L", "LAN")};
|
||||||
new ValueNamePair("V", "VPN"),
|
|
||||||
new ValueNamePair("W", "WAN") };
|
|
||||||
|
|
||||||
/** Connection Profile LAN */
|
/** Connection Profile LAN */
|
||||||
|
@Deprecated
|
||||||
public static final String PROFILE_LAN = "L";
|
public static final String PROFILE_LAN = "L";
|
||||||
/**
|
/**
|
||||||
* Connection Profile Terminal Server
|
* Connection Profile Terminal Server
|
||||||
|
@ -58,8 +56,10 @@ public class CConnection implements Serializable, Cloneable
|
||||||
**/
|
**/
|
||||||
public static final String PROFILE_TERMINAL = "T";
|
public static final String PROFILE_TERMINAL = "T";
|
||||||
/** Connection Profile VPM */
|
/** Connection Profile VPM */
|
||||||
|
@Deprecated
|
||||||
public static final String PROFILE_VPN = "V";
|
public static final String PROFILE_VPN = "V";
|
||||||
/** Connection Profile WAN */
|
/** Connection Profile WAN */
|
||||||
|
@Deprecated
|
||||||
public static final String PROFILE_WAN = "W";
|
public static final String PROFILE_WAN = "W";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -199,7 +199,7 @@ public class CConnection implements Serializable, Cloneable
|
||||||
private String m_db_name = "MyDBName";
|
private String m_db_name = "MyDBName";
|
||||||
|
|
||||||
/** Connection Profile */
|
/** Connection Profile */
|
||||||
private String m_connectionProfile = null;
|
private String m_connectionProfile = PROFILE_LAN;
|
||||||
|
|
||||||
/** In Memory connection */
|
/** In Memory connection */
|
||||||
private boolean m_bequeath = false;
|
private boolean m_bequeath = false;
|
||||||
|
@ -545,71 +545,43 @@ public class CConnection implements Serializable, Cloneable
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* RMI over HTTP
|
* RMI over HTTP
|
||||||
|
*
|
||||||
|
* Deprecated, always return false
|
||||||
* @return true if RMI over HTTP (Wan Connection Profile)
|
* @return true if RMI over HTTP (Wan Connection Profile)
|
||||||
|
* @deprecated
|
||||||
*/
|
*/
|
||||||
public boolean isRMIoverHTTP ()
|
public boolean isRMIoverHTTP ()
|
||||||
{
|
{
|
||||||
return Ini.isClient()
|
return false;
|
||||||
&& getConnectionProfile().equals(PROFILE_WAN);
|
|
||||||
} // isRMIoverHTTP
|
} // isRMIoverHTTP
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set Connection Profile
|
* Set Connection Profile
|
||||||
* @param connectionProfile connection profile
|
* @param connectionProfile connection profile
|
||||||
|
* @deprecated
|
||||||
*/
|
*/
|
||||||
public void setConnectionProfile (ValueNamePair connectionProfile)
|
public void setConnectionProfile (ValueNamePair connectionProfile)
|
||||||
{
|
{
|
||||||
if (connectionProfile != null)
|
if (connectionProfile != null)
|
||||||
setConnectionProfile(connectionProfile.getValue());
|
setConnectionProfile(PROFILE_LAN);
|
||||||
} // setConnectionProfile
|
} // setConnectionProfile
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set Connection Profile
|
* Set Connection Profile
|
||||||
* @param connectionProfile connection profile
|
* @param connectionProfile connection profile
|
||||||
|
* @deprecated
|
||||||
*/
|
*/
|
||||||
public void setConnectionProfile (String connectionProfile)
|
public void setConnectionProfile (String connectionProfile)
|
||||||
{
|
{
|
||||||
if (connectionProfile == null
|
|
||||||
|| (m_connectionProfile != null
|
|
||||||
&& m_connectionProfile.equals(connectionProfile))) // same
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (PROFILE_TERMINAL.equals(connectionProfile))
|
|
||||||
connectionProfile = PROFILE_LAN;
|
|
||||||
|
|
||||||
if (PROFILE_LAN.equals(connectionProfile)
|
|
||||||
|| PROFILE_VPN.equals(connectionProfile)
|
|
||||||
|| PROFILE_WAN.equals(connectionProfile))
|
|
||||||
{
|
|
||||||
if (m_connectionProfile != null)
|
|
||||||
{
|
|
||||||
log.config(m_connectionProfile + " -> " + connectionProfile);
|
|
||||||
m_connectionProfile = connectionProfile;
|
|
||||||
if (PROFILE_WAN.equals(m_connectionProfile))
|
|
||||||
setAppsPort(80);
|
|
||||||
else
|
|
||||||
setAppsPort(DEFAULT_APP_SERVER_PORT);
|
|
||||||
Ini.setProperty(Ini.P_CONNECTION, toStringLong());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
m_connectionProfile = connectionProfile;
|
|
||||||
|
|
||||||
//hengsin, reset initial context and env
|
|
||||||
m_iContext = null;
|
|
||||||
m_env = null;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
log.warning("Invalid: " + connectionProfile);
|
|
||||||
} // setConnectionProfile
|
} // setConnectionProfile
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get Connection Profile
|
* Get Connection Profile
|
||||||
* @return connection profile
|
* @return connection profile
|
||||||
|
* @deprecated
|
||||||
*/
|
*/
|
||||||
public String getConnectionProfile ()
|
public String getConnectionProfile ()
|
||||||
{
|
{
|
||||||
if (m_connectionProfile != null)
|
|
||||||
return m_connectionProfile;
|
|
||||||
return PROFILE_LAN;
|
return PROFILE_LAN;
|
||||||
} // getConnectionProfile
|
} // getConnectionProfile
|
||||||
|
|
||||||
|
@ -617,6 +589,7 @@ public class CConnection implements Serializable, Cloneable
|
||||||
* Get Connection Profile Text
|
* Get Connection Profile Text
|
||||||
* @param connectionProfile
|
* @param connectionProfile
|
||||||
* @return connection profile text
|
* @return connection profile text
|
||||||
|
* @deprecated
|
||||||
*/
|
*/
|
||||||
public String getConnectionProfileText (String connectionProfile)
|
public String getConnectionProfileText (String connectionProfile)
|
||||||
{
|
{
|
||||||
|
@ -631,6 +604,7 @@ public class CConnection implements Serializable, Cloneable
|
||||||
/**
|
/**
|
||||||
* Get Connection Profile Text
|
* Get Connection Profile Text
|
||||||
* @return connection profile text
|
* @return connection profile text
|
||||||
|
* @deprecated
|
||||||
*/
|
*/
|
||||||
public String getConnectionProfileText ()
|
public String getConnectionProfileText ()
|
||||||
{
|
{
|
||||||
|
@ -640,6 +614,7 @@ public class CConnection implements Serializable, Cloneable
|
||||||
/**
|
/**
|
||||||
* Get Connection Profile
|
* Get Connection Profile
|
||||||
* @return connection profile
|
* @return connection profile
|
||||||
|
* @deprecated
|
||||||
*/
|
*/
|
||||||
public ValueNamePair getConnectionProfilePair ()
|
public ValueNamePair getConnectionProfilePair ()
|
||||||
{
|
{
|
||||||
|
@ -654,23 +629,21 @@ public class CConnection implements Serializable, Cloneable
|
||||||
/**
|
/**
|
||||||
* Should objects be created on Server ?
|
* Should objects be created on Server ?
|
||||||
* @return true if client and VPN/WAN
|
* @return true if client and VPN/WAN
|
||||||
|
* @deprecated
|
||||||
*/
|
*/
|
||||||
public boolean isServerObjects()
|
public boolean isServerObjects()
|
||||||
{
|
{
|
||||||
return (Ini.isClient()
|
return false;
|
||||||
&& (getConnectionProfile().equals(PROFILE_VPN)
|
|
||||||
|| getConnectionProfile().equals(PROFILE_WAN) ));
|
|
||||||
} // isServerObjects
|
} // isServerObjects
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Should objects be created on Server ?
|
* Should objects be created on Server ?
|
||||||
* @return true if client and Terminal/VPN/WAN
|
* @return true if client and Terminal/VPN/WAN
|
||||||
|
* @deprecated
|
||||||
*/
|
*/
|
||||||
public boolean isServerProcess()
|
public boolean isServerProcess()
|
||||||
{
|
{
|
||||||
return (Ini.isClient()
|
return false;
|
||||||
&& (getConnectionProfile().equals(PROFILE_VPN)
|
|
||||||
|| getConnectionProfile().equals(PROFILE_WAN) ));
|
|
||||||
} // isServerProcess
|
} // isServerProcess
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -956,10 +929,6 @@ public class CConnection implements Serializable, Cloneable
|
||||||
*/
|
*/
|
||||||
public Exception testDatabase(boolean retest)
|
public Exception testDatabase(boolean retest)
|
||||||
{
|
{
|
||||||
// At this point Application Server Connection is tested.
|
|
||||||
if (DB.isRemoteObjects())
|
|
||||||
return null;
|
|
||||||
|
|
||||||
if (!retest && m_ds != null && m_okDB)
|
if (!retest && m_ds != null && m_okDB)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
|
@ -1093,7 +1062,6 @@ public class CConnection implements Serializable, Cloneable
|
||||||
sb.append ("name=").append (m_name)
|
sb.append ("name=").append (m_name)
|
||||||
.append (",AppsHost=").append (m_apps_host)
|
.append (",AppsHost=").append (m_apps_host)
|
||||||
.append (",AppsPort=").append (m_apps_port)
|
.append (",AppsPort=").append (m_apps_port)
|
||||||
.append (",Profile=").append (getConnectionProfile())
|
|
||||||
.append (",type=").append (m_type)
|
.append (",type=").append (m_type)
|
||||||
.append (",DBhost=").append (m_db_host)
|
.append (",DBhost=").append (m_db_host)
|
||||||
.append (",DBport=").append (m_db_port)
|
.append (",DBport=").append (m_db_port)
|
||||||
|
@ -1121,9 +1089,6 @@ public class CConnection implements Serializable, Cloneable
|
||||||
setAppsHost (attributes.substring (attributes.indexOf ("AppsHost=") + 9, attributes.indexOf (",AppsPort=")));
|
setAppsHost (attributes.substring (attributes.indexOf ("AppsHost=") + 9, attributes.indexOf (",AppsPort=")));
|
||||||
int index = attributes.indexOf("AppsPort=");
|
int index = attributes.indexOf("AppsPort=");
|
||||||
setAppsPort (attributes.substring (index + 9, attributes.indexOf (",", index)));
|
setAppsPort (attributes.substring (index + 9, attributes.indexOf (",", index)));
|
||||||
index = attributes.indexOf("Profile=");
|
|
||||||
if (index > 0) // new attribute, may not exist
|
|
||||||
setConnectionProfile(attributes.substring(index+8, attributes.indexOf (",", index)));
|
|
||||||
//
|
//
|
||||||
setType (attributes.substring (attributes.indexOf ("type=")+5, attributes.indexOf (",DBhost=")));
|
setType (attributes.substring (attributes.indexOf ("type=")+5, attributes.indexOf (",DBhost=")));
|
||||||
setDbHost (attributes.substring (attributes.indexOf ("DBhost=") + 7, attributes.indexOf (",DBport=")));
|
setDbHost (attributes.substring (attributes.indexOf ("DBhost=") + 7, attributes.indexOf (",DBport=")));
|
||||||
|
@ -1159,7 +1124,6 @@ public class CConnection implements Serializable, Cloneable
|
||||||
&& cc.getAppsPort() == m_apps_port
|
&& cc.getAppsPort() == m_apps_port
|
||||||
&& cc.getDbHost().equals (m_db_host)
|
&& cc.getDbHost().equals (m_db_host)
|
||||||
&& cc.getDbPort() == m_db_port
|
&& cc.getDbPort() == m_db_port
|
||||||
&& cc.getConnectionProfile().equals(getConnectionProfile())
|
|
||||||
&& cc.getDbName().equals(m_db_name)
|
&& cc.getDbName().equals(m_db_name)
|
||||||
&& cc.getType().equals(m_type)
|
&& cc.getType().equals(m_type)
|
||||||
&& cc.getDbUid().equals(m_db_uid)
|
&& cc.getDbUid().equals(m_db_uid)
|
||||||
|
@ -1217,12 +1181,8 @@ public class CConnection implements Serializable, Cloneable
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//hengsin, don't test datasource for wan profile
|
if (m_db != null) // test class loader ability
|
||||||
if (!DB.isRemoteObjects())
|
m_db.getDataSource(this);
|
||||||
{
|
|
||||||
if (m_db != null) // test class loader ability
|
|
||||||
m_db.getDataSource(this);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
catch (NoClassDefFoundError ee)
|
catch (NoClassDefFoundError ee)
|
||||||
{
|
{
|
||||||
|
@ -1448,7 +1408,7 @@ public class CConnection implements Serializable, Cloneable
|
||||||
* Get Initial Environment
|
* Get Initial Environment
|
||||||
* @param AppsHost host
|
* @param AppsHost host
|
||||||
* @param AppsPort port
|
* @param AppsPort port
|
||||||
* @param RMIoverHTTP true if tunnel through HTTP
|
* @param RMIoverHTTP ignore
|
||||||
* @param principal
|
* @param principal
|
||||||
* @param credential
|
* @param credential
|
||||||
* @return environment
|
* @return environment
|
||||||
|
@ -1459,21 +1419,9 @@ public class CConnection implements Serializable, Cloneable
|
||||||
// Set Environment
|
// Set Environment
|
||||||
Hashtable<String,String> env = new Hashtable<String,String>();
|
Hashtable<String,String> env = new Hashtable<String,String>();
|
||||||
String connect = AppsHost;
|
String connect = AppsHost;
|
||||||
if (RMIoverHTTP)
|
if (AppsHost.indexOf("://") == -1)
|
||||||
{
|
connect = "jnp://" + AppsHost + ":" + AppsPort;
|
||||||
env.put (Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.HttpNamingContextFactory");
|
env.put (Context.PROVIDER_URL, connect);
|
||||||
if (AppsHost.indexOf("://") == -1)
|
|
||||||
connect = "http://" + AppsHost + ":" + AppsPort
|
|
||||||
+ "/invoker/JNDIFactory";
|
|
||||||
env.put(Context.PROVIDER_URL, connect);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
env.put (Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
|
|
||||||
if (AppsHost.indexOf("://") == -1)
|
|
||||||
connect = "jnp://" + AppsHost + ":" + AppsPort;
|
|
||||||
env.put (Context.PROVIDER_URL, connect);
|
|
||||||
}
|
|
||||||
env.put (Context.URL_PKG_PREFIXES, "org.jboss.naming.client");
|
env.put (Context.URL_PKG_PREFIXES, "org.jboss.naming.client");
|
||||||
// HTTP - default timeout 0
|
// HTTP - default timeout 0
|
||||||
env.put (org.jnp.interfaces.TimedSocketFactory.JNP_TIMEOUT, "5000"); // timeout in ms
|
env.put (org.jnp.interfaces.TimedSocketFactory.JNP_TIMEOUT, "5000"); // timeout in ms
|
||||||
|
@ -1483,13 +1431,13 @@ public class CConnection implements Serializable, Cloneable
|
||||||
|
|
||||||
if (principal != null && credential != null)
|
if (principal != null && credential != null)
|
||||||
{
|
{
|
||||||
SecurityAssociation.setPrincipal(new SimplePrincipal(principal));
|
env.put (Context.INITIAL_CONTEXT_FACTORY,"org.jboss.security.jndi.JndiLoginInitialContextFactory");
|
||||||
SecurityAssociation.setCredential(credential);
|
env.put(Context.SECURITY_PRINCIPAL, principal);
|
||||||
|
env.put(Context.SECURITY_CREDENTIALS, credential);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SecurityAssociation.setPrincipal(null);
|
env.put (Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
|
||||||
SecurityAssociation.setCredential(null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return env;
|
return env;
|
||||||
|
@ -1600,10 +1548,7 @@ public class CConnection implements Serializable, Cloneable
|
||||||
setDbPort (svr.getDbPort ());
|
setDbPort (svr.getDbPort ());
|
||||||
setDbName (svr.getDbName ());
|
setDbName (svr.getDbName ());
|
||||||
setDbUid (svr.getDbUid ());
|
setDbUid (svr.getDbUid ());
|
||||||
if (DB.isRemoteObjects())
|
setDbPwd (svr.getDbPwd ());
|
||||||
setDbPwd ("");
|
|
||||||
else
|
|
||||||
setDbPwd (svr.getDbPwd ());
|
|
||||||
setBequeath (false);
|
setBequeath (false);
|
||||||
//
|
//
|
||||||
setFwHost (svr.getFwHost ());
|
setFwHost (svr.getFwHost ());
|
||||||
|
|
|
@ -122,8 +122,6 @@ public class CConnectionDialog extends CDialog implements ActionListener
|
||||||
private CLabel dbUidLabel = new CLabel();
|
private CLabel dbUidLabel = new CLabel();
|
||||||
private CTextField dbUidField = new CTextField();
|
private CTextField dbUidField = new CTextField();
|
||||||
private JPasswordField dbPwdField = new JPasswordField();
|
private JPasswordField dbPwdField = new JPasswordField();
|
||||||
private CLabel connectionProfileLabel = new CLabel();
|
|
||||||
private CComboBox connectionProfileField = new CComboBox(CConnection.CONNECTIONProfiles);
|
|
||||||
|
|
||||||
private boolean isCancel = true;
|
private boolean isCancel = true;
|
||||||
|
|
||||||
|
@ -166,8 +164,6 @@ public class CConnectionDialog extends CDialog implements ActionListener
|
||||||
//cbOverwrite.setText(res.getString("Overwrite"));
|
//cbOverwrite.setText(res.getString("Overwrite"));
|
||||||
dbUidLabel.setText(res.getString("DBUidPwd"));
|
dbUidLabel.setText(res.getString("DBUidPwd"));
|
||||||
dbUidField.setColumns(10);
|
dbUidField.setColumns(10);
|
||||||
connectionProfileLabel.setText(res.getString("ConnectionProfile"));
|
|
||||||
connectionProfileField.addActionListener(this);
|
|
||||||
this.getContentPane().add(mainPanel, BorderLayout.CENTER);
|
this.getContentPane().add(mainPanel, BorderLayout.CENTER);
|
||||||
mainPanel.add(centerPanel, BorderLayout.CENTER);
|
mainPanel.add(centerPanel, BorderLayout.CENTER);
|
||||||
mainPanel.add(southPanel, BorderLayout.SOUTH);
|
mainPanel.add(southPanel, BorderLayout.SOUTH);
|
||||||
|
@ -187,51 +183,47 @@ public class CConnectionDialog extends CDialog implements ActionListener
|
||||||
,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0, 12, 5, 5), 0, 0));
|
,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0, 12, 5, 5), 0, 0));
|
||||||
centerPanel.add(appsPortField, new GridBagConstraints(1, 2, 1, 1, 0.0, 0.0
|
centerPanel.add(appsPortField, new GridBagConstraints(1, 2, 1, 1, 0.0, 0.0
|
||||||
,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0));
|
,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0));
|
||||||
centerPanel.add(connectionProfileLabel, new GridBagConstraints(0, 3, 1, 1, 0.0, 0.0
|
|
||||||
,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(5, 12, 5, 5), 0, 0));
|
|
||||||
centerPanel.add(connectionProfileField, new GridBagConstraints(1, 3, 1, 1, 0.0, 0.0
|
|
||||||
,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 0, 0, 0), 0, 0));
|
|
||||||
//
|
//
|
||||||
centerPanel.add(bTestApps, new GridBagConstraints(1, 4, 1, 1, 0.0, 0.0
|
centerPanel.add(bTestApps, new GridBagConstraints(1, 3, 1, 1, 0.0, 0.0
|
||||||
,GridBagConstraints.SOUTHWEST, GridBagConstraints.HORIZONTAL, new Insets(5, 0, 12, 0), 0, 0));
|
,GridBagConstraints.SOUTHWEST, GridBagConstraints.HORIZONTAL, new Insets(5, 0, 12, 0), 0, 0));
|
||||||
//centerPanel.add(cbOverwrite, new GridBagConstraints(2, 4, 1, 1, 0.0, 0.0
|
//centerPanel.add(cbOverwrite, new GridBagConstraints(2, 4, 1, 1, 0.0, 0.0
|
||||||
//,GridBagConstraints.WEST, GridBagConstraints.VERTICAL, new Insets(0, 5, 0, 12), 0, 0));
|
//,GridBagConstraints.WEST, GridBagConstraints.VERTICAL, new Insets(0, 5, 0, 12), 0, 0));
|
||||||
// DB
|
// DB
|
||||||
centerPanel.add(dbTypeLabel, new GridBagConstraints(0, 5, 1, 1, 0.0, 0.0
|
centerPanel.add(dbTypeLabel, new GridBagConstraints(0, 4, 1, 1, 0.0, 0.0
|
||||||
,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(5, 12, 5, 5), 0, 0));
|
,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(5, 12, 5, 5), 0, 0));
|
||||||
centerPanel.add(dbTypeField, new GridBagConstraints(1, 5, 1, 1, 0.0, 0.0
|
centerPanel.add(dbTypeField, new GridBagConstraints(1, 4, 1, 1, 0.0, 0.0
|
||||||
,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 0, 5, 0), 0, 0));
|
,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 0, 5, 0), 0, 0));
|
||||||
centerPanel.add(cbBequeath, new GridBagConstraints(2, 5, 1, 1, 0.0, 0.0
|
centerPanel.add(cbBequeath, new GridBagConstraints(2, 4, 1, 1, 0.0, 0.0
|
||||||
,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 12), 0, 0));
|
,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 12), 0, 0));
|
||||||
centerPanel.add(hostLabel, new GridBagConstraints(0, 6, 1, 1, 0.0, 0.0
|
centerPanel.add(hostLabel, new GridBagConstraints(0, 5, 1, 1, 0.0, 0.0
|
||||||
,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(5, 12, 5, 5), 0, 0));
|
,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(5, 12, 5, 5), 0, 0));
|
||||||
centerPanel.add(hostField, new GridBagConstraints(1, 6, 2, 1, 0.0, 0.0
|
centerPanel.add(hostField, new GridBagConstraints(1, 5, 2, 1, 0.0, 0.0
|
||||||
,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 0, 5, 12), 0, 0));
|
,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 0, 5, 12), 0, 0));
|
||||||
centerPanel.add(portLabel, new GridBagConstraints(0, 7, 1, 1, 0.0, 0.0
|
centerPanel.add(portLabel, new GridBagConstraints(0, 6, 1, 1, 0.0, 0.0
|
||||||
,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0, 12, 5, 5), 0, 0));
|
,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0, 12, 5, 5), 0, 0));
|
||||||
centerPanel.add(dbPortField, new GridBagConstraints(1, 7, 1, 1, 0.0, 0.0
|
centerPanel.add(dbPortField, new GridBagConstraints(1, 6, 1, 1, 0.0, 0.0
|
||||||
,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 5, 0), 0, 0));
|
,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 5, 0), 0, 0));
|
||||||
centerPanel.add(sidLabel, new GridBagConstraints(0, 8, 1, 1, 0.0, 0.0
|
centerPanel.add(sidLabel, new GridBagConstraints(0, 7, 1, 1, 0.0, 0.0
|
||||||
,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0, 12, 5, 5), 0, 0));
|
,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0, 12, 5, 5), 0, 0));
|
||||||
centerPanel.add(sidField, new GridBagConstraints(1, 8, 2, 1, 0.0, 0.0
|
centerPanel.add(sidField, new GridBagConstraints(1, 7, 2, 1, 0.0, 0.0
|
||||||
,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 5, 12), 0, 0));
|
,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 5, 12), 0, 0));
|
||||||
centerPanel.add(dbUidLabel, new GridBagConstraints(0, 9, 1, 1, 0.0, 0.0
|
centerPanel.add(dbUidLabel, new GridBagConstraints(0, 8, 1, 1, 0.0, 0.0
|
||||||
,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0, 12, 5, 5), 0, 0));
|
,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0, 12, 5, 5), 0, 0));
|
||||||
centerPanel.add(dbUidField, new GridBagConstraints(1, 9, 1, 1, 0.0, 0.0
|
centerPanel.add(dbUidField, new GridBagConstraints(1, 8, 1, 1, 0.0, 0.0
|
||||||
,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 5, 0), 0, 0));
|
,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 5, 0), 0, 0));
|
||||||
centerPanel.add(dbPwdField, new GridBagConstraints(2, 9, 1, 1, 1.0, 0.0
|
centerPanel.add(dbPwdField, new GridBagConstraints(2, 8, 1, 1, 1.0, 0.0
|
||||||
,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 5, 5, 12), 0, 0));
|
,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 5, 5, 12), 0, 0));
|
||||||
centerPanel.add(cbFirewall, new GridBagConstraints(1, 10, 2, 1, 0.0, 0.0
|
centerPanel.add(cbFirewall, new GridBagConstraints(1, 9, 2, 1, 0.0, 0.0
|
||||||
,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 0, 0, 12), 0, 0));
|
,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 0, 0, 12), 0, 0));
|
||||||
centerPanel.add(fwHostLabel, new GridBagConstraints(0, 11, 1, 1, 0.0, 0.0
|
centerPanel.add(fwHostLabel, new GridBagConstraints(0, 10, 1, 1, 0.0, 0.0
|
||||||
,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0, 12, 5, 5), 0, 0));
|
,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0, 12, 5, 5), 0, 0));
|
||||||
centerPanel.add(fwHostField, new GridBagConstraints(1, 11, 2, 1, 0.0, 0.0
|
centerPanel.add(fwHostField, new GridBagConstraints(1, 10, 2, 1, 0.0, 0.0
|
||||||
,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 5, 12), 0, 0));
|
,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 5, 12), 0, 0));
|
||||||
centerPanel.add(fwPortLabel, new GridBagConstraints(0, 12, 1, 1, 0.0, 0.0
|
centerPanel.add(fwPortLabel, new GridBagConstraints(0, 11, 1, 1, 0.0, 0.0
|
||||||
,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0, 12, 5, 5), 0, 0));
|
,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0, 12, 5, 5), 0, 0));
|
||||||
centerPanel.add(fwPortField, new GridBagConstraints(1, 12, 1, 1, 0.0, 0.0
|
centerPanel.add(fwPortField, new GridBagConstraints(1, 11, 1, 1, 0.0, 0.0
|
||||||
,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 5, 0), 0, 0));
|
,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 5, 0), 0, 0));
|
||||||
centerPanel.add(bTestDB, new GridBagConstraints(1, 13, 1, 1, 0.0, 0.0
|
centerPanel.add(bTestDB, new GridBagConstraints(1, 12, 1, 1, 0.0, 0.0
|
||||||
,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 0, 12, 0), 0, 0));
|
,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 0, 12, 0), 0, 0));
|
||||||
//
|
//
|
||||||
nameField.addActionListener(this);
|
nameField.addActionListener(this);
|
||||||
|
@ -260,8 +252,6 @@ public class CConnectionDialog extends CDialog implements ActionListener
|
||||||
appsPortLabel.setVisible(false);
|
appsPortLabel.setVisible(false);
|
||||||
appsPortField.setVisible(false);
|
appsPortField.setVisible(false);
|
||||||
bTestApps.setVisible(false);
|
bTestApps.setVisible(false);
|
||||||
connectionProfileLabel.setVisible(false);
|
|
||||||
connectionProfileField.setVisible(false);
|
|
||||||
}
|
}
|
||||||
else // Client
|
else // Client
|
||||||
cbBequeath.setVisible(false);
|
cbBequeath.setVisible(false);
|
||||||
|
@ -342,16 +332,6 @@ public class CConnectionDialog extends CDialog implements ActionListener
|
||||||
dispose();
|
dispose();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (src == connectionProfileField)
|
|
||||||
{
|
|
||||||
ValueNamePair pp = (ValueNamePair)connectionProfileField.getSelectedItem();
|
|
||||||
m_cc.setConnectionProfile(pp.getValue());
|
|
||||||
if (m_cc.isRMIoverHTTP())
|
|
||||||
appsPortField.setText(APPS_PORT_HTTP);
|
|
||||||
else
|
|
||||||
appsPortField.setText(APPS_PORT_JNP);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else if (src == dbTypeField)
|
else if (src == dbTypeField)
|
||||||
{
|
{
|
||||||
if (dbTypeField.getSelectedItem() == null)
|
if (dbTypeField.getSelectedItem() == null)
|
||||||
|
@ -395,9 +375,6 @@ public class CConnectionDialog extends CDialog implements ActionListener
|
||||||
else
|
else
|
||||||
m_cc.setAppsHost("localhost");
|
m_cc.setAppsHost("localhost");
|
||||||
//
|
//
|
||||||
ValueNamePair pp = (ValueNamePair)connectionProfileField.getSelectedItem();
|
|
||||||
m_cc.setConnectionProfile(pp.getValue());
|
|
||||||
//
|
|
||||||
m_cc.setType((String)dbTypeField.getSelectedItem());
|
m_cc.setType((String)dbTypeField.getSelectedItem());
|
||||||
m_cc.setDbHost(hostField.getText());
|
m_cc.setDbHost(hostField.getText());
|
||||||
m_cc.setDbPort(dbPortField.getText());
|
m_cc.setDbPort(dbPortField.getText());
|
||||||
|
@ -420,19 +397,6 @@ public class CConnectionDialog extends CDialog implements ActionListener
|
||||||
appsHostField.setText(m_cc.getAppsHost());
|
appsHostField.setText(m_cc.getAppsHost());
|
||||||
appsPortField.setText(String.valueOf(m_cc.getAppsPort()));
|
appsPortField.setText(String.valueOf(m_cc.getAppsPort()));
|
||||||
//
|
//
|
||||||
String cp = m_cc.getConnectionProfile();
|
|
||||||
ValueNamePair cpPP = null;
|
|
||||||
for (int i = 0; i < CConnection.CONNECTIONProfiles.length; i++)
|
|
||||||
{
|
|
||||||
if (cp.equals(CConnection.CONNECTIONProfiles[i].getValue()))
|
|
||||||
{
|
|
||||||
cpPP = CConnection.CONNECTIONProfiles[i];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (cpPP == null) // LAN
|
|
||||||
cpPP = CConnection.CONNECTIONProfiles[0];
|
|
||||||
connectionProfileField.setSelectedItem(cpPP);
|
|
||||||
bTestApps.setIcon(getStatusIcon(m_cc.isAppsServerOK(false)));
|
bTestApps.setIcon(getStatusIcon(m_cc.isAppsServerOK(false)));
|
||||||
// bTestApps.setToolTipText(m_cc.getRmiUri());
|
// bTestApps.setToolTipText(m_cc.getRmiUri());
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,71 @@
|
||||||
|
/******************************************************************************
|
||||||
|
* Copyright (C) 2008 Low Heng Sin *
|
||||||
|
* This program is free software; you can redistribute it and/or modify it *
|
||||||
|
* under the terms version 2 of the GNU General Public License as published *
|
||||||
|
* by the Free Software Foundation. This program is distributed in the hope *
|
||||||
|
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
|
||||||
|
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
|
||||||
|
* See the GNU General Public License for more details. *
|
||||||
|
* You should have received a copy of the GNU General Public License along *
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
|
||||||
|
*****************************************************************************/
|
||||||
|
package org.compiere.db;
|
||||||
|
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
|
import org.adempiere.exceptions.DBException;
|
||||||
|
import org.compiere.util.CStatementVO;
|
||||||
|
import org.compiere.util.DB;
|
||||||
|
import org.compiere.util.Trx;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dynamic proxy for the CCallableStatement
|
||||||
|
* @author Low Heng Sin
|
||||||
|
*/
|
||||||
|
public class CallableStatementProxy extends PreparedStatementProxy {
|
||||||
|
|
||||||
|
public CallableStatementProxy(CStatementVO vo) {
|
||||||
|
super(vo);
|
||||||
|
}
|
||||||
|
|
||||||
|
public CallableStatementProxy(int resultSetType, int resultSetConcurrency,
|
||||||
|
String sql0, String trxName) {
|
||||||
|
super(resultSetType, resultSetConcurrency, sql0, trxName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialise the prepared statement wrapper object
|
||||||
|
*/
|
||||||
|
protected void init()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Connection conn = null;
|
||||||
|
Trx trx = p_vo.getTrxName() == null ? null : Trx.get(p_vo.getTrxName(), true);
|
||||||
|
if (trx != null)
|
||||||
|
{
|
||||||
|
conn = trx.getConnection();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (p_vo.getResultSetConcurrency() == ResultSet.CONCUR_UPDATABLE)
|
||||||
|
m_conn = DB.getConnectionRW ();
|
||||||
|
else
|
||||||
|
m_conn = DB.getConnectionRO();
|
||||||
|
conn = m_conn;
|
||||||
|
}
|
||||||
|
if (conn == null)
|
||||||
|
throw new DBException("No Connection");
|
||||||
|
p_stmt = conn.prepareCall(p_vo.getSql(), p_vo.getResultSetType(), p_vo.getResultSetConcurrency());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
log.log(Level.SEVERE, p_vo.getSql(), e);
|
||||||
|
throw new DBException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,104 @@
|
||||||
|
/******************************************************************************
|
||||||
|
* Copyright (C) 2008 Low Heng Sin *
|
||||||
|
* This program is free software; you can redistribute it and/or modify it *
|
||||||
|
* under the terms version 2 of the GNU General Public License as published *
|
||||||
|
* by the Free Software Foundation. This program is distributed in the hope *
|
||||||
|
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
|
||||||
|
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
|
||||||
|
* See the GNU General Public License for more details. *
|
||||||
|
* You should have received a copy of the GNU General Public License along *
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
|
||||||
|
*****************************************************************************/
|
||||||
|
package org.compiere.db;
|
||||||
|
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
|
import javax.sql.RowSet;
|
||||||
|
|
||||||
|
import org.adempiere.exceptions.DBException;
|
||||||
|
import org.compiere.util.CCachedRowSet;
|
||||||
|
import org.compiere.util.CStatementVO;
|
||||||
|
import org.compiere.util.DB;
|
||||||
|
import org.compiere.util.Trx;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dynamic proxy for the CPreparedStatement interface
|
||||||
|
* @author Low Heng Sin
|
||||||
|
*/
|
||||||
|
public class PreparedStatementProxy extends StatementProxy {
|
||||||
|
|
||||||
|
public PreparedStatementProxy(int resultSetType, int resultSetConcurrency,
|
||||||
|
String sql0, String trxName) {
|
||||||
|
if (sql0 == null || sql0.length() == 0)
|
||||||
|
throw new IllegalArgumentException("sql required");
|
||||||
|
|
||||||
|
p_vo = new CStatementVO(resultSetType, resultSetConcurrency, DB
|
||||||
|
.getDatabase().convertStatement(sql0));
|
||||||
|
|
||||||
|
p_vo.setTrxName(trxName);
|
||||||
|
|
||||||
|
init();
|
||||||
|
} // PreparedStatementProxy
|
||||||
|
|
||||||
|
public PreparedStatementProxy(CStatementVO vo)
|
||||||
|
{
|
||||||
|
super(vo);
|
||||||
|
} // PreparedStatementProxy
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialise the prepared statement wrapper object
|
||||||
|
*/
|
||||||
|
protected void init() {
|
||||||
|
try {
|
||||||
|
Connection conn = null;
|
||||||
|
Trx trx = p_vo.getTrxName() == null ? null : Trx.get(p_vo
|
||||||
|
.getTrxName(), true);
|
||||||
|
if (trx != null) {
|
||||||
|
conn = trx.getConnection();
|
||||||
|
} else {
|
||||||
|
if (p_vo.getResultSetConcurrency() == ResultSet.CONCUR_UPDATABLE)
|
||||||
|
m_conn = DB.getConnectionRW();
|
||||||
|
else
|
||||||
|
m_conn = DB.getConnectionRO();
|
||||||
|
conn = m_conn;
|
||||||
|
}
|
||||||
|
if (conn == null)
|
||||||
|
throw new DBException("No Connection");
|
||||||
|
p_stmt = conn.prepareStatement(p_vo.getSql(), p_vo
|
||||||
|
.getResultSetType(), p_vo.getResultSetConcurrency());
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.log(Level.SEVERE, p_vo.getSql(), e);
|
||||||
|
throw new DBException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected RowSet getRowSet()
|
||||||
|
{
|
||||||
|
log.finest("local_getRowSet");
|
||||||
|
|
||||||
|
RowSet rowSet = null;
|
||||||
|
ResultSet rs = null;
|
||||||
|
PreparedStatement pstmt = (PreparedStatement)p_stmt;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
rs = pstmt.executeQuery();
|
||||||
|
rowSet = CCachedRowSet.getRowSet(rs);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
log.log(Level.SEVERE, p_vo.toString(), ex);
|
||||||
|
throw new RuntimeException (ex);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
DB.close(rs);
|
||||||
|
}
|
||||||
|
return rowSet;
|
||||||
|
} // local_getRowSet
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,106 @@
|
||||||
|
/******************************************************************************
|
||||||
|
* Copyright (C) 2008 Low Heng Sin *
|
||||||
|
* This program is free software; you can redistribute it and/or modify it *
|
||||||
|
* under the terms version 2 of the GNU General Public License as published *
|
||||||
|
* by the Free Software Foundation. This program is distributed in the hope *
|
||||||
|
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
|
||||||
|
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
|
||||||
|
* See the GNU General Public License for more details. *
|
||||||
|
* You should have received a copy of the GNU General Public License along *
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
|
||||||
|
*****************************************************************************/
|
||||||
|
package org.compiere.db;
|
||||||
|
|
||||||
|
import java.lang.reflect.Proxy;
|
||||||
|
|
||||||
|
import org.compiere.util.CCallableStatement;
|
||||||
|
import org.compiere.util.CPreparedStatement;
|
||||||
|
import org.compiere.util.CStatement;
|
||||||
|
import org.compiere.util.CStatementVO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Factory class to instantiate dynamic proxy for CStatement, CPreparedStatement and CCallableStatement
|
||||||
|
* @author Low Heng Sin
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class ProxyFactory {
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param resultSetType
|
||||||
|
* @param resultSetConcurrency
|
||||||
|
* @param trxName
|
||||||
|
* @return CStatement proxy
|
||||||
|
*/
|
||||||
|
public static CStatement newCStatement(int resultSetType,
|
||||||
|
int resultSetConcurrency, String trxName) {
|
||||||
|
return (CStatement)Proxy.newProxyInstance(CStatement.class.getClassLoader(),
|
||||||
|
new Class[]{CStatement.class},
|
||||||
|
new StatementProxy(resultSetType, resultSetConcurrency, trxName));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param resultSetType
|
||||||
|
* @param resultSetConcurrency
|
||||||
|
* @param sql
|
||||||
|
* @param trxName
|
||||||
|
* @return CPreparedStatement proxy
|
||||||
|
*/
|
||||||
|
public static CPreparedStatement newCPreparedStatement(int resultSetType,
|
||||||
|
int resultSetConcurrency, String sql, String trxName) {
|
||||||
|
return (CPreparedStatement)Proxy.newProxyInstance(CPreparedStatement.class.getClassLoader(),
|
||||||
|
new Class[]{CPreparedStatement.class},
|
||||||
|
new PreparedStatementProxy(resultSetType, resultSetConcurrency, sql, trxName));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param resultSetType
|
||||||
|
* @param resultSetConcurrency
|
||||||
|
* @param sql
|
||||||
|
* @param trxName
|
||||||
|
* @return CCallableStatement proxy
|
||||||
|
*/
|
||||||
|
public static CCallableStatement newCCallableStatement(int resultSetType,
|
||||||
|
int resultSetConcurrency, String sql, String trxName) {
|
||||||
|
return (CCallableStatement)Proxy.newProxyInstance(CCallableStatement.class.getClassLoader(),
|
||||||
|
new Class[]{CCallableStatement.class},
|
||||||
|
new CallableStatementProxy(resultSetType, resultSetConcurrency, sql, trxName));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param info
|
||||||
|
* @return CStatement proxy
|
||||||
|
*/
|
||||||
|
public static CStatement newCStatement(CStatementVO info) {
|
||||||
|
return (CStatement)Proxy.newProxyInstance(CStatement.class.getClassLoader(),
|
||||||
|
new Class[]{CStatement.class},
|
||||||
|
new StatementProxy(info));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param info
|
||||||
|
* @return CPreparedStatement proxy
|
||||||
|
*/
|
||||||
|
public static CPreparedStatement newCPreparedStatement(CStatementVO info) {
|
||||||
|
return (CPreparedStatement)Proxy.newProxyInstance(CPreparedStatement.class.getClassLoader(),
|
||||||
|
new Class[]{CPreparedStatement.class},
|
||||||
|
new PreparedStatementProxy(info));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param info
|
||||||
|
* @return CCallableStatement proxy
|
||||||
|
*/
|
||||||
|
public static CCallableStatement newCCallableStatement(CStatementVO info) {
|
||||||
|
return (CCallableStatement)Proxy.newProxyInstance(CCallableStatement.class.getClassLoader(),
|
||||||
|
new Class[]{CCallableStatement.class},
|
||||||
|
new CallableStatementProxy(info));
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,311 +0,0 @@
|
||||||
/**
|
|
||||||
* Product: Posterita Web-Based POS, Webstore and Adempiere Plugin
|
|
||||||
* Copyright (C) 2007 Posterita Ltd
|
|
||||||
* This file is part of POSterita
|
|
||||||
*
|
|
||||||
* POSterita is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along
|
|
||||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.compiere.db;
|
|
||||||
|
|
||||||
import java.sql.CallableStatement;
|
|
||||||
import java.sql.Connection;
|
|
||||||
import java.sql.DatabaseMetaData;
|
|
||||||
import java.sql.PreparedStatement;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.sql.SQLWarning;
|
|
||||||
import java.sql.Savepoint;
|
|
||||||
import java.sql.Statement;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import org.compiere.util.DB;
|
|
||||||
import org.compiere.util.Trx;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Connection that is used to execute query on Server for Client processes
|
|
||||||
* Need for Jasper Report processes as the Jasper Manager uses a connection
|
|
||||||
*
|
|
||||||
* @author Ashley G Ramdass
|
|
||||||
*/
|
|
||||||
public class ServerConnection implements Connection
|
|
||||||
{
|
|
||||||
|
|
||||||
private String trxName = null;
|
|
||||||
|
|
||||||
public ServerConnection() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public ServerConnection(String trxName) {
|
|
||||||
this.trxName = trxName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void clearWarnings() throws SQLException
|
|
||||||
{
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method clearWarnings() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void close() throws SQLException
|
|
||||||
{
|
|
||||||
if (trxName != null) {
|
|
||||||
Trx trx = Trx.get(trxName, false);
|
|
||||||
if (trx != null)
|
|
||||||
trx.close();
|
|
||||||
trxName = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void commit() throws SQLException
|
|
||||||
{
|
|
||||||
if (trxName != null) {
|
|
||||||
Trx trx = Trx.get(trxName, false);
|
|
||||||
if (trx != null)
|
|
||||||
trx.commit(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Statement createStatement() throws SQLException
|
|
||||||
{
|
|
||||||
return DB.createStatement();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException
|
|
||||||
{
|
|
||||||
return DB.createStatement(resultSetType, resultSetConcurrency, trxName);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Statement createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException
|
|
||||||
{
|
|
||||||
return createStatement(resultSetType, resultSetConcurrency);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean getAutoCommit() throws SQLException
|
|
||||||
{
|
|
||||||
return (trxName != null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getCatalog() throws SQLException
|
|
||||||
{
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method getCatalog() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getHoldability() throws SQLException
|
|
||||||
{
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method getHoldability() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public DatabaseMetaData getMetaData() throws SQLException
|
|
||||||
{
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method getMetaData() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getTransactionIsolation() throws SQLException
|
|
||||||
{
|
|
||||||
return Connection.TRANSACTION_READ_COMMITTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Map<String, Class<?>> getTypeMap() throws SQLException
|
|
||||||
{
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method getTypeMap() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public SQLWarning getWarnings() throws SQLException
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isClosed() throws SQLException
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isReadOnly() throws SQLException
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String nativeSQL(String sql) throws SQLException
|
|
||||||
{
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method nativeSQL() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public CallableStatement prepareCall(String sql) throws SQLException
|
|
||||||
{
|
|
||||||
return DB.prepareCall(sql);
|
|
||||||
}
|
|
||||||
|
|
||||||
public CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency) throws SQLException
|
|
||||||
{
|
|
||||||
return DB.prepareCall(sql, resultSetConcurrency, trxName);
|
|
||||||
}
|
|
||||||
|
|
||||||
public CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException
|
|
||||||
{
|
|
||||||
return DB.prepareCall(sql, resultSetConcurrency, trxName);
|
|
||||||
}
|
|
||||||
|
|
||||||
public PreparedStatement prepareStatement(String sql) throws SQLException
|
|
||||||
{
|
|
||||||
return DB.prepareStatement(sql);
|
|
||||||
}
|
|
||||||
|
|
||||||
public PreparedStatement prepareStatement(String sql, int autoGeneratedKeys) throws SQLException
|
|
||||||
{
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method prepareStatement() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public PreparedStatement prepareStatement(String sql, int[] columnIndexes) throws SQLException
|
|
||||||
{
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method prepareStatement() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public PreparedStatement prepareStatement(String sql, String[] columnNames) throws SQLException
|
|
||||||
{
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method prepareStatement() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency) throws SQLException
|
|
||||||
{
|
|
||||||
return DB.prepareStatement(sql, resultSetConcurrency, resultSetConcurrency);
|
|
||||||
}
|
|
||||||
|
|
||||||
public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException
|
|
||||||
{
|
|
||||||
return prepareStatement(sql, resultSetType, resultSetConcurrency);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void releaseSavepoint(Savepoint savepoint) throws SQLException
|
|
||||||
{
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method releaseSavepoint() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void rollback() throws SQLException
|
|
||||||
{
|
|
||||||
if (trxName != null) {
|
|
||||||
Trx trx = Trx.get(trxName, false);
|
|
||||||
if (trx != null)
|
|
||||||
trx.rollback(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void rollback(Savepoint savepoint) throws SQLException
|
|
||||||
{
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method rollback() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setAutoCommit(boolean autoCommit) throws SQLException
|
|
||||||
{
|
|
||||||
if (autoCommit) {
|
|
||||||
if (trxName != null) {
|
|
||||||
Trx trx = Trx.get(trxName, false);
|
|
||||||
if (trx != null)
|
|
||||||
trx.close();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (trxName == null) {
|
|
||||||
trxName = Trx.createTrxName();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setCatalog(String catalog) throws SQLException
|
|
||||||
{
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method setCatalog() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setHoldability(int holdability) throws SQLException
|
|
||||||
{
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method setHoldability() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setReadOnly(boolean readOnly) throws SQLException
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public Savepoint setSavepoint() throws SQLException
|
|
||||||
{
|
|
||||||
return setSavepoint(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Savepoint setSavepoint(String name) throws SQLException
|
|
||||||
{
|
|
||||||
if (trxName == null) {
|
|
||||||
trxName = Trx.createTrxName();
|
|
||||||
}
|
|
||||||
Trx trx = Trx.get(trxName, false);
|
|
||||||
return trx.setSavepoint(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTransactionIsolation(int level) throws SQLException
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTypeMap(Map<String, Class<?>> arg0) throws SQLException
|
|
||||||
{
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method setTypeMap() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Java 6 support - teo_sarca BF [ 1806700 ] */
|
|
||||||
public java.sql.Array createArrayOf(String typeName, Object[] elements) throws SQLException {
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public java.sql.Blob createBlob() throws SQLException {
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public java.sql.Clob createClob() throws SQLException {
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public java.sql.NClob createNClob() throws SQLException {
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public java.sql.SQLXML createSQLXML() throws SQLException {
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public java.sql.Struct createStruct(String typeName, Object[] attributes) throws SQLException {
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public java.util.Properties getClientInfo() throws SQLException {
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getClientInfo(String name) throws SQLException {
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isValid(int timeout) throws SQLException {
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setClientInfo(java.util.Properties properties) throws java.sql.SQLClientInfoException {
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setClientInfo(String name, String value) throws java.sql.SQLClientInfoException {
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isWrapperFor(Class<?> iface) throws SQLException {
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public <T> T unwrap(Class<T> iface) throws SQLException {
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method not yet implemented.");
|
|
||||||
}
|
|
||||||
/* Java 6 support - teo_sarca BF [ 1806700 ] */
|
|
||||||
}
|
|
|
@ -0,0 +1,198 @@
|
||||||
|
/******************************************************************************
|
||||||
|
* Copyright (C) 2008 Low Heng Sin *
|
||||||
|
* This program is free software; you can redistribute it and/or modify it *
|
||||||
|
* under the terms version 2 of the GNU General Public License as published *
|
||||||
|
* by the Free Software Foundation. This program is distributed in the hope *
|
||||||
|
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
|
||||||
|
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
|
||||||
|
* See the GNU General Public License for more details. *
|
||||||
|
* You should have received a copy of the GNU General Public License along *
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
|
||||||
|
*****************************************************************************/
|
||||||
|
package org.compiere.db;
|
||||||
|
|
||||||
|
import java.lang.reflect.InvocationHandler;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.sql.Statement;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
|
import javax.sql.RowSet;
|
||||||
|
|
||||||
|
import org.adempiere.exceptions.DBException;
|
||||||
|
import org.compiere.util.CCachedRowSet;
|
||||||
|
import org.compiere.util.CLogger;
|
||||||
|
import org.compiere.util.CStatementVO;
|
||||||
|
import org.compiere.util.DB;
|
||||||
|
import org.compiere.util.Trx;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Dynamic proxy for the CStatement interface
|
||||||
|
* @author Low Heng Sin
|
||||||
|
*/
|
||||||
|
public class StatementProxy implements InvocationHandler {
|
||||||
|
|
||||||
|
protected Connection m_conn = null;
|
||||||
|
|
||||||
|
private boolean close = false;
|
||||||
|
|
||||||
|
/** Logger */
|
||||||
|
protected transient CLogger log = CLogger.getCLogger (getClass());
|
||||||
|
/** Used if local */
|
||||||
|
protected transient Statement p_stmt = null;
|
||||||
|
/** Value Object */
|
||||||
|
protected CStatementVO p_vo = null;
|
||||||
|
|
||||||
|
public StatementProxy(int resultSetType, int resultSetConcurrency, String trxName) {
|
||||||
|
p_vo = new CStatementVO (resultSetType, resultSetConcurrency);
|
||||||
|
p_vo.setTrxName(trxName);
|
||||||
|
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
|
||||||
|
public StatementProxy(CStatementVO vo) {
|
||||||
|
p_vo = vo;
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
|
||||||
|
//for subclass
|
||||||
|
protected StatementProxy() {}
|
||||||
|
|
||||||
|
public Object invoke(Object obj, Method method, Object[] args)
|
||||||
|
throws Throwable {
|
||||||
|
String name = method.getName();
|
||||||
|
//handle special case
|
||||||
|
if (name.equals("executeQuery") || name.equals("executeUpdate")
|
||||||
|
|| name.equals("execute") || name.equals("addBatch")) {
|
||||||
|
if (args != null && args.length > 0 && args[0] != null && args[0] instanceof String) {
|
||||||
|
String sql = (String)args[0];
|
||||||
|
p_vo.setSql(DB.getDatabase().convertStatement(sql));
|
||||||
|
args[0] = p_vo.getSql();
|
||||||
|
}
|
||||||
|
} else if (name.equals("close") && (args == null || args.length == 0)) {
|
||||||
|
close();
|
||||||
|
return null;
|
||||||
|
} else if (name.equals("getRowSet") && (args == null || args.length == 0)) {
|
||||||
|
return getRowSet();
|
||||||
|
} else if (name.equals("isClosed") && (args == null || args.length == 0)) {
|
||||||
|
return close;
|
||||||
|
} else if (name.equals("finalize") && (args == null || args.length == 0)) {
|
||||||
|
if (p_stmt != null && !close)
|
||||||
|
{
|
||||||
|
this.close();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
} else if (name.equals("commit") && (args == null || args.length == 0)) {
|
||||||
|
commit();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
Method m = p_stmt.getClass().getMethod(name, method.getParameterTypes());
|
||||||
|
return m.invoke(p_stmt, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialise the statement wrapper object
|
||||||
|
*/
|
||||||
|
protected void init()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Connection conn = null;
|
||||||
|
Trx trx = p_vo.getTrxName() == null ? null : Trx.get(p_vo.getTrxName(), true);
|
||||||
|
if (trx != null)
|
||||||
|
{
|
||||||
|
conn = trx.getConnection();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (p_vo.getResultSetConcurrency() == ResultSet.CONCUR_UPDATABLE)
|
||||||
|
m_conn = DB.getConnectionRW ();
|
||||||
|
else
|
||||||
|
m_conn = DB.getConnectionRO();
|
||||||
|
conn = m_conn;
|
||||||
|
}
|
||||||
|
if (conn == null)
|
||||||
|
throw new DBException("No Connection");
|
||||||
|
p_stmt = conn.createStatement(p_vo.getResultSetType(), p_vo.getResultSetConcurrency());
|
||||||
|
}
|
||||||
|
catch (SQLException e)
|
||||||
|
{
|
||||||
|
log.log(Level.SEVERE, "CStatement", e);
|
||||||
|
throw new DBException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Close
|
||||||
|
* @throws SQLException
|
||||||
|
* @see java.sql.Statement#close()
|
||||||
|
*/
|
||||||
|
private void close () throws SQLException
|
||||||
|
{
|
||||||
|
if (close) return;
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (p_stmt != null)
|
||||||
|
{
|
||||||
|
p_stmt.close();
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
if (m_conn != null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
m_conn.close();
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{}
|
||||||
|
}
|
||||||
|
m_conn = null;
|
||||||
|
close = true;
|
||||||
|
}
|
||||||
|
} // close
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute Query
|
||||||
|
* @return ResultSet or RowSet
|
||||||
|
* @throws SQLException
|
||||||
|
* @see java.sql.PreparedStatement#executeQuery()
|
||||||
|
*/
|
||||||
|
protected RowSet getRowSet()
|
||||||
|
{
|
||||||
|
log.finest("getRowSet");
|
||||||
|
RowSet rowSet = null;
|
||||||
|
ResultSet rs = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
rs = p_stmt.executeQuery(p_vo.getSql());
|
||||||
|
rowSet = CCachedRowSet.getRowSet(rs);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
log.log(Level.SEVERE, p_vo.toString(), ex);
|
||||||
|
throw new RuntimeException (ex);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
DB.close(rs);
|
||||||
|
}
|
||||||
|
return rowSet;
|
||||||
|
} // local_getRowSet
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Commit (if local)
|
||||||
|
* @throws SQLException
|
||||||
|
*/
|
||||||
|
private void commit() throws SQLException
|
||||||
|
{
|
||||||
|
if (m_conn != null && !m_conn.getAutoCommit())
|
||||||
|
{
|
||||||
|
m_conn.commit();
|
||||||
|
}
|
||||||
|
} // commit
|
||||||
|
}
|
|
@ -9,16 +9,6 @@ package org.compiere.interfaces;
|
||||||
public interface Server
|
public interface Server
|
||||||
extends javax.ejb.EJBObject
|
extends javax.ejb.EJBObject
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* Get and create Window Model Value Object
|
|
||||||
* @param ctx Environment Properties
|
|
||||||
* @param WindowNo number of this window
|
|
||||||
* @param AD_Window_ID the internal number of the window, if not 0, AD_Menu_ID is ignored
|
|
||||||
* @param AD_Menu_ID ine internal menu number, used when AD_Window_ID is 0
|
|
||||||
* @return initialized Window Model */
|
|
||||||
public org.compiere.model.GridWindowVO getWindowVO( java.util.Properties ctx,int WindowNo,int AD_Window_ID,int AD_Menu_ID )
|
|
||||||
throws java.rmi.RemoteException;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Post Immediate
|
* Post Immediate
|
||||||
* @param ctx Client Context
|
* @param ctx Client Context
|
||||||
|
@ -31,82 +21,6 @@ public interface Server
|
||||||
public java.lang.String postImmediate( java.util.Properties ctx,int AD_Client_ID,int AD_Table_ID,int Record_ID,boolean force,java.lang.String trxName )
|
public java.lang.String postImmediate( java.util.Properties ctx,int AD_Client_ID,int AD_Table_ID,int Record_ID,boolean force,java.lang.String trxName )
|
||||||
throws java.rmi.RemoteException;
|
throws java.rmi.RemoteException;
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Prepared Statement ResultSet
|
|
||||||
* @param info Result info
|
|
||||||
* @param token Security Token
|
|
||||||
* @return RowSet
|
|
||||||
* @throws NotSerializableException */
|
|
||||||
public javax.sql.RowSet pstmt_getRowSet( org.compiere.util.CStatementVO info,org.compiere.util.SecurityToken token )
|
|
||||||
throws java.io.NotSerializableException, java.rmi.RemoteException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Statement ResultSet
|
|
||||||
* @param info Result info
|
|
||||||
* @param token Security Token
|
|
||||||
* @return RowSet */
|
|
||||||
public javax.sql.RowSet stmt_getRowSet( org.compiere.util.CStatementVO info,org.compiere.util.SecurityToken token )
|
|
||||||
throws java.rmi.RemoteException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Execute Update
|
|
||||||
* @param info Result info
|
|
||||||
* @param token Security Token
|
|
||||||
* @return row count */
|
|
||||||
public int stmt_executeUpdate( org.compiere.util.CStatementVO info,org.compiere.util.SecurityToken token )
|
|
||||||
throws java.rmi.RemoteException;
|
|
||||||
|
|
||||||
public org.compiere.util.ExecuteResult stmt_execute( org.compiere.util.CStatementVO info,org.compiere.util.SecurityToken token )
|
|
||||||
throws java.rmi.RemoteException;
|
|
||||||
|
|
||||||
public org.compiere.util.CallableResult callable_execute( org.compiere.util.CStatementVO info,org.compiere.util.SecurityToken token )
|
|
||||||
throws java.rmi.RemoteException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get next number for Key column = 0 is Error.
|
|
||||||
* @param AD_Client_ID client
|
|
||||||
* @param TableName table name
|
|
||||||
* @param trxName optional Transaction Name
|
|
||||||
* @return next no */
|
|
||||||
public int getNextID( int AD_Client_ID,java.lang.String TableName,java.lang.String trxName )
|
|
||||||
throws java.rmi.RemoteException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Document No from table
|
|
||||||
* @param AD_Client_ID client
|
|
||||||
* @param TableName table name
|
|
||||||
* @param trxName optional Transaction Name
|
|
||||||
* @return document no or null */
|
|
||||||
public java.lang.String getDocumentNo( int AD_Client_ID,java.lang.String TableName,java.lang.String trxName )
|
|
||||||
throws java.rmi.RemoteException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Document No from table
|
|
||||||
* @param AD_Client_ID client
|
|
||||||
* @param TableName table name
|
|
||||||
* @param trxName optional Transaction Name
|
|
||||||
* @param po
|
|
||||||
* @return document no or null */
|
|
||||||
public java.lang.String getDocumentNo( int AD_Client_ID,java.lang.String TableName,java.lang.String trxName,org.compiere.model.PO po )
|
|
||||||
throws java.rmi.RemoteException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Document No based on Document Type
|
|
||||||
* @param C_DocType_ID document type
|
|
||||||
* @param trxName optional Transaction Name
|
|
||||||
* @return document no or null */
|
|
||||||
public java.lang.String getDocumentNo( int C_DocType_ID,java.lang.String trxName,boolean definite )
|
|
||||||
throws java.rmi.RemoteException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Document No based on Document Type
|
|
||||||
* @param C_DocType_ID document type
|
|
||||||
* @param trxName optional Transaction Name
|
|
||||||
* @param po
|
|
||||||
* @return document no or null */
|
|
||||||
public java.lang.String getDocumentNo( int C_DocType_ID,java.lang.String trxName,boolean definite,org.compiere.model.PO po )
|
|
||||||
throws java.rmi.RemoteException;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Process Remote
|
* Process Remote
|
||||||
* @param ctx Context
|
* @param ctx Context
|
||||||
|
@ -124,16 +38,6 @@ public interface Server
|
||||||
public org.compiere.process.ProcessInfo workflow( java.util.Properties ctx,org.compiere.process.ProcessInfo pi,int AD_Workflow_ID )
|
public org.compiere.process.ProcessInfo workflow( java.util.Properties ctx,org.compiere.process.ProcessInfo pi,int AD_Workflow_ID )
|
||||||
throws java.rmi.RemoteException;
|
throws java.rmi.RemoteException;
|
||||||
|
|
||||||
/**
|
|
||||||
* Online Payment from Server
|
|
||||||
* @param ctx Context
|
|
||||||
* @param C_Payment_ID payment
|
|
||||||
* @param C_PaymentProcessor_ID processor
|
|
||||||
* @param trxName transaction
|
|
||||||
* @return true if approved */
|
|
||||||
public boolean paymentOnline( java.util.Properties ctx,int C_Payment_ID,int C_PaymentProcessor_ID,java.lang.String trxName )
|
|
||||||
throws java.rmi.RemoteException;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create EMail from Server (Request User)
|
* Create EMail from Server (Request User)
|
||||||
* @param ctx Context
|
* @param ctx Context
|
||||||
|
@ -158,7 +62,7 @@ public interface Server
|
||||||
throws java.rmi.RemoteException;
|
throws java.rmi.RemoteException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create EMail from Server (Request User)
|
* Execute task on server
|
||||||
* @param AD_Task_ID task
|
* @param AD_Task_ID task
|
||||||
* @return execution trace */
|
* @return execution trace */
|
||||||
public java.lang.String executeTask( int AD_Task_ID )
|
public java.lang.String executeTask( int AD_Task_ID )
|
||||||
|
@ -172,85 +76,18 @@ public interface Server
|
||||||
public int cacheReset( java.lang.String tableName,int Record_ID )
|
public int cacheReset( java.lang.String tableName,int Record_ID )
|
||||||
throws java.rmi.RemoteException;
|
throws java.rmi.RemoteException;
|
||||||
|
|
||||||
/**
|
|
||||||
* LOB update
|
|
||||||
* @param sql table name
|
|
||||||
* @param displayType display type (i.e. BLOB/CLOB)
|
|
||||||
* @param value the data
|
|
||||||
* @param trxName
|
|
||||||
* @param token Security Token
|
|
||||||
* @return true if updated */
|
|
||||||
public boolean updateLOB( java.lang.String sql,int displayType,java.lang.Object value,java.lang.String trxName,org.compiere.util.SecurityToken token )
|
|
||||||
throws java.rmi.RemoteException;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Describes the instance and its content for debugging purpose
|
* Describes the instance and its content for debugging purpose
|
||||||
* @return Debugging information about the instance and its content */
|
* @return Debugging information about the instance and its content */
|
||||||
public java.lang.String getStatus( )
|
public java.lang.String getStatus( )
|
||||||
throws java.rmi.RemoteException;
|
throws java.rmi.RemoteException;
|
||||||
|
|
||||||
/**
|
|
||||||
* Set savepoint
|
|
||||||
* @param trxName
|
|
||||||
* @param savePointName
|
|
||||||
* @return true if success, false otherwise */
|
|
||||||
public org.compiere.util.SavepointVO setSavepoint( java.lang.String trxName,java.lang.String savePointName )
|
|
||||||
throws java.rmi.RemoteException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Start remote transaction
|
|
||||||
* @param trxName */
|
|
||||||
public void startTransaction( java.lang.String trxName )
|
|
||||||
throws java.rmi.RemoteException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Close remote transaction
|
|
||||||
* @param trxName */
|
|
||||||
public void closeTransaction( java.lang.String trxName )
|
|
||||||
throws java.rmi.RemoteException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Commit the named transaction on server
|
|
||||||
* @param trxName
|
|
||||||
* @return true if success, false otherwise */
|
|
||||||
public boolean commit( java.lang.String trxName )
|
|
||||||
throws java.rmi.RemoteException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Rollback the named transaction on server
|
|
||||||
* @param trxName
|
|
||||||
* @return true if success, false otherwise */
|
|
||||||
public boolean rollback( java.lang.String trxName )
|
|
||||||
throws java.rmi.RemoteException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Rollback the named transaction on server
|
|
||||||
* @param trxName
|
|
||||||
* @return true if success, false otherwise */
|
|
||||||
public boolean rollback( java.lang.String trxName,org.compiere.util.SavepointVO savePoint )
|
|
||||||
throws java.rmi.RemoteException;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Execute db proces on server
|
* Execute db proces on server
|
||||||
* @param processInfo
|
* @param processInfo
|
||||||
* @param procedureName
|
* @param procedureName
|
||||||
* @param trxName
|
|
||||||
* @return ProcessInfo */
|
* @return ProcessInfo */
|
||||||
public org.compiere.process.ProcessInfo dbProcess( org.compiere.process.ProcessInfo processInfo,java.lang.String procedureName,java.lang.String trxName,org.compiere.util.SecurityToken token )
|
public org.compiere.process.ProcessInfo dbProcess( org.compiere.process.ProcessInfo processInfo,java.lang.String procedureName )
|
||||||
throws java.rmi.RemoteException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Load fields meta data from database
|
|
||||||
* @param gridTabVO
|
|
||||||
* @return ArrayList */
|
|
||||||
public java.util.ArrayList getFields( org.compiere.model.GridTabVO gridTabVO )
|
|
||||||
throws java.rmi.RemoteException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get table id from ad_table by table name
|
|
||||||
* @param tableName
|
|
||||||
* @return tableName */
|
|
||||||
public int getTableID( java.lang.String tableName )
|
|
||||||
throws java.rmi.RemoteException;
|
throws java.rmi.RemoteException;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,15 +9,6 @@ package org.compiere.interfaces;
|
||||||
public interface ServerLocal
|
public interface ServerLocal
|
||||||
extends javax.ejb.EJBLocalObject
|
extends javax.ejb.EJBLocalObject
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* Get and create Window Model Value Object
|
|
||||||
* @param ctx Environment Properties
|
|
||||||
* @param WindowNo number of this window
|
|
||||||
* @param AD_Window_ID the internal number of the window, if not 0, AD_Menu_ID is ignored
|
|
||||||
* @param AD_Menu_ID ine internal menu number, used when AD_Window_ID is 0
|
|
||||||
* @return initialized Window Model */
|
|
||||||
public org.compiere.model.GridWindowVO getWindowVO( java.util.Properties ctx,int WindowNo,int AD_Window_ID,int AD_Menu_ID ) ;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Post Immediate
|
* Post Immediate
|
||||||
* @param ctx Client Context
|
* @param ctx Client Context
|
||||||
|
@ -29,72 +20,6 @@ public interface ServerLocal
|
||||||
* @return null, if success or error message */
|
* @return null, if success or error message */
|
||||||
public java.lang.String postImmediate( java.util.Properties ctx,int AD_Client_ID,int AD_Table_ID,int Record_ID,boolean force,java.lang.String trxName ) ;
|
public java.lang.String postImmediate( java.util.Properties ctx,int AD_Client_ID,int AD_Table_ID,int Record_ID,boolean force,java.lang.String trxName ) ;
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Prepared Statement ResultSet
|
|
||||||
* @param info Result info
|
|
||||||
* @param token Security Token
|
|
||||||
* @return RowSet
|
|
||||||
* @throws NotSerializableException */
|
|
||||||
public javax.sql.RowSet pstmt_getRowSet( org.compiere.util.CStatementVO info,org.compiere.util.SecurityToken token ) throws java.io.NotSerializableException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Statement ResultSet
|
|
||||||
* @param info Result info
|
|
||||||
* @param token Security Token
|
|
||||||
* @return RowSet */
|
|
||||||
public javax.sql.RowSet stmt_getRowSet( org.compiere.util.CStatementVO info,org.compiere.util.SecurityToken token ) ;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Execute Update
|
|
||||||
* @param info Result info
|
|
||||||
* @param token Security Token
|
|
||||||
* @return row count */
|
|
||||||
public int stmt_executeUpdate( org.compiere.util.CStatementVO info,org.compiere.util.SecurityToken token ) ;
|
|
||||||
|
|
||||||
public org.compiere.util.ExecuteResult stmt_execute( org.compiere.util.CStatementVO info,org.compiere.util.SecurityToken token ) ;
|
|
||||||
|
|
||||||
public org.compiere.util.CallableResult callable_execute( org.compiere.util.CStatementVO info,org.compiere.util.SecurityToken token ) ;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get next number for Key column = 0 is Error.
|
|
||||||
* @param AD_Client_ID client
|
|
||||||
* @param TableName table name
|
|
||||||
* @param trxName optional Transaction Name
|
|
||||||
* @return next no */
|
|
||||||
public int getNextID( int AD_Client_ID,java.lang.String TableName,java.lang.String trxName ) ;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Document No from table
|
|
||||||
* @param AD_Client_ID client
|
|
||||||
* @param TableName table name
|
|
||||||
* @param trxName optional Transaction Name
|
|
||||||
* @return document no or null */
|
|
||||||
public java.lang.String getDocumentNo( int AD_Client_ID,java.lang.String TableName,java.lang.String trxName ) ;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Document No from table
|
|
||||||
* @param AD_Client_ID client
|
|
||||||
* @param TableName table name
|
|
||||||
* @param trxName optional Transaction Name
|
|
||||||
* @param po
|
|
||||||
* @return document no or null */
|
|
||||||
public java.lang.String getDocumentNo( int AD_Client_ID,java.lang.String TableName,java.lang.String trxName,org.compiere.model.PO po ) ;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Document No based on Document Type
|
|
||||||
* @param C_DocType_ID document type
|
|
||||||
* @param trxName optional Transaction Name
|
|
||||||
* @return document no or null */
|
|
||||||
public java.lang.String getDocumentNo( int C_DocType_ID,java.lang.String trxName,boolean definite ) ;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Document No based on Document Type
|
|
||||||
* @param C_DocType_ID document type
|
|
||||||
* @param trxName optional Transaction Name
|
|
||||||
* @param po
|
|
||||||
* @return document no or null */
|
|
||||||
public java.lang.String getDocumentNo( int C_DocType_ID,java.lang.String trxName,boolean definite,org.compiere.model.PO po ) ;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Process Remote
|
* Process Remote
|
||||||
* @param ctx Context
|
* @param ctx Context
|
||||||
|
@ -110,15 +35,6 @@ public interface ServerLocal
|
||||||
* @return process info */
|
* @return process info */
|
||||||
public org.compiere.process.ProcessInfo workflow( java.util.Properties ctx,org.compiere.process.ProcessInfo pi,int AD_Workflow_ID ) ;
|
public org.compiere.process.ProcessInfo workflow( java.util.Properties ctx,org.compiere.process.ProcessInfo pi,int AD_Workflow_ID ) ;
|
||||||
|
|
||||||
/**
|
|
||||||
* Online Payment from Server
|
|
||||||
* @param ctx Context
|
|
||||||
* @param C_Payment_ID payment
|
|
||||||
* @param C_PaymentProcessor_ID processor
|
|
||||||
* @param trxName transaction
|
|
||||||
* @return true if approved */
|
|
||||||
public boolean paymentOnline( java.util.Properties ctx,int C_Payment_ID,int C_PaymentProcessor_ID,java.lang.String trxName ) ;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create EMail from Server (Request User)
|
* Create EMail from Server (Request User)
|
||||||
* @param ctx Context
|
* @param ctx Context
|
||||||
|
@ -141,7 +57,7 @@ public interface ServerLocal
|
||||||
public org.compiere.util.EMail createEMail( java.util.Properties ctx,int AD_Client_ID,int AD_User_ID,java.lang.String to,java.lang.String subject,java.lang.String message ) ;
|
public org.compiere.util.EMail createEMail( java.util.Properties ctx,int AD_Client_ID,int AD_User_ID,java.lang.String to,java.lang.String subject,java.lang.String message ) ;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create EMail from Server (Request User)
|
* Execute task on server
|
||||||
* @param AD_Task_ID task
|
* @param AD_Task_ID task
|
||||||
* @return execution trace */
|
* @return execution trace */
|
||||||
public java.lang.String executeTask( int AD_Task_ID ) ;
|
public java.lang.String executeTask( int AD_Task_ID ) ;
|
||||||
|
@ -153,74 +69,16 @@ public interface ServerLocal
|
||||||
* @return number of records reset */
|
* @return number of records reset */
|
||||||
public int cacheReset( java.lang.String tableName,int Record_ID ) ;
|
public int cacheReset( java.lang.String tableName,int Record_ID ) ;
|
||||||
|
|
||||||
/**
|
|
||||||
* LOB update
|
|
||||||
* @param sql table name
|
|
||||||
* @param displayType display type (i.e. BLOB/CLOB)
|
|
||||||
* @param value the data
|
|
||||||
* @param trxName
|
|
||||||
* @param token Security Token
|
|
||||||
* @return true if updated */
|
|
||||||
public boolean updateLOB( java.lang.String sql,int displayType,java.lang.Object value,java.lang.String trxName,org.compiere.util.SecurityToken token ) ;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Describes the instance and its content for debugging purpose
|
* Describes the instance and its content for debugging purpose
|
||||||
* @return Debugging information about the instance and its content */
|
* @return Debugging information about the instance and its content */
|
||||||
public java.lang.String getStatus( ) ;
|
public java.lang.String getStatus( ) ;
|
||||||
|
|
||||||
/**
|
|
||||||
* Set savepoint
|
|
||||||
* @param trxName
|
|
||||||
* @param savePointName
|
|
||||||
* @return true if success, false otherwise */
|
|
||||||
public org.compiere.util.SavepointVO setSavepoint( java.lang.String trxName,java.lang.String savePointName ) ;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Start remote transaction
|
|
||||||
* @param trxName */
|
|
||||||
public void startTransaction( java.lang.String trxName ) ;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Close remote transaction
|
|
||||||
* @param trxName */
|
|
||||||
public void closeTransaction( java.lang.String trxName ) ;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Commit the named transaction on server
|
|
||||||
* @param trxName
|
|
||||||
* @return true if success, false otherwise */
|
|
||||||
public boolean commit( java.lang.String trxName ) ;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Rollback the named transaction on server
|
|
||||||
* @param trxName
|
|
||||||
* @return true if success, false otherwise */
|
|
||||||
public boolean rollback( java.lang.String trxName ) ;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Rollback the named transaction on server
|
|
||||||
* @param trxName
|
|
||||||
* @return true if success, false otherwise */
|
|
||||||
public boolean rollback( java.lang.String trxName,org.compiere.util.SavepointVO savePoint ) ;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Execute db proces on server
|
* Execute db proces on server
|
||||||
* @param processInfo
|
* @param processInfo
|
||||||
* @param procedureName
|
* @param procedureName
|
||||||
* @param trxName
|
|
||||||
* @return ProcessInfo */
|
* @return ProcessInfo */
|
||||||
public org.compiere.process.ProcessInfo dbProcess( org.compiere.process.ProcessInfo processInfo,java.lang.String procedureName,java.lang.String trxName,org.compiere.util.SecurityToken token ) ;
|
public org.compiere.process.ProcessInfo dbProcess( org.compiere.process.ProcessInfo processInfo,java.lang.String procedureName ) ;
|
||||||
|
|
||||||
/**
|
|
||||||
* Load fields meta data from database
|
|
||||||
* @param gridTabVO
|
|
||||||
* @return ArrayList */
|
|
||||||
public java.util.ArrayList getFields( org.compiere.model.GridTabVO gridTabVO ) ;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get table id from ad_table by table name
|
|
||||||
* @param tableName
|
|
||||||
* @return tableName */
|
|
||||||
public int getTableID( java.lang.String tableName ) ;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -253,18 +253,6 @@ public class GridTabVO implements Evaluatee, Serializable
|
||||||
*/
|
*/
|
||||||
private static boolean createFields (GridTabVO mTabVO)
|
private static boolean createFields (GridTabVO mTabVO)
|
||||||
{
|
{
|
||||||
if (DB.isRemoteObjects() && CConnection.get().isAppsServerOK(false))
|
|
||||||
{
|
|
||||||
remoteCreateFields(mTabVO);
|
|
||||||
return mTabVO.initFields;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (CConnection.get().isServerObjects())
|
|
||||||
{
|
|
||||||
CLogger.get().log(Level.SEVERE, "Application server not available.");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
//local only or remote fail for vpn profile
|
//local only or remote fail for vpn profile
|
||||||
mTabVO.Fields = new ArrayList<GridFieldVO>();
|
mTabVO.Fields = new ArrayList<GridFieldVO>();
|
||||||
|
|
||||||
|
@ -297,50 +285,6 @@ public class GridTabVO implements Evaluatee, Serializable
|
||||||
return mTabVO.Fields.size() != 0;
|
return mTabVO.Fields.size() != 0;
|
||||||
} // createFields
|
} // createFields
|
||||||
|
|
||||||
private static boolean remoteCreateFields (GridTabVO mTabVO)
|
|
||||||
{
|
|
||||||
|
|
||||||
Server server = CConnection.get().getServer();
|
|
||||||
if (server != null)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
mTabVO.Fields = server.getFields(mTabVO);
|
|
||||||
mTabVO.initFields =
|
|
||||||
(mTabVO.Fields != null && mTabVO.Fields.size() > 0);
|
|
||||||
//sync context
|
|
||||||
int size = mTabVO.Fields.size();
|
|
||||||
for (int i = 0; i < size; i++)
|
|
||||||
{
|
|
||||||
GridFieldVO field = (GridFieldVO)mTabVO.Fields.get(i);
|
|
||||||
Properties ctx = field.ctx;
|
|
||||||
field.setCtx(mTabVO.ctx);
|
|
||||||
Set keys = ctx.keySet();
|
|
||||||
//check any key added remotely
|
|
||||||
for(Iterator k = keys.iterator(); k.hasNext(); )
|
|
||||||
{
|
|
||||||
Object key = k.next();
|
|
||||||
if (mTabVO.ctx.containsKey(key) == false)
|
|
||||||
{
|
|
||||||
Object value = ctx.get(key);
|
|
||||||
mTabVO.ctx.put(key, value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (Exception e)
|
|
||||||
{
|
|
||||||
CLogger.get().log(Level.SEVERE, "Application Server Error: " + e.getLocalizedMessage(), e);
|
|
||||||
mTabVO.initFields = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (CConnection.get().isServerObjects())
|
|
||||||
CLogger.get().log(Level.SEVERE, "Remote Connection - Application server not available.");
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the SQL statement used for the MTabVO.create
|
* Return the SQL statement used for the MTabVO.create
|
||||||
* @param ctx context
|
* @param ctx context
|
||||||
|
|
|
@ -1213,8 +1213,6 @@ public class GridTable extends AbstractTableModel
|
||||||
Object[] rowDataDB = null;
|
Object[] rowDataDB = null;
|
||||||
// Prepare
|
// Prepare
|
||||||
boolean manualUpdate = ResultSet.CONCUR_READ_ONLY == rs.getConcurrency();
|
boolean manualUpdate = ResultSet.CONCUR_READ_ONLY == rs.getConcurrency();
|
||||||
if (DB.isRemoteObjects())
|
|
||||||
manualUpdate = true;
|
|
||||||
// Manual update if log migration scripts is enabled - teo_sarca BF [ 1901192 ]
|
// Manual update if log migration scripts is enabled - teo_sarca BF [ 1901192 ]
|
||||||
if(!manualUpdate && Ini.isPropertyBool(Ini.P_LOGMIGRATIONSCRIPT))
|
if(!manualUpdate && Ini.isPropertyBool(Ini.P_LOGMIGRATIONSCRIPT))
|
||||||
manualUpdate = true;
|
manualUpdate = true;
|
||||||
|
|
|
@ -457,34 +457,7 @@ public final class MPayment extends X_C_Payment
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean approved = false;
|
boolean approved = false;
|
||||||
/** Process Payment on Server */
|
|
||||||
if (DB.isRemoteObjects())
|
|
||||||
{
|
|
||||||
Server server = CConnection.get().getServer();
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (server != null)
|
|
||||||
{ // See ServerBean
|
|
||||||
String trxName = null; // unconditionally save
|
|
||||||
save(trxName); // server reads from disk
|
|
||||||
approved = server.paymentOnline (getCtx(), getC_Payment_ID(),
|
|
||||||
m_mPaymentProcessor.getC_PaymentProcessor_ID(), trxName);
|
|
||||||
if (CLogMgt.isLevelFinest())
|
|
||||||
s_log.fine("server => " + approved);
|
|
||||||
load(trxName); // server saves to disk
|
|
||||||
setIsApproved(approved);
|
|
||||||
return approved;
|
|
||||||
}
|
|
||||||
log.log(Level.WARNING, "AppsServer not found");
|
|
||||||
}
|
|
||||||
catch (RemoteException ex)
|
|
||||||
{
|
|
||||||
log.log(Level.SEVERE, "AppsServer error", ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/** **/
|
|
||||||
|
|
||||||
// Try locally
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
PaymentProcessor pp = PaymentProcessor.create(m_mPaymentProcessor, this);
|
PaymentProcessor pp = PaymentProcessor.create(m_mPaymentProcessor, this);
|
||||||
|
|
|
@ -81,30 +81,6 @@ public class MSequence extends X_AD_Sequence
|
||||||
if (TableName == null || TableName.length() == 0)
|
if (TableName == null || TableName.length() == 0)
|
||||||
throw new IllegalArgumentException("TableName missing");
|
throw new IllegalArgumentException("TableName missing");
|
||||||
|
|
||||||
//get from server
|
|
||||||
if (DB.isRemoteObjects())
|
|
||||||
{
|
|
||||||
Server server = CConnection.get().getServer();
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (server != null)
|
|
||||||
{ // See ServerBean
|
|
||||||
// hengsin: don't execute getNextID in tranaction to fix performance and locking issue
|
|
||||||
int id = server.getNextID(AD_Client_ID, TableName, null);
|
|
||||||
s_log.finest("server => " + id);
|
|
||||||
if (id < 0)
|
|
||||||
throw new DBException("No NextID");
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
s_log.log(Level.SEVERE, "AppsServer not found - " + TableName);
|
|
||||||
}
|
|
||||||
catch (RemoteException ex)
|
|
||||||
{
|
|
||||||
s_log.log(Level.SEVERE, "AppsServer error", ex);
|
|
||||||
}
|
|
||||||
// Try locally
|
|
||||||
}
|
|
||||||
|
|
||||||
int retValue = -1;
|
int retValue = -1;
|
||||||
|
|
||||||
// Check AdempiereSys
|
// Check AdempiereSys
|
||||||
|
@ -116,7 +92,7 @@ public class MSequence extends X_AD_Sequence
|
||||||
s_log.log(LOGLEVEL, TableName + " - AdempiereSys=" + adempiereSys + " [" + trxName + "]");
|
s_log.log(LOGLEVEL, TableName + " - AdempiereSys=" + adempiereSys + " [" + trxName + "]");
|
||||||
//begin vpj-cd e-evolution 09/02/2005 PostgreSQL
|
//begin vpj-cd e-evolution 09/02/2005 PostgreSQL
|
||||||
String selectSQL = null;
|
String selectSQL = null;
|
||||||
if (DB.isOracle() == false || DB.isRemoteObjects())
|
if (DB.isOracle() == false)
|
||||||
{
|
{
|
||||||
selectSQL = "SELECT CurrentNext, CurrentNextSys, IncrementNo, AD_Sequence_ID "
|
selectSQL = "SELECT CurrentNext, CurrentNextSys, IncrementNo, AD_Sequence_ID "
|
||||||
+ "FROM AD_Sequence "
|
+ "FROM AD_Sequence "
|
||||||
|
@ -382,28 +358,6 @@ public class MSequence extends X_AD_Sequence
|
||||||
if (TableName == null || TableName.length() == 0)
|
if (TableName == null || TableName.length() == 0)
|
||||||
throw new IllegalArgumentException("TableName missing");
|
throw new IllegalArgumentException("TableName missing");
|
||||||
|
|
||||||
//get from server
|
|
||||||
if (DB.isRemoteObjects())
|
|
||||||
{
|
|
||||||
Server server = CConnection.get().getServer();
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (server != null)
|
|
||||||
{ // See ServerBean
|
|
||||||
String dn = server.getDocumentNo (AD_Client_ID, TableName, trxName, po);
|
|
||||||
s_log.finest("Server => " + dn);
|
|
||||||
if (dn != null)
|
|
||||||
return dn;
|
|
||||||
}
|
|
||||||
s_log.log(Level.SEVERE, "AppsServer not found - " + TableName);
|
|
||||||
}
|
|
||||||
catch (RemoteException ex)
|
|
||||||
{
|
|
||||||
s_log.log(Level.SEVERE, "AppsServer error", ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//local
|
|
||||||
// Check AdempiereSys
|
// Check AdempiereSys
|
||||||
boolean adempiereSys = Ini.isPropertyBool(Ini.P_ADEMPIERESYS);
|
boolean adempiereSys = Ini.isPropertyBool(Ini.P_ADEMPIERESYS);
|
||||||
if (adempiereSys && AD_Client_ID > 11)
|
if (adempiereSys && AD_Client_ID > 11)
|
||||||
|
@ -445,7 +399,7 @@ public class MSequence extends X_AD_Sequence
|
||||||
|
|
||||||
|
|
||||||
String selectSQL = null;
|
String selectSQL = null;
|
||||||
if (DB.isOracle() == false || DB.isRemoteObjects())
|
if (DB.isOracle() == false)
|
||||||
{
|
{
|
||||||
if (isStartNewYear) {
|
if (isStartNewYear) {
|
||||||
selectSQL = "SELECT y.CurrentNext, s.CurrentNextSys, s.IncrementNo, s.Prefix, s.Suffix, s.DecimalPattern, s.AD_Sequence_ID "
|
selectSQL = "SELECT y.CurrentNext, s.CurrentNextSys, s.IncrementNo, s.Prefix, s.Suffix, s.DecimalPattern, s.AD_Sequence_ID "
|
||||||
|
@ -673,29 +627,6 @@ public class MSequence extends X_AD_Sequence
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
//get from server
|
|
||||||
|
|
||||||
if (DB.isRemoteObjects())
|
|
||||||
{
|
|
||||||
Server server = CConnection.get().getServer();
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (server != null)
|
|
||||||
{ // See ServerBean
|
|
||||||
String dn = server.getDocumentNo (C_DocType_ID, trxName, definite, po);
|
|
||||||
s_log.finest("Server => " + dn);
|
|
||||||
if (dn != null)
|
|
||||||
return dn;
|
|
||||||
}
|
|
||||||
s_log.log(Level.SEVERE, "AppsServer not found - " + C_DocType_ID);
|
|
||||||
}
|
|
||||||
catch (RemoteException ex)
|
|
||||||
{
|
|
||||||
s_log.log(Level.SEVERE, "AppsServer error", ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//local
|
|
||||||
MDocType dt = MDocType.get (Env.getCtx(), C_DocType_ID); // wrong for SERVER, but r/o
|
MDocType dt = MDocType.get (Env.getCtx(), C_DocType_ID); // wrong for SERVER, but r/o
|
||||||
if (dt != null && !dt.isDocNoControlled())
|
if (dt != null && !dt.isDocNoControlled())
|
||||||
{
|
{
|
||||||
|
|
|
@ -417,11 +417,8 @@ public class MSystem extends X_AD_System
|
||||||
*/
|
*/
|
||||||
private void setDBInfo()
|
private void setDBInfo()
|
||||||
{
|
{
|
||||||
if (!DB.isRemoteObjects())
|
String dbAddress = CConnection.get().getConnectionURL();
|
||||||
{
|
setDBAddress(dbAddress.toLowerCase());
|
||||||
String dbAddress = CConnection.get().getConnectionURL();
|
|
||||||
setDBAddress(dbAddress.toLowerCase());
|
|
||||||
}
|
|
||||||
//
|
//
|
||||||
if (!Ini.isClient())
|
if (!Ini.isClient())
|
||||||
{
|
{
|
||||||
|
|
|
@ -749,21 +749,13 @@ public class MTable extends X_AD_Table
|
||||||
String SQL = "SELECT AD_Table_ID FROM AD_Table WHERE tablename = ?";
|
String SQL = "SELECT AD_Table_ID FROM AD_Table WHERE tablename = ?";
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (DB.isRemoteObjects())
|
PreparedStatement pstmt = DB.prepareStatement(SQL, null);
|
||||||
{
|
pstmt.setString(1, tableName);
|
||||||
Server server = CConnection.get().getServer();
|
ResultSet rs = pstmt.executeQuery();
|
||||||
retValue = server.getTableID(tableName);
|
if (rs.next())
|
||||||
}
|
retValue = rs.getInt(1);
|
||||||
else
|
rs.close();
|
||||||
{
|
pstmt.close();
|
||||||
PreparedStatement pstmt = DB.prepareStatement(SQL, null);
|
|
||||||
pstmt.setString(1, tableName);
|
|
||||||
ResultSet rs = pstmt.executeQuery();
|
|
||||||
if (rs.next())
|
|
||||||
retValue = rs.getInt(1);
|
|
||||||
rs.close();
|
|
||||||
pstmt.close();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
|
|
@ -109,28 +109,6 @@ public class PO_LOB implements Serializable
|
||||||
.append(" SET ").append(m_columnName)
|
.append(" SET ").append(m_columnName)
|
||||||
.append("=? WHERE ").append(m_whereClause);
|
.append("=? WHERE ").append(m_whereClause);
|
||||||
//
|
//
|
||||||
boolean success = true;
|
|
||||||
if (DB.isRemoteObjects())
|
|
||||||
{
|
|
||||||
log.fine("[" + trxName + "] - Remote - " + m_value);
|
|
||||||
Server server = CConnection.get().getServer();
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (server != null)
|
|
||||||
{ // See ServerBean
|
|
||||||
success = server.updateLOB (sql.toString(), m_displayType, m_value, trxName, SecurityToken.getInstance());
|
|
||||||
if (CLogMgt.isLevelFinest())
|
|
||||||
log.fine("server.updateLOB => " + success);
|
|
||||||
return success;
|
|
||||||
}
|
|
||||||
log.log(Level.SEVERE, "AppsServer not found");
|
|
||||||
}
|
|
||||||
catch (RemoteException ex)
|
|
||||||
{
|
|
||||||
log.log(Level.SEVERE, "AppsServer error", ex);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
log.fine("[" + trxName + "] - Local - " + m_value);
|
log.fine("[" + trxName + "] - Local - " + m_value);
|
||||||
// Connection
|
// Connection
|
||||||
|
@ -150,7 +128,7 @@ public class PO_LOB implements Serializable
|
||||||
}
|
}
|
||||||
|
|
||||||
PreparedStatement pstmt = null;
|
PreparedStatement pstmt = null;
|
||||||
success = true;
|
boolean success = true;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
pstmt = con.prepareStatement(sql.toString());
|
pstmt = con.prepareStatement(sql.toString());
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -591,18 +591,6 @@ public class CLogMgt
|
||||||
//
|
//
|
||||||
sb.append(")\n ");
|
sb.append(")\n ");
|
||||||
//
|
//
|
||||||
boolean remoteObjects = DB.isRemoteObjects();
|
|
||||||
boolean remoteProcess = DB.isRemoteProcess();
|
|
||||||
String realCP = CConnection.PROFILE_LAN;
|
|
||||||
if (cc.isRMIoverHTTP())
|
|
||||||
realCP = CConnection.PROFILE_WAN;
|
|
||||||
else if (remoteObjects && remoteProcess)
|
|
||||||
realCP = CConnection.PROFILE_VPN;
|
|
||||||
sb.append(cc.getConnectionProfileText(realCP));
|
|
||||||
sb.append(": Tunnel=").append(cc.isRMIoverHTTP())
|
|
||||||
.append(", Objects=").append(remoteObjects)
|
|
||||||
.append(", Process=").append(remoteProcess);
|
|
||||||
|
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
} // getServerInfo
|
} // getServerInfo
|
||||||
|
|
||||||
|
|
|
@ -16,972 +16,14 @@
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
package org.compiere.util;
|
package org.compiere.util;
|
||||||
|
|
||||||
import java.io.*;
|
import java.sql.PreparedStatement;
|
||||||
import java.math.*;
|
|
||||||
import java.net.*;
|
|
||||||
import java.sql.*;
|
|
||||||
import java.util.*;
|
|
||||||
import java.util.logging.*;
|
|
||||||
|
|
||||||
import javax.sql.*;
|
|
||||||
|
|
||||||
import org.adempiere.exceptions.DBException;
|
|
||||||
import org.compiere.db.*;
|
|
||||||
import org.compiere.interfaces.*;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adempiere Prepared Statement
|
* Interface to wrap PreparedStatement
|
||||||
|
* @author Low Heng Sin
|
||||||
*
|
*
|
||||||
* @author Jorg Janke
|
|
||||||
* @version $Id: CPreparedStatement.java,v 1.3 2006/07/30 00:54:36 jjanke Exp $
|
|
||||||
* ---
|
|
||||||
* Modifications: Handle connections properly
|
|
||||||
* Reason : Due to changes brought in the connection pooling whereby the system
|
|
||||||
* no more relies upon abandoned connections.
|
|
||||||
* @author Ashley Ramdass (Posterita)
|
|
||||||
*/
|
*/
|
||||||
public class CPreparedStatement extends CStatement implements PreparedStatement
|
public interface CPreparedStatement extends CStatement, PreparedStatement
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* Prepared Statement Constructor
|
|
||||||
*
|
|
||||||
* @param resultSetType - ResultSet.TYPE_FORWARD_ONLY, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.TYPE_SCROLL_SENSITIVE
|
|
||||||
* @param resultSetConcurrency - ResultSet.CONCUR_READ_ONLY or ResultSet.CONCUR_UPDATABLE
|
|
||||||
* @param sql0 unconverted sql statement
|
|
||||||
* @param trxName transaction name or null
|
|
||||||
*/
|
|
||||||
public CPreparedStatement (int resultSetType, int resultSetConcurrency,
|
|
||||||
String sql0, String trxName)
|
|
||||||
{
|
|
||||||
if (sql0 == null || sql0.length() == 0)
|
|
||||||
throw new IllegalArgumentException ("sql required");
|
|
||||||
|
|
||||||
p_vo = new CStatementVO (resultSetType, resultSetConcurrency,
|
|
||||||
DB.getDatabase().convertStatement(sql0));
|
|
||||||
|
|
||||||
p_vo.setTrxName(trxName);
|
|
||||||
|
|
||||||
init();
|
|
||||||
} // CPreparedStatement
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialise the prepared statement wrapper object
|
|
||||||
*/
|
|
||||||
protected void init()
|
|
||||||
{
|
|
||||||
//Local access
|
|
||||||
if (!DB.isRemoteObjects())
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Connection conn = null;
|
|
||||||
Trx trx = p_vo.getTrxName() == null ? null : Trx.get(p_vo.getTrxName(), true);
|
|
||||||
if (trx != null)
|
|
||||||
{
|
|
||||||
conn = trx.getConnection();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (p_vo.getResultSetConcurrency() == ResultSet.CONCUR_UPDATABLE)
|
|
||||||
m_conn = DB.getConnectionRW ();
|
|
||||||
else
|
|
||||||
m_conn = DB.getConnectionRO();
|
|
||||||
conn = m_conn;
|
|
||||||
}
|
|
||||||
if (conn == null)
|
|
||||||
throw new DBException("No Connection");
|
|
||||||
p_stmt = conn.prepareStatement (p_vo.getSql(), p_vo.getResultSetType(), p_vo.getResultSetConcurrency());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
log.log(Level.SEVERE, p_vo.getSql(), e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remote Constructor
|
|
||||||
* @param vo value object
|
|
||||||
*/
|
|
||||||
public CPreparedStatement (CStatementVO vo)
|
|
||||||
{
|
|
||||||
super(vo);
|
|
||||||
} // CPreparedStatement
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Execute Query
|
|
||||||
* @return ResultSet or RowSet
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.PreparedStatement#executeQuery()
|
|
||||||
*/
|
|
||||||
public ResultSet executeQuery () throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null) // local
|
|
||||||
return ((PreparedStatement)p_stmt).executeQuery();
|
|
||||||
//
|
|
||||||
// Client -> remote sever
|
|
||||||
log.finest("server => " + p_vo + ", Remote=" + DB.isRemoteObjects());
|
|
||||||
try
|
|
||||||
{
|
|
||||||
boolean remote = DB.isRemoteObjects() && CConnection.get().isAppsServerOK(false);
|
|
||||||
if (remote && p_remoteErrors > 1)
|
|
||||||
remote = CConnection.get().isAppsServerOK(true);
|
|
||||||
if (remote)
|
|
||||||
{
|
|
||||||
Server server = CConnection.get().getServer();
|
|
||||||
if (server != null)
|
|
||||||
{
|
|
||||||
ResultSet rs = server.pstmt_getRowSet (p_vo, SecurityToken.getInstance());
|
|
||||||
p_vo.clearParameters(); // re-use of result set
|
|
||||||
if (rs == null)
|
|
||||||
log.warning("ResultSet is null - " + p_vo);
|
|
||||||
else
|
|
||||||
p_remoteErrors = 0;
|
|
||||||
return rs;
|
|
||||||
}
|
|
||||||
log.log(Level.SEVERE, "AppsServer not found");
|
|
||||||
p_remoteErrors++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
log.log(Level.SEVERE, "AppsServer error", ex);
|
|
||||||
p_remoteErrors++;
|
|
||||||
if (ex instanceof SQLException)
|
|
||||||
throw (SQLException)ex;
|
|
||||||
else if (ex instanceof RuntimeException)
|
|
||||||
throw (RuntimeException)ex;
|
|
||||||
else
|
|
||||||
throw new RuntimeException(ex);
|
|
||||||
}
|
|
||||||
throw new IllegalStateException("Remote Connection - Application server not available");
|
|
||||||
} // executeQuery
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Execute Query
|
|
||||||
* @param sql0 unconverted SQL to execute
|
|
||||||
* @return ResultSet or RowSet
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#executeQuery(String)
|
|
||||||
*/
|
|
||||||
public ResultSet executeQuery (String sql0) throws SQLException
|
|
||||||
{
|
|
||||||
// Convert SQL
|
|
||||||
p_vo.setSql(DB.getDatabase().convertStatement(sql0));
|
|
||||||
if (p_stmt != null) // local
|
|
||||||
return p_stmt.executeQuery(p_vo.getSql());
|
|
||||||
//
|
|
||||||
return executeQuery();
|
|
||||||
} // executeQuery
|
|
||||||
|
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
* Execute Update
|
|
||||||
* @return no of updated rows
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.PreparedStatement#executeUpdate()
|
|
||||||
*/
|
|
||||||
public int executeUpdate () throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
return ((PreparedStatement)p_stmt).executeUpdate();
|
|
||||||
//
|
|
||||||
// Client -> remote sever
|
|
||||||
log.finest("server => " + p_vo + ", Remote=" + DB.isRemoteObjects());
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (DB.isRemoteObjects() && CConnection.get().isAppsServerOK(false))
|
|
||||||
{
|
|
||||||
Server server = CConnection.get().getServer();
|
|
||||||
if (server != null)
|
|
||||||
{
|
|
||||||
int result = server.stmt_executeUpdate (p_vo, SecurityToken.getInstance());
|
|
||||||
p_vo.clearParameters(); // re-use of result set
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
log.log(Level.SEVERE, "AppsServer not found");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
log.log(Level.SEVERE, "AppsServer error", ex);
|
|
||||||
if (ex instanceof SQLException)
|
|
||||||
throw (SQLException)ex;
|
|
||||||
else if (ex instanceof RuntimeException)
|
|
||||||
throw (RuntimeException)ex;
|
|
||||||
else
|
|
||||||
throw new RuntimeException(ex);
|
|
||||||
}
|
|
||||||
throw new IllegalStateException("Remote Connection - Application server not available");
|
|
||||||
} // executeUpdate
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Execute Update
|
|
||||||
* @param sql0 unconverted sql
|
|
||||||
* @return no of updated rows
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#executeUpdate(String)
|
|
||||||
*/
|
|
||||||
public int executeUpdate (String sql0) throws SQLException
|
|
||||||
{
|
|
||||||
// Convert SQL
|
|
||||||
p_vo.setSql(DB.getDatabase().convertStatement(sql0));
|
|
||||||
if (p_stmt != null) // local
|
|
||||||
return p_stmt.executeUpdate (p_vo.getSql());
|
|
||||||
return executeUpdate();
|
|
||||||
} // executeUpdate
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method execute
|
|
||||||
* @return boolean
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.PreparedStatement#execute()
|
|
||||||
*/
|
|
||||||
public boolean execute () throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
return ((PreparedStatement)p_stmt).execute();
|
|
||||||
|
|
||||||
return remote_execute();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method getMetaData
|
|
||||||
* @return ResultSetMetaData
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.PreparedStatement#getMetaData()
|
|
||||||
*/
|
|
||||||
public ResultSetMetaData getMetaData () throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
return ((PreparedStatement)p_stmt).getMetaData ();
|
|
||||||
else
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method getMetaData() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method getParameterMetaData
|
|
||||||
* @return ParameterMetaData
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.PreparedStatement#getParameterMetaData()
|
|
||||||
*/
|
|
||||||
public ParameterMetaData getParameterMetaData () throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
return ((PreparedStatement)p_stmt).getParameterMetaData();
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method getParameterMetaData() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method addBatch
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.PreparedStatement#addBatch()
|
|
||||||
*/
|
|
||||||
public void addBatch () throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
((PreparedStatement)p_stmt).addBatch ();
|
|
||||||
else
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method addBatch() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
* Set Null
|
|
||||||
* @param parameterIndex index
|
|
||||||
* @param sqlType type
|
|
||||||
* @throws SQLException
|
|
||||||
*/
|
|
||||||
public void setNull (int parameterIndex, int sqlType) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
((PreparedStatement)p_stmt).setNull (parameterIndex, sqlType);
|
|
||||||
else
|
|
||||||
p_vo.setParameter(parameterIndex, new NullParameter(sqlType));
|
|
||||||
} // setNull
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method setNull
|
|
||||||
* @param parameterIndex int
|
|
||||||
* @param sqlType int
|
|
||||||
* @param typeName String
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.PreparedStatement#setNull(int, int, String)
|
|
||||||
*/
|
|
||||||
public void setNull (int parameterIndex, int sqlType, String typeName) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
((PreparedStatement)p_stmt).setNull (parameterIndex, sqlType);
|
|
||||||
else
|
|
||||||
p_vo.setParameter(parameterIndex, new NullParameter(sqlType));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method setBoolean
|
|
||||||
* @param parameterIndex int
|
|
||||||
* @param x boolean
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.PreparedStatement#setBoolean(int, boolean)
|
|
||||||
*/
|
|
||||||
public void setBoolean (int parameterIndex, boolean x) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
((PreparedStatement)p_stmt).setBoolean (parameterIndex, x);
|
|
||||||
else
|
|
||||||
p_vo.setParameter(parameterIndex, new Boolean(x));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method setByte
|
|
||||||
* @param parameterIndex int
|
|
||||||
* @param x byte
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.PreparedStatement#setByte(int, byte)
|
|
||||||
*/
|
|
||||||
public void setByte (int parameterIndex, byte x) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
((PreparedStatement)p_stmt).setByte (parameterIndex, x);
|
|
||||||
else
|
|
||||||
p_vo.setParameter(parameterIndex, new Byte(x));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method setShort
|
|
||||||
* @param parameterIndex int
|
|
||||||
* @param x short
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.PreparedStatement#setShort(int, short)
|
|
||||||
*/
|
|
||||||
public void setShort (int parameterIndex, short x) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
((PreparedStatement)p_stmt).setShort (parameterIndex, x);
|
|
||||||
else
|
|
||||||
p_vo.setParameter(parameterIndex, new Short(x));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method setInt
|
|
||||||
* @param parameterIndex int
|
|
||||||
* @param x int
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.PreparedStatement#setInt(int, int)
|
|
||||||
*/
|
|
||||||
public void setInt (int parameterIndex, int x) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
((PreparedStatement)p_stmt).setInt (parameterIndex, x);
|
|
||||||
else
|
|
||||||
p_vo.setParameter(parameterIndex, new Integer(x));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method setLong
|
|
||||||
* @param parameterIndex int
|
|
||||||
* @param x long
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.PreparedStatement#setLong(int, long)
|
|
||||||
*/
|
|
||||||
public void setLong (int parameterIndex, long x) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
((PreparedStatement)p_stmt).setLong (parameterIndex, x);
|
|
||||||
else
|
|
||||||
p_vo.setParameter(parameterIndex, new Long(x));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method setFloat
|
|
||||||
* @param parameterIndex int
|
|
||||||
* @param x float
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.PreparedStatement#setFloat(int, float)
|
|
||||||
*/
|
|
||||||
public void setFloat (int parameterIndex, float x) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
((PreparedStatement)p_stmt).setFloat (parameterIndex, x);
|
|
||||||
else
|
|
||||||
p_vo.setParameter(parameterIndex, new Float(x));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method setDouble
|
|
||||||
* @param parameterIndex int
|
|
||||||
* @param x double
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.PreparedStatement#setDouble(int, double)
|
|
||||||
*/
|
|
||||||
public void setDouble (int parameterIndex, double x) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
((PreparedStatement)p_stmt).setDouble (parameterIndex, x);
|
|
||||||
else
|
|
||||||
p_vo.setParameter(parameterIndex, new Double(x));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method setBigDecimal
|
|
||||||
* @param parameterIndex int
|
|
||||||
* @param x BigDecimal
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.PreparedStatement#setBigDecimal(int, BigDecimal)
|
|
||||||
*/
|
|
||||||
public void setBigDecimal (int parameterIndex, BigDecimal x) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
((PreparedStatement)p_stmt).setBigDecimal (parameterIndex, x);
|
|
||||||
else
|
|
||||||
p_vo.setParameter(parameterIndex, x);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method setString
|
|
||||||
* @param parameterIndex int
|
|
||||||
* @param x String
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.PreparedStatement#setString(int, String)
|
|
||||||
*/
|
|
||||||
public void setString (int parameterIndex, String x) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
((PreparedStatement)p_stmt).setString (parameterIndex, x);
|
|
||||||
else
|
|
||||||
p_vo.setParameter(parameterIndex, x);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method setBytes
|
|
||||||
* @param parameterIndex int
|
|
||||||
* @param x byte[]
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.PreparedStatement#setBytes(int, byte[])
|
|
||||||
*/
|
|
||||||
public void setBytes (int parameterIndex, byte[] x) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
((PreparedStatement)p_stmt).setBytes (parameterIndex, x);
|
|
||||||
else
|
|
||||||
p_vo.setParameter (parameterIndex, x);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method setDate
|
|
||||||
* @param parameterIndex int
|
|
||||||
* @param x java.sql.Date
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.PreparedStatement#setDate(int, java.sql.Date)
|
|
||||||
*/
|
|
||||||
public void setDate (int parameterIndex, java.sql.Date x) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
((PreparedStatement)p_stmt).setDate (parameterIndex, x);
|
|
||||||
else
|
|
||||||
p_vo.setParameter(parameterIndex, x);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method setTime
|
|
||||||
* @param parameterIndex int
|
|
||||||
* @param x Time
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.PreparedStatement#setTime(int, Time)
|
|
||||||
*/
|
|
||||||
public void setTime (int parameterIndex, Time x) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
((PreparedStatement)p_stmt).setTime (parameterIndex, x);
|
|
||||||
else
|
|
||||||
p_vo.setParameter(parameterIndex, x);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method setTimestamp
|
|
||||||
* @param parameterIndex int
|
|
||||||
* @param x Timestamp
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.PreparedStatement#setTimestamp(int, Timestamp)
|
|
||||||
*/
|
|
||||||
public void setTimestamp (int parameterIndex, Timestamp x) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
((PreparedStatement)p_stmt).setTimestamp (parameterIndex, x);
|
|
||||||
else
|
|
||||||
p_vo.setParameter(parameterIndex, x);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method setAsciiStream
|
|
||||||
* @param parameterIndex int
|
|
||||||
* @param x InputStream
|
|
||||||
* @param length int
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.PreparedStatement#setAsciiStream(int, InputStream, int)
|
|
||||||
*/
|
|
||||||
public void setAsciiStream (int parameterIndex, InputStream x, int length) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
((PreparedStatement)p_stmt).setAsciiStream (parameterIndex, x, length);
|
|
||||||
else
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method setAsciiStream() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param parameterIndex the first parameter is 1, the second is 2, ...
|
|
||||||
* @param x a <code>java.io.InputStream</code> object that contains the
|
|
||||||
* Unicode parameter value as two-byte Unicode characters
|
|
||||||
* @param length the number of bytes in the stream
|
|
||||||
* @exception SQLException if a database access error occurs
|
|
||||||
* see java.sql.PreparedStatement#setUnicodeStream(int, InputStream, int)
|
|
||||||
* @deprecated
|
|
||||||
*/
|
|
||||||
public void setUnicodeStream (int parameterIndex, InputStream x, int length) throws SQLException
|
|
||||||
{
|
|
||||||
throw new UnsupportedOperationException ("Method setUnicodeStream() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method setBinaryStream
|
|
||||||
* @param parameterIndex int
|
|
||||||
* @param x InputStream
|
|
||||||
* @param length int
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.PreparedStatement#setBinaryStream(int, InputStream, int)
|
|
||||||
*/
|
|
||||||
public void setBinaryStream (int parameterIndex, InputStream x, int length) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
((PreparedStatement)p_stmt).setBinaryStream (parameterIndex, x, length);
|
|
||||||
else
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method setBinaryStream() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method clearParameters
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.PreparedStatement#clearParameters()
|
|
||||||
*/
|
|
||||||
public void clearParameters () throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
((PreparedStatement)p_stmt).clearParameters ();
|
|
||||||
else
|
|
||||||
p_vo.clearParameters();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method setObject
|
|
||||||
* @param parameterIndex int
|
|
||||||
* @param x Object
|
|
||||||
* @param targetSqlType int
|
|
||||||
* @param scale int
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.PreparedStatement#setObject(int, Object, int, int)
|
|
||||||
*/
|
|
||||||
public void setObject (int parameterIndex, Object x, int targetSqlType, int scale) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
((PreparedStatement)p_stmt).setObject (parameterIndex, x, targetSqlType, scale);
|
|
||||||
else
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method setObject() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method setObject
|
|
||||||
* @param parameterIndex int
|
|
||||||
* @param x Object
|
|
||||||
* @param targetSqlType int
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.PreparedStatement#setObject(int, Object, int)
|
|
||||||
*/
|
|
||||||
public void setObject (int parameterIndex, Object x, int targetSqlType) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
((PreparedStatement)p_stmt).setObject (parameterIndex, x);
|
|
||||||
else
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method setObject() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method setObject
|
|
||||||
* @param parameterIndex int
|
|
||||||
* @param x Object
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.PreparedStatement#setObject(int, Object)
|
|
||||||
*/
|
|
||||||
public void setObject (int parameterIndex, Object x) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
((PreparedStatement)p_stmt).setObject (parameterIndex, x);
|
|
||||||
else
|
|
||||||
p_vo.setParameter(parameterIndex, x);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method setCharacterStream
|
|
||||||
* @param parameterIndex int
|
|
||||||
* @param reader Reader
|
|
||||||
* @param length int
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.PreparedStatement#setCharacterStream(int, Reader, int)
|
|
||||||
*/
|
|
||||||
public void setCharacterStream (int parameterIndex, Reader reader, int length) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
((PreparedStatement)p_stmt).setCharacterStream (parameterIndex, reader, length);
|
|
||||||
else
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method setCharacterStream() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method setRef
|
|
||||||
* @param parameterIndex int
|
|
||||||
* @param x Ref
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.PreparedStatement#setRef(int, Ref)
|
|
||||||
*/
|
|
||||||
public void setRef (int parameterIndex, Ref x) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
((PreparedStatement)p_stmt).setRef (parameterIndex, x);
|
|
||||||
else
|
|
||||||
p_vo.setParameter(parameterIndex, x);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method setBlob
|
|
||||||
* @param parameterIndex int
|
|
||||||
* @param x Blob
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.PreparedStatement#setBlob(int, Blob)
|
|
||||||
*/
|
|
||||||
public void setBlob (int parameterIndex, Blob x) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
((PreparedStatement)p_stmt).setObject (parameterIndex, x);
|
|
||||||
else
|
|
||||||
p_vo.setParameter(parameterIndex, x);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method setClob
|
|
||||||
* @param parameterIndex int
|
|
||||||
* @param x Clob
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.PreparedStatement#setClob(int, Clob)
|
|
||||||
*/
|
|
||||||
public void setClob (int parameterIndex, Clob x) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
((PreparedStatement)p_stmt).setObject (parameterIndex, x);
|
|
||||||
else
|
|
||||||
p_vo.setParameter(parameterIndex, x);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method setArray
|
|
||||||
* @param parameterIndex int
|
|
||||||
* @param x Array
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.PreparedStatement#setArray(int, Array)
|
|
||||||
*/
|
|
||||||
public void setArray (int parameterIndex, Array x) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
((PreparedStatement)p_stmt).setObject (parameterIndex, x);
|
|
||||||
else
|
|
||||||
p_vo.setParameter(parameterIndex, x);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method setDate
|
|
||||||
* @param parameterIndex int
|
|
||||||
* @param x java.sql.Date
|
|
||||||
* @param cal Calendar
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.PreparedStatement#setDate(int, java.sql.Date, Calendar)
|
|
||||||
*/
|
|
||||||
public void setDate (int parameterIndex, java.sql.Date x, Calendar cal) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
((PreparedStatement)p_stmt).setDate (parameterIndex, x, cal);
|
|
||||||
else
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method setDate() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method setTime
|
|
||||||
* @param parameterIndex int
|
|
||||||
* @param x Time
|
|
||||||
* @param cal Calendar
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.PreparedStatement#setTime(int, Time, Calendar)
|
|
||||||
*/
|
|
||||||
public void setTime (int parameterIndex, Time x, Calendar cal) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
((PreparedStatement)p_stmt).setTime (parameterIndex, x, cal);
|
|
||||||
else
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method setTime() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method setTimestamp
|
|
||||||
* @param parameterIndex int
|
|
||||||
* @param x Timestamp
|
|
||||||
* @param cal Calendar
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.PreparedStatement#setTimestamp(int, Timestamp, Calendar)
|
|
||||||
*/
|
|
||||||
public void setTimestamp (int parameterIndex, Timestamp x, Calendar cal) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
((PreparedStatement)p_stmt).setTimestamp (parameterIndex, x, cal);
|
|
||||||
else
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method setTimestamp() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method setURL
|
|
||||||
* @param parameterIndex int
|
|
||||||
* @param x URL
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.PreparedStatement#setURL(int, URL)
|
|
||||||
*/
|
|
||||||
public void setURL (int parameterIndex, URL x) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
((PreparedStatement)p_stmt).setObject (parameterIndex, x);
|
|
||||||
else
|
|
||||||
p_vo.setParameter(parameterIndex, x);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* String representation
|
|
||||||
* @return info
|
|
||||||
*/
|
|
||||||
public String toString()
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
return "CPreparedStatement[Local=" + p_stmt + "]";
|
|
||||||
return "CPreparedStatement[" + p_vo + "]";
|
|
||||||
} // toString
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public void fillParametersFromVO()
|
|
||||||
{
|
|
||||||
log.finest(p_vo.getSql());
|
|
||||||
try
|
|
||||||
{
|
|
||||||
// Set Parameters
|
|
||||||
ArrayList parameters = p_vo.getParameters();
|
|
||||||
PreparedStatement pstmt = (PreparedStatement)p_stmt;
|
|
||||||
for (int i = 0; i < parameters.size(); i++)
|
|
||||||
{
|
|
||||||
Object o = parameters.get(i);
|
|
||||||
if (o == null)
|
|
||||||
throw new IllegalArgumentException ("Local - Null Parameter #" + i);
|
|
||||||
else if (o instanceof NullParameter)
|
|
||||||
{
|
|
||||||
int type = ((NullParameter)o).getType();
|
|
||||||
pstmt.setNull(i+1, type);
|
|
||||||
log.finest("#" + (i+1) + " - Null");
|
|
||||||
}
|
|
||||||
else if (o instanceof Integer)
|
|
||||||
{
|
|
||||||
pstmt.setInt(i+1, ((Integer)o).intValue());
|
|
||||||
log.finest("#" + (i+1) + " - int=" + o);
|
|
||||||
}
|
|
||||||
else if (o instanceof String)
|
|
||||||
{
|
|
||||||
pstmt.setString(i+1, (String)o);
|
|
||||||
log.finest("#" + (i+1) + " - String=" + o);
|
|
||||||
}
|
|
||||||
else if (o instanceof Timestamp)
|
|
||||||
{
|
|
||||||
pstmt.setTimestamp(i+1, (Timestamp)o);
|
|
||||||
log.finest("#" + (i+1) + " - Timestamp=" + o);
|
|
||||||
}
|
|
||||||
else if (o instanceof BigDecimal)
|
|
||||||
{
|
|
||||||
pstmt.setBigDecimal(i+1, (BigDecimal)o);
|
|
||||||
log.finest("#" + (i+1) + " - BigDecimal=" + o);
|
|
||||||
}
|
|
||||||
else if (o instanceof java.sql.Date)
|
|
||||||
{
|
|
||||||
pstmt.setDate(i+1, (java.sql.Date)o);
|
|
||||||
log.finest("#" + (i+1) + " - Date=" + o);
|
|
||||||
}
|
|
||||||
else if (o instanceof java.util.Date)
|
|
||||||
{
|
|
||||||
pstmt.setTimestamp(i+1, new Timestamp(((java.util.Date)o).getTime()));
|
|
||||||
log.finest("#" + (i+1) + " - Date=" + o);
|
|
||||||
}
|
|
||||||
else if (o instanceof Double)
|
|
||||||
{
|
|
||||||
pstmt.setDouble(i+1, (Double)o);
|
|
||||||
log.finest("#" + (i+1) + " - Double=" + o);
|
|
||||||
}
|
|
||||||
else if (o instanceof Float)
|
|
||||||
{
|
|
||||||
pstmt.setFloat(i+1, (Float)o);
|
|
||||||
log.finest("#" + (i+1) + " - Double=" + o);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Unknown Parameter Class=" + o.getClass());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (SQLException ex)
|
|
||||||
{
|
|
||||||
log.log(Level.SEVERE, "fillParametersFromVO", ex);
|
|
||||||
}
|
|
||||||
} // local_getPreparedStatement
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Result as RowSet for local system.
|
|
||||||
* Note that connection is closed when closing Oracle CachedRowSet!
|
|
||||||
* @return result as RowSet
|
|
||||||
**/
|
|
||||||
@Override
|
|
||||||
protected RowSet local_getRowSet()
|
|
||||||
{
|
|
||||||
log.finest("local_getRowSet");
|
|
||||||
|
|
||||||
RowSet rowSet = null;
|
|
||||||
ResultSet rs = null;
|
|
||||||
PreparedStatement pstmt = (PreparedStatement)p_stmt;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
fillParametersFromVO();
|
|
||||||
//
|
|
||||||
rs = pstmt.executeQuery();
|
|
||||||
rowSet = CCachedRowSet.getRowSet(rs);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
log.log(Level.SEVERE, p_vo.toString(), ex);
|
|
||||||
throw new RuntimeException (ex);
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
DB.close(rs);
|
|
||||||
}
|
|
||||||
return rowSet;
|
|
||||||
} // local_getRowSet
|
|
||||||
|
|
||||||
|
|
||||||
public void setAsciiStream(int parameterIndex, java.io.InputStream x, long length)
|
|
||||||
throws SQLException
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//uncomment the following methods to compile using jdk 6
|
|
||||||
//vpj-cd add support java 6
|
|
||||||
|
|
||||||
public void setBinaryStream(int parameterIndex, java.io.InputStream x,
|
|
||||||
long length) throws SQLException
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setCharacterStream(int parameterIndex,
|
|
||||||
java.io.Reader reader,
|
|
||||||
long length) throws SQLException
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setAsciiStream(int parameterIndex, java.io.InputStream x)
|
|
||||||
throws SQLException
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void setBinaryStream(int parameterIndex, java.io.InputStream x)
|
|
||||||
throws SQLException
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setCharacterStream(int parameterIndex,
|
|
||||||
java.io.Reader reader) throws SQLException
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setNCharacterStream(int parameterIndex, Reader value) throws SQLException
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setNCharacterStream(int parameterIndex, Reader value, long length) throws SQLException
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setClob(int parameterIndex, Reader reader)
|
|
||||||
throws SQLException
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setClob(int parameterIndex, Reader reader, long length)
|
|
||||||
throws SQLException
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setNClob(int parameterIndex, Reader reader, long length)
|
|
||||||
throws SQLException
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setNClob(int parameterIndex, Reader reader)
|
|
||||||
throws SQLException
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setNClob(int i,java.sql.NClob c)
|
|
||||||
throws SQLException
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setBlob(int parameterIndex, InputStream inputStream, long length)
|
|
||||||
throws SQLException
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void setBlob(int parameterIndex, InputStream inputStream)
|
|
||||||
throws SQLException
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setNString(int parameterIndex, String value) throws SQLException
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSQLXML(int parameterIndex, java.sql.SQLXML xmlObject) throws SQLException
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRowId(int parameterIndex, java.sql.RowId x) throws SQLException{}
|
|
||||||
|
|
||||||
|
|
||||||
} // CPreparedStatement
|
} // CPreparedStatement
|
||||||
|
|
||||||
|
|
|
@ -17,878 +17,46 @@
|
||||||
package org.compiere.util;
|
package org.compiere.util;
|
||||||
|
|
||||||
import java.sql.*;
|
import java.sql.*;
|
||||||
import java.util.logging.*;
|
|
||||||
|
|
||||||
import javax.sql.*;
|
import javax.sql.*;
|
||||||
|
|
||||||
import org.adempiere.exceptions.DBException;
|
|
||||||
import org.compiere.db.*;
|
|
||||||
import org.compiere.interfaces.*;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adempiere Statement
|
* Interface to wrap and extend Statement
|
||||||
|
* @author Low Heng Sin
|
||||||
*
|
*
|
||||||
* @author Jorg Janke
|
|
||||||
* @version $Id: CStatement.java,v 1.3 2006/07/30 00:54:36 jjanke Exp $
|
|
||||||
* ---
|
|
||||||
* Modifications: Handle connections properly
|
|
||||||
* Close the associated connection when the statement is closed
|
|
||||||
* Reason : Due to changes brought in the connection pooling whereby the system
|
|
||||||
* no more relies upon abandoned connections.
|
|
||||||
* @author Ashley Ramdass (Posterita)
|
|
||||||
*/
|
*/
|
||||||
public class CStatement implements Statement
|
public interface CStatement extends Statement
|
||||||
{
|
{
|
||||||
protected Connection m_conn = null;
|
|
||||||
|
|
||||||
private boolean close = false;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Prepared Statement Constructor
|
|
||||||
*
|
|
||||||
* @param resultSetType - ResultSet.TYPE_FORWARD_ONLY, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.TYPE_SCROLL_SENSITIVE
|
|
||||||
* @param resultSetConcurrency - ResultSet.CONCUR_READ_ONLY or ResultSet.CONCUR_UPDATABLE
|
|
||||||
* @param trxName transaction name or null
|
|
||||||
*/
|
|
||||||
public CStatement (int resultSetType, int resultSetConcurrency,
|
|
||||||
String trxName)
|
|
||||||
{
|
|
||||||
p_vo = new CStatementVO (resultSetType, resultSetConcurrency);
|
|
||||||
p_vo.setTrxName(trxName);
|
|
||||||
|
|
||||||
init();
|
|
||||||
} // CPreparedStatement
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialise the statement wrapper object
|
|
||||||
*/
|
|
||||||
protected void init()
|
|
||||||
{
|
|
||||||
//Local access
|
|
||||||
if (!DB.isRemoteObjects())
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Connection conn = null;
|
|
||||||
Trx trx = p_vo.getTrxName() == null ? null : Trx.get(p_vo.getTrxName(), true);
|
|
||||||
if (trx != null)
|
|
||||||
{
|
|
||||||
conn = trx.getConnection();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (p_vo.getResultSetConcurrency() == ResultSet.CONCUR_UPDATABLE)
|
|
||||||
m_conn = DB.getConnectionRW ();
|
|
||||||
else
|
|
||||||
m_conn = DB.getConnectionRO();
|
|
||||||
conn = m_conn;
|
|
||||||
}
|
|
||||||
if (conn == null)
|
|
||||||
throw new DBException("No Connection");
|
|
||||||
p_stmt = conn.createStatement(p_vo.getResultSetType(), p_vo.getResultSetConcurrency());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
catch (SQLException e)
|
|
||||||
{
|
|
||||||
log.log(Level.SEVERE, "CStatement", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Minimum Constructor for sub classes
|
|
||||||
*/
|
|
||||||
protected CStatement()
|
|
||||||
{
|
|
||||||
super();
|
|
||||||
} // CStatement
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remote Constructor
|
|
||||||
* @param vo value object
|
|
||||||
*/
|
|
||||||
public CStatement (CStatementVO vo)
|
|
||||||
{
|
|
||||||
p_vo = vo;
|
|
||||||
init();
|
|
||||||
} // CPreparedStatement
|
|
||||||
|
|
||||||
|
|
||||||
/** Logger */
|
|
||||||
protected transient CLogger log = CLogger.getCLogger (getClass());
|
|
||||||
/** Used if local */
|
|
||||||
protected transient Statement p_stmt = null;
|
|
||||||
/** Value Object */
|
|
||||||
protected CStatementVO p_vo = null;
|
|
||||||
/** Remote Errors */
|
|
||||||
protected int p_remoteErrors = 0;
|
|
||||||
/** Object to hold remote execute result **/
|
|
||||||
protected ExecuteResult executeResult;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Execute Query
|
|
||||||
* @param sql0 unconverted SQL to execute
|
|
||||||
* @return ResultSet or RowSet
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#executeQuery(String)
|
|
||||||
*/
|
|
||||||
public ResultSet executeQuery (String sql0) throws SQLException
|
|
||||||
{
|
|
||||||
// Convert SQL
|
|
||||||
p_vo.setSql(DB.getDatabase().convertStatement(sql0));
|
|
||||||
if (p_stmt != null) // local
|
|
||||||
return p_stmt.executeQuery(p_vo.getSql());
|
|
||||||
|
|
||||||
// Client -> remote sever
|
|
||||||
log.finest("server => " + p_vo + ", Remote=" + DB.isRemoteObjects());
|
|
||||||
try
|
|
||||||
{
|
|
||||||
boolean remote = DB.isRemoteObjects() && CConnection.get().isAppsServerOK(false);
|
|
||||||
if (remote && p_remoteErrors > 1)
|
|
||||||
remote = CConnection.get().isAppsServerOK(true);
|
|
||||||
if (remote)
|
|
||||||
{
|
|
||||||
Server server = CConnection.get().getServer();
|
|
||||||
if (server != null)
|
|
||||||
{
|
|
||||||
ResultSet rs = server.stmt_getRowSet (p_vo, SecurityToken.getInstance());
|
|
||||||
if (rs == null)
|
|
||||||
log.warning("ResultSet is null - " + p_vo);
|
|
||||||
else
|
|
||||||
p_remoteErrors = 0;
|
|
||||||
return rs;
|
|
||||||
}
|
|
||||||
log.log(Level.SEVERE, "AppsServer not found");
|
|
||||||
p_remoteErrors++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
log.log(Level.SEVERE, "AppsServer error", ex);
|
|
||||||
p_remoteErrors++;
|
|
||||||
if (ex instanceof SQLException)
|
|
||||||
throw (SQLException)ex;
|
|
||||||
else if (ex instanceof RuntimeException)
|
|
||||||
throw (RuntimeException)ex;
|
|
||||||
else
|
|
||||||
throw new RuntimeException(ex);
|
|
||||||
}
|
|
||||||
throw new IllegalStateException("Remote Connection - Application server not available");
|
|
||||||
} // executeQuery
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Execute Update
|
|
||||||
* @param sql0 unconverted sql
|
|
||||||
* @return no of updated rows
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#executeUpdate(String)
|
|
||||||
*/
|
|
||||||
public int executeUpdate (String sql0) throws SQLException
|
|
||||||
{
|
|
||||||
// Convert SQL
|
|
||||||
p_vo.setSql(DB.getDatabase().convertStatement(sql0));
|
|
||||||
if (p_stmt != null) // local
|
|
||||||
return p_stmt.executeUpdate (p_vo.getSql());
|
|
||||||
|
|
||||||
// Client -> remote sever
|
|
||||||
log.finest("server => " + p_vo + ", Remote=" + DB.isRemoteObjects());
|
|
||||||
try
|
|
||||||
{
|
|
||||||
boolean remote = DB.isRemoteObjects() && CConnection.get().isAppsServerOK(false);
|
|
||||||
if (remote && p_remoteErrors > 1)
|
|
||||||
remote = CConnection.get().isAppsServerOK(true);
|
|
||||||
if (remote)
|
|
||||||
{
|
|
||||||
Server server = CConnection.get().getServer();
|
|
||||||
if (server != null)
|
|
||||||
{
|
|
||||||
int result = server.stmt_executeUpdate(p_vo, SecurityToken.getInstance());
|
|
||||||
p_vo.clearParameters(); // re-use of result set
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
log.log(Level.SEVERE, "AppsServer not found");
|
|
||||||
p_remoteErrors++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
log.log(Level.SEVERE, "AppsServer error", ex);
|
|
||||||
p_remoteErrors++;
|
|
||||||
if (ex instanceof SQLException)
|
|
||||||
throw (SQLException)ex;
|
|
||||||
else if (ex instanceof RuntimeException)
|
|
||||||
throw (RuntimeException)ex;
|
|
||||||
else
|
|
||||||
throw new RuntimeException(ex);
|
|
||||||
}
|
|
||||||
throw new IllegalStateException("Remote Connection - Application server not available");
|
|
||||||
} // executeUpdate
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get Sql
|
* Get Sql
|
||||||
* @return sql
|
* @return sql
|
||||||
*/
|
*/
|
||||||
public String getSql()
|
public String getSql();
|
||||||
{
|
|
||||||
if (p_vo != null)
|
|
||||||
return p_vo.getSql();
|
|
||||||
return null;
|
|
||||||
} // getSql
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Connection
|
|
||||||
* @return connection for local - or null for remote
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#getConnection()
|
|
||||||
*/
|
|
||||||
public Connection getConnection () throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
return p_stmt.getConnection();
|
|
||||||
return null;
|
|
||||||
} // getConnection
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Commit (if local)
|
|
||||||
* @throws SQLException
|
|
||||||
*/
|
|
||||||
public void commit() throws SQLException
|
|
||||||
{
|
|
||||||
Connection conn = getConnection();
|
|
||||||
if (conn != null && !conn.getAutoCommit())
|
|
||||||
{
|
|
||||||
conn.commit();
|
|
||||||
log.fine("commit");
|
|
||||||
}
|
|
||||||
} // commit
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method executeUpdate
|
|
||||||
* @param sql0 String
|
|
||||||
* @param autoGeneratedKeys int
|
|
||||||
* @return int
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#executeUpdate(String, int)
|
|
||||||
*/
|
|
||||||
public int executeUpdate (String sql0, int autoGeneratedKeys) throws SQLException
|
|
||||||
{
|
|
||||||
p_vo.setSql(DB.getDatabase().convertStatement(sql0));
|
|
||||||
if (p_stmt != null)
|
|
||||||
return p_stmt.executeUpdate(p_vo.getSql(), autoGeneratedKeys);
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method executeUpdate() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method executeUpdate
|
|
||||||
* @param sql0 String
|
|
||||||
* @param columnIndexes int[]
|
|
||||||
* @return int
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#executeUpdate(String, int[])
|
|
||||||
*/
|
|
||||||
public int executeUpdate (String sql0, int[] columnIndexes) throws SQLException
|
|
||||||
{
|
|
||||||
p_vo.setSql(DB.getDatabase().convertStatement(sql0));
|
|
||||||
if (p_stmt != null)
|
|
||||||
return p_stmt.executeUpdate(p_vo.getSql(), columnIndexes);
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method executeUpdate() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method executeUpdate
|
|
||||||
* @param sql0 String
|
|
||||||
* @param columnNames String[]
|
|
||||||
* @return int
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#executeUpdate(String, String[])
|
|
||||||
*/
|
|
||||||
public int executeUpdate (String sql0, String[] columnNames) throws SQLException
|
|
||||||
{
|
|
||||||
p_vo.setSql(DB.getDatabase().convertStatement(sql0));
|
|
||||||
if (p_stmt != null)
|
|
||||||
return p_stmt.executeUpdate(p_vo.getSql(), columnNames);
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method executeUpdate() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method execute
|
|
||||||
* @param sql0 String
|
|
||||||
* @return boolean
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#execute(String)
|
|
||||||
*/
|
|
||||||
public boolean execute (String sql0) throws SQLException
|
|
||||||
{
|
|
||||||
p_vo.setSql(DB.getDatabase().convertStatement(sql0));
|
|
||||||
if (p_stmt != null)
|
|
||||||
return p_stmt.execute(p_vo.getSql());
|
|
||||||
|
|
||||||
return remote_execute();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method execute
|
|
||||||
* @param sql0 String
|
|
||||||
* @param autoGeneratedKeys int
|
|
||||||
* @return boolean
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#execute(String, int)
|
|
||||||
*/
|
|
||||||
public boolean execute (String sql0, int autoGeneratedKeys) throws SQLException
|
|
||||||
{
|
|
||||||
p_vo.setSql(DB.getDatabase().convertStatement(sql0));
|
|
||||||
if (p_stmt != null)
|
|
||||||
return p_stmt.execute(p_vo.getSql(), autoGeneratedKeys);
|
|
||||||
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method execute(sql, autoGeneratedKeys) not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method execute
|
|
||||||
* @param sql0 String
|
|
||||||
* @param columnIndexes int[]
|
|
||||||
* @return boolean
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#execute(String, int[])
|
|
||||||
*/
|
|
||||||
public boolean execute (String sql0, int[] columnIndexes) throws SQLException
|
|
||||||
{
|
|
||||||
p_vo.setSql(DB.getDatabase().convertStatement(sql0));
|
|
||||||
if (p_stmt != null)
|
|
||||||
return p_stmt.execute(p_vo.getSql(), columnIndexes);
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method execute(sql, columnIndexes) not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method execute
|
|
||||||
* @param sql0 String
|
|
||||||
* @param columnNames String[]
|
|
||||||
* @return boolean
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#execute(String, String[])
|
|
||||||
*/
|
|
||||||
public boolean execute (String sql0, String[] columnNames) throws SQLException
|
|
||||||
{
|
|
||||||
p_vo.setSql(DB.getDatabase().convertStatement(sql0));
|
|
||||||
if (p_stmt != null)
|
|
||||||
return p_stmt.execute(p_vo.getSql(), columnNames);
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method execute(sql, columnNames) not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
* Get Max Field Size
|
|
||||||
* @return field size
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#getMaxFieldSize()
|
|
||||||
*/
|
|
||||||
public int getMaxFieldSize () throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
return p_stmt.getMaxFieldSize();
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method getMaxFieldSize() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method setMaxFieldSize
|
|
||||||
* @param max int
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#setMaxFieldSize(int)
|
|
||||||
*/
|
|
||||||
public void setMaxFieldSize (int max) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
p_stmt.setMaxFieldSize(max);
|
|
||||||
else
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method setMaxFieldSize() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method getMaxRows
|
|
||||||
* @return int
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#getMaxRows()
|
|
||||||
*/
|
|
||||||
public int getMaxRows () throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
return p_stmt.getMaxRows();
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method getMaxRows() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method setMaxRows
|
|
||||||
* @param max int
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#setMaxRows(int)
|
|
||||||
*/
|
|
||||||
public void setMaxRows (int max) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
p_stmt.setMaxRows(max);
|
|
||||||
else
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method setMaxRows() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/*************************************************************************
|
|
||||||
* Add Batch
|
|
||||||
* @param sql sql
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#addBatch(String)
|
|
||||||
*/
|
|
||||||
public void addBatch (String sql) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
p_stmt.addBatch(sql);
|
|
||||||
else
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method addBatch() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method clearBatch
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#clearBatch()
|
|
||||||
*/
|
|
||||||
public void clearBatch () throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
p_stmt.clearBatch();
|
|
||||||
else
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method clearBatch() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method executeBatch
|
|
||||||
* @return int[]
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#executeBatch()
|
|
||||||
*/
|
|
||||||
public int[] executeBatch () throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
return p_stmt.executeBatch();
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method executeBatch() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method getMoreResults
|
|
||||||
* @param current int
|
|
||||||
* @return boolean
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#getMoreResults(int)
|
|
||||||
*/
|
|
||||||
public boolean getMoreResults (int current) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
return p_stmt.getMoreResults(current);
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method getMoreResults() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method getGeneratedKeys
|
|
||||||
* @return ResultSet
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#getGeneratedKeys()
|
|
||||||
*/
|
|
||||||
public ResultSet getGeneratedKeys () throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
return p_stmt.getGeneratedKeys();
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method getGeneratedKeys() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method getResultSetHoldability
|
|
||||||
* @return int
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#getResultSetHoldability()
|
|
||||||
*/
|
|
||||||
public int getResultSetHoldability () throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
return p_stmt.getResultSetHoldability();
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method getResultSetHoldability() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method setEscapeProcessing
|
|
||||||
* @param enable boolean
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#setEscapeProcessing(boolean)
|
|
||||||
*/
|
|
||||||
public void setEscapeProcessing (boolean enable) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
p_stmt.setEscapeProcessing(enable);
|
|
||||||
else
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method setEscapeProcessing() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method getQueryTimeout
|
|
||||||
* @return int
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#getQueryTimeout()
|
|
||||||
*/
|
|
||||||
public int getQueryTimeout () throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
return p_stmt.getQueryTimeout();
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method getQueryTimeout() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method setQueryTimeout
|
|
||||||
* @param seconds int
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#setQueryTimeout(int)
|
|
||||||
*/
|
|
||||||
public void setQueryTimeout (int seconds) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
p_stmt.setQueryTimeout (seconds);
|
|
||||||
else
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method setQueryTimeout() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method cancel
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#cancel()
|
|
||||||
*/
|
|
||||||
public void cancel () throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
p_stmt.cancel();
|
|
||||||
else
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method cancel() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method getWarnings
|
|
||||||
* @return SQLWarning
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#getWarnings()
|
|
||||||
*/
|
|
||||||
public SQLWarning getWarnings () throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
return p_stmt.getWarnings();
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method getWarnings() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method clearWarnings
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#clearWarnings()
|
|
||||||
*/
|
|
||||||
public void clearWarnings () throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
p_stmt.clearWarnings();
|
|
||||||
else
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method clearWarnings() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method setCursorName
|
|
||||||
* @param name String
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#setCursorName(String)
|
|
||||||
*/
|
|
||||||
public void setCursorName (String name) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
p_stmt.setCursorName(name);
|
|
||||||
else
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method setCursorName() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method getResultSet
|
|
||||||
* @return ResultSet
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#getResultSet()
|
|
||||||
*/
|
|
||||||
public ResultSet getResultSet () throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
return p_stmt.getResultSet();
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method getResultSet() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method getUpdateCount
|
|
||||||
* @return int
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#getUpdateCount()
|
|
||||||
*/
|
|
||||||
public int getUpdateCount () throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
return p_stmt.getUpdateCount();
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method getUpdateCount() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method getMoreResults
|
|
||||||
* @return boolean
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#getMoreResults()
|
|
||||||
*/
|
|
||||||
public boolean getMoreResults () throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
return p_stmt.getMoreResults();
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method getMoreResults() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method setFetchDirection
|
|
||||||
* @param direction int
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#setFetchDirection(int)
|
|
||||||
*/
|
|
||||||
public void setFetchDirection (int direction) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
p_stmt.setFetchDirection(direction);
|
|
||||||
else
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method setFetchDirection() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method getFetchDirection
|
|
||||||
* @return int
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#getFetchDirection()
|
|
||||||
*/
|
|
||||||
public int getFetchDirection () throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
return p_stmt.getFetchDirection();
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method getFetchDirection() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method setFetchSize
|
|
||||||
* @param rows int
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#setFetchSize(int)
|
|
||||||
*/
|
|
||||||
public void setFetchSize (int rows) throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
p_stmt.setFetchSize(rows);
|
|
||||||
else
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method setFetchSize() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method getFetchSize
|
|
||||||
* @return int
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#getFetchSize()
|
|
||||||
*/
|
|
||||||
public int getFetchSize () throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
return p_stmt.getFetchSize();
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method getFetchSize() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method getResultSetConcurrency
|
|
||||||
* @return int
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#getResultSetConcurrency()
|
|
||||||
*/
|
|
||||||
public int getResultSetConcurrency () throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
return p_stmt.getResultSetConcurrency();
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method getResultSetConcurrency() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method getResultSetType
|
|
||||||
* @return int
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#getResultSetType()
|
|
||||||
*/
|
|
||||||
public int getResultSetType () throws SQLException
|
|
||||||
{
|
|
||||||
if (p_stmt != null)
|
|
||||||
return p_stmt.getResultSetType();
|
|
||||||
throw new java.lang.UnsupportedOperationException ("Method getResultSetType() not yet implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Close
|
|
||||||
* @throws SQLException
|
|
||||||
* @see java.sql.Statement#close()
|
|
||||||
*/
|
|
||||||
public void close () throws SQLException
|
|
||||||
{
|
|
||||||
if (close) return;
|
|
||||||
|
|
||||||
try {
|
|
||||||
if (p_stmt != null)
|
|
||||||
{
|
|
||||||
p_stmt.close();
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
if (m_conn != null)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
m_conn.close();
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{}
|
|
||||||
}
|
|
||||||
m_conn = null;
|
|
||||||
close = true;
|
|
||||||
}
|
|
||||||
} // close
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @return boolean
|
|
||||||
* @throws SQLException
|
|
||||||
*/
|
|
||||||
protected boolean remote_execute() throws SQLException {
|
|
||||||
// Client -> remote sever
|
|
||||||
log.finest("server => " + p_vo + ", Remote=" + DB.isRemoteObjects());
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (DB.isRemoteObjects() && CConnection.get().isAppsServerOK(false))
|
|
||||||
{
|
|
||||||
Server server = CConnection.get().getServer();
|
|
||||||
if (server != null)
|
|
||||||
{
|
|
||||||
executeResult = server.stmt_execute(p_vo, SecurityToken.getInstance());
|
|
||||||
p_vo.clearParameters(); // re-use of result set
|
|
||||||
return executeResult.isFirstResult();
|
|
||||||
}
|
|
||||||
log.log(Level.SEVERE, "AppsServer not found");
|
|
||||||
}
|
|
||||||
throw new IllegalStateException("Remote Connection - Application server not available");
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
log.log(Level.SEVERE, "AppsServer error", ex);
|
|
||||||
if (ex instanceof SQLException)
|
|
||||||
throw (SQLException)ex;
|
|
||||||
else if (ex instanceof RuntimeException)
|
|
||||||
throw (RuntimeException)ex;
|
|
||||||
else
|
|
||||||
throw new RuntimeException(ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Execute Query
|
* Execute Query
|
||||||
* @return ResultSet or RowSet
|
* @return ResultSet or RowSet
|
||||||
* @throws SQLException
|
* @throws SQLException
|
||||||
* @see java.sql.PreparedStatement#executeQuery()
|
* @see java.sql.PreparedStatement#executeQuery()
|
||||||
*/
|
*/
|
||||||
public RowSet getRowSet()
|
public RowSet getRowSet();
|
||||||
{
|
|
||||||
if (p_stmt != null) // local
|
|
||||||
return local_getRowSet();
|
|
||||||
//
|
|
||||||
// Client -> remote sever
|
|
||||||
log.finest("server => " + p_vo + ", Remote=" + DB.isRemoteObjects());
|
|
||||||
try
|
|
||||||
{
|
|
||||||
boolean remote = DB.isRemoteObjects() && CConnection.get().isAppsServerOK(false);
|
|
||||||
if (remote && p_remoteErrors > 1)
|
|
||||||
remote = CConnection.get().isAppsServerOK(true);
|
|
||||||
if (remote)
|
|
||||||
{
|
|
||||||
Server server = CConnection.get().getServer();
|
|
||||||
if (server != null)
|
|
||||||
{
|
|
||||||
RowSet rs = server.stmt_getRowSet (p_vo, SecurityToken.getInstance());
|
|
||||||
p_vo.clearParameters(); // re-use of result set
|
|
||||||
if (rs == null)
|
|
||||||
log.warning("RowSet is null - " + p_vo);
|
|
||||||
else
|
|
||||||
p_remoteErrors = 0;
|
|
||||||
return rs;
|
|
||||||
}
|
|
||||||
log.log(Level.SEVERE, "AppsServer not found");
|
|
||||||
p_remoteErrors++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
log.log(Level.SEVERE, "AppsServer error", ex);
|
|
||||||
p_remoteErrors++;
|
|
||||||
if (ex instanceof RuntimeException)
|
|
||||||
throw (RuntimeException)ex;
|
|
||||||
else
|
|
||||||
throw new RuntimeException(ex);
|
|
||||||
}
|
|
||||||
throw new IllegalStateException("Remote Connection - Application server not available");
|
|
||||||
}
|
|
||||||
|
|
||||||
/*************************************************************************
|
/**
|
||||||
* Get Result as RowSet for Remote.
|
* @return boolean
|
||||||
* Note that close the oracle OracleCachedRowSet also close connection!
|
* @throws SQLException
|
||||||
* @return result as RowSet
|
|
||||||
*/
|
*/
|
||||||
protected RowSet local_getRowSet()
|
public boolean isClosed() throws SQLException;
|
||||||
{
|
|
||||||
log.finest("local_getRowSet");
|
|
||||||
RowSet rowSet = null;
|
|
||||||
ResultSet rs = null;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
rs = p_stmt.executeQuery(p_vo.getSql());
|
|
||||||
rowSet = CCachedRowSet.getRowSet(rs);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
log.log(Level.SEVERE, p_vo.toString(), ex);
|
|
||||||
throw new RuntimeException (ex);
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
DB.close(rs);
|
|
||||||
}
|
|
||||||
return rowSet;
|
|
||||||
} // local_getRowSet
|
|
||||||
|
|
||||||
public boolean isPoolable() throws SQLException{ return false;}
|
/**
|
||||||
|
*
|
||||||
public void setPoolable(boolean a) throws SQLException{};
|
* @throws SQLException
|
||||||
|
*/
|
||||||
public boolean isClosed() throws SQLException{ return close;}
|
public void commit() throws SQLException;
|
||||||
|
|
||||||
public boolean isWrapperFor(java.lang.Class c) throws SQLException{ return false;}
|
|
||||||
|
|
||||||
public <T> T unwrap(java.lang.Class<T> iface) throws java.sql.SQLException{return null;}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void finalize() throws Throwable
|
|
||||||
{
|
|
||||||
//hengsin: not the best way but it help to reduce connection and statement leakage.
|
|
||||||
if (p_stmt != null && !close)
|
|
||||||
{
|
|
||||||
this.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* don't call this directly, invoke by finalizer thread
|
||||||
|
* @throws Throwable
|
||||||
|
*/
|
||||||
|
public void finalize() throws Throwable;
|
||||||
} // CStatement
|
} // CStatement
|
||||||
|
|
|
@ -17,9 +17,6 @@
|
||||||
package org.compiere.util;
|
package org.compiere.util;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adempiere Statement Value Object
|
* Adempiere Statement Value Object
|
||||||
|
@ -61,15 +58,8 @@ public class CStatementVO implements Serializable
|
||||||
private int m_resultSetConcurrency;
|
private int m_resultSetConcurrency;
|
||||||
/** SQL Statement */
|
/** SQL Statement */
|
||||||
private String m_sql;
|
private String m_sql;
|
||||||
/** Parameters */
|
|
||||||
private ArrayList<Object> m_parameters = new ArrayList<Object>();
|
|
||||||
/** Transaction Name **/
|
/** Transaction Name **/
|
||||||
private String m_trxName = null;
|
private String m_trxName = null;
|
||||||
|
|
||||||
private Map<String, OutputParameter> m_namedOutput = new HashMap<String, OutputParameter>();
|
|
||||||
|
|
||||||
private Map<String, Object>m_namedParameters = new HashMap<String, Object>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* String representation
|
* String representation
|
||||||
* @return info
|
* @return info
|
||||||
|
@ -77,86 +67,13 @@ public class CStatementVO implements Serializable
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
StringBuffer sb = new StringBuffer("CStatementVO[");
|
StringBuffer sb = new StringBuffer("CStatementVO[");
|
||||||
sb.append(getSql());
|
sb.append("SQL="+getSql());
|
||||||
for (int i = 0; i < m_parameters.size(); i++)
|
if (m_trxName != null)
|
||||||
sb.append("; #").append(i+1).append("=").append(m_parameters.get(i));
|
sb.append(" TrxName=" + m_trxName);
|
||||||
sb.append("]");
|
sb.append("]");
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
} // toString
|
} // toString
|
||||||
|
|
||||||
/**
|
|
||||||
* Set Parameter
|
|
||||||
* @param index1 1 based index
|
|
||||||
* @param element element
|
|
||||||
*/
|
|
||||||
public void setParameter (int index1, Object element)
|
|
||||||
{
|
|
||||||
if (element != null && !(element instanceof Serializable))
|
|
||||||
throw new java.lang.RuntimeException("setParameter not Serializable - " + element.getClass().toString());
|
|
||||||
int zeroIndex = index1 - 1;
|
|
||||||
if (m_parameters.size() == zeroIndex)
|
|
||||||
{
|
|
||||||
m_parameters.add(element);
|
|
||||||
}
|
|
||||||
else if (m_parameters.size() < zeroIndex)
|
|
||||||
{
|
|
||||||
while (m_parameters.size() < zeroIndex)
|
|
||||||
m_parameters.add (null); // fill with nulls
|
|
||||||
m_parameters.add(element);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
m_parameters.set(zeroIndex, element);
|
|
||||||
} // setParameter
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set Parameter
|
|
||||||
* @param index1 1 based index
|
|
||||||
* @param element element
|
|
||||||
*/
|
|
||||||
public void setParameter (String name, Object element)
|
|
||||||
{
|
|
||||||
if (element != null && !(element instanceof Serializable))
|
|
||||||
throw new java.lang.RuntimeException("setParameter not Serializable - " + element.getClass().toString());
|
|
||||||
m_namedParameters.put(name, element);
|
|
||||||
} // setParametsr
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clear Parameters
|
|
||||||
*/
|
|
||||||
public void clearParameters()
|
|
||||||
{
|
|
||||||
m_parameters = new ArrayList<Object>();
|
|
||||||
m_namedParameters = new HashMap<String, Object>();
|
|
||||||
} // clearParameters
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Parameters
|
|
||||||
* @return arraylist
|
|
||||||
*/
|
|
||||||
public ArrayList<Object> getParameters()
|
|
||||||
{
|
|
||||||
return m_parameters;
|
|
||||||
} // getParameters
|
|
||||||
|
|
||||||
/***
|
|
||||||
* get named parameters for callable statement
|
|
||||||
* @return map
|
|
||||||
*/
|
|
||||||
public Map<String, Object> getNamedParameters()
|
|
||||||
{
|
|
||||||
return m_namedParameters;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Parameter Count
|
|
||||||
* @return arraylist
|
|
||||||
*/
|
|
||||||
public int getParameterCount()
|
|
||||||
{
|
|
||||||
return m_parameters.size();
|
|
||||||
} // getParameterCount
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get SQL
|
* Get SQL
|
||||||
* @return sql
|
* @return sql
|
||||||
|
@ -174,19 +91,7 @@ public class CStatementVO implements Serializable
|
||||||
*/
|
*/
|
||||||
public void setSql(String sql)
|
public void setSql(String sql)
|
||||||
{
|
{
|
||||||
if (sql != null && DB.isRemoteObjects())
|
m_sql = sql;
|
||||||
{
|
|
||||||
// Handle RowID in the select part (not where clause)
|
|
||||||
int pos = sql.indexOf("ROWID");
|
|
||||||
int posTrim = sql.indexOf("TRIM(ROWID)");
|
|
||||||
int posWhere = sql.indexOf("WHERE");
|
|
||||||
if (pos != -1 && posTrim == -1 && (posWhere == -1 || pos < posWhere))
|
|
||||||
m_sql = sql.substring(0, pos) + "TRIM(ROWID)" + sql.substring(pos+5);
|
|
||||||
else
|
|
||||||
m_sql = sql;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
m_sql = sql;
|
|
||||||
} // setSql
|
} // setSql
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -238,54 +143,4 @@ public class CStatementVO implements Serializable
|
||||||
{
|
{
|
||||||
m_trxName = trxName;
|
m_trxName = trxName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerOutParameter(String parameterName, int sqlType,
|
|
||||||
int scale)
|
|
||||||
{
|
|
||||||
OutputParameter o = new OutputParameter(sqlType, scale, null);
|
|
||||||
m_namedOutput.put(parameterName, o);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void registerOutParameter(int paramIndex, int sqlType,
|
|
||||||
String typeName)
|
|
||||||
{
|
|
||||||
OutputParameter o = new OutputParameter(sqlType, -1, typeName);
|
|
||||||
this.setParameter(paramIndex, o);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void registerOutParameter(int parameterIndex, int sqlType, int scale)
|
|
||||||
{
|
|
||||||
OutputParameter o = new OutputParameter(sqlType, scale, null);
|
|
||||||
this.setParameter(parameterIndex, o);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void registerOutParameter(String parameterName, int sqlType)
|
|
||||||
{
|
|
||||||
OutputParameter o = new OutputParameter(sqlType, -1, null);
|
|
||||||
m_namedOutput.put(parameterName, o);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void registerOutParameter(int parameterIndex, int sqlType)
|
|
||||||
{
|
|
||||||
OutputParameter o = new OutputParameter(sqlType, -1, null);
|
|
||||||
this.setParameter(parameterIndex, o);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void registerOutParameter(String parameterName, int sqlType,
|
|
||||||
String typeName)
|
|
||||||
{
|
|
||||||
OutputParameter o = new OutputParameter(sqlType, -1, typeName);
|
|
||||||
m_namedOutput.put(parameterName, o);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Map<String, OutputParameter> getNamedOutput()
|
|
||||||
{
|
|
||||||
return m_namedOutput;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
public boolean hasOutputParameters() {
|
|
||||||
return m_ordinalOutput.size() > 0 || m_namedOutput.size() > 0;
|
|
||||||
}*/
|
|
||||||
} // CStatementVO
|
} // CStatementVO
|
||||||
|
|
|
@ -168,24 +168,7 @@ public class CacheMgt
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
log.info(tableName + ": #" + counter + " (" + total + ")");
|
log.info(tableName + ": #" + counter + " (" + total + ")");
|
||||||
// Update Server
|
|
||||||
if (DB.isRemoteObjects())
|
|
||||||
{
|
|
||||||
Server server = CConnection.get().getServer();
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (server != null)
|
|
||||||
{ // See ServerBean
|
|
||||||
int serverTotal = server.cacheReset(tableName, 0);
|
|
||||||
if (CLogMgt.isLevelFinest())
|
|
||||||
log.fine("Server => " + serverTotal);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (RemoteException ex)
|
|
||||||
{
|
|
||||||
log.log(Level.SEVERE, "AppsServer error", ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return total;
|
return total;
|
||||||
} // reset
|
} // reset
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,7 @@ import org.compiere.Adempiere;
|
||||||
import org.compiere.db.AdempiereDatabase;
|
import org.compiere.db.AdempiereDatabase;
|
||||||
import org.compiere.db.CConnection;
|
import org.compiere.db.CConnection;
|
||||||
import org.compiere.db.Database;
|
import org.compiere.db.Database;
|
||||||
import org.compiere.db.ServerConnection;
|
import org.compiere.db.ProxyFactory;
|
||||||
import org.compiere.model.MAcctSchema;
|
import org.compiere.model.MAcctSchema;
|
||||||
import org.compiere.model.MLanguage;
|
import org.compiere.model.MLanguage;
|
||||||
import org.compiere.model.MRole;
|
import org.compiere.model.MRole;
|
||||||
|
@ -80,16 +80,6 @@ public final class DB
|
||||||
{
|
{
|
||||||
/** Connection Descriptor */
|
/** Connection Descriptor */
|
||||||
private static CConnection s_cc = null;
|
private static CConnection s_cc = null;
|
||||||
// /** Connection Cache r/o */
|
|
||||||
// private static Connection[] s_connections = null;
|
|
||||||
// /** Connection Cache Size */
|
|
||||||
// private static int s_conCacheSize = Ini.isClient() ? 1 : 3;
|
|
||||||
// /** Connection counter */
|
|
||||||
// private static int s_conCount = 0;
|
|
||||||
// /** Connection r/w */
|
|
||||||
// private static Connection s_connectionRW = null;
|
|
||||||
// /** Connection r/w for ID */
|
|
||||||
// private static Connection s_connectionID = null;
|
|
||||||
/** Logger */
|
/** Logger */
|
||||||
private static CLogger log = CLogger.getCLogger (DB.class);
|
private static CLogger log = CLogger.getCLogger (DB.class);
|
||||||
|
|
||||||
|
@ -262,8 +252,8 @@ public final class DB
|
||||||
{
|
{
|
||||||
s_cc = cc;
|
s_cc = cc;
|
||||||
}
|
}
|
||||||
if ( isRemoteObjects() == false)
|
|
||||||
s_cc.setDataSource();
|
s_cc.setDataSource();
|
||||||
|
|
||||||
log.config(s_cc + " - DS=" + s_cc.isDataSource());
|
log.config(s_cc + " - DS=" + s_cc.isDataSource());
|
||||||
// Trace.printStack();
|
// Trace.printStack();
|
||||||
|
@ -274,10 +264,6 @@ public final class DB
|
||||||
* @return True if success, false otherwise
|
* @return True if success, false otherwise
|
||||||
*/
|
*/
|
||||||
public static boolean connect() {
|
public static boolean connect() {
|
||||||
//wan and vpn profile ( remote connection )
|
|
||||||
if (isRemoteObjects())
|
|
||||||
return CConnection.get().isAppsServerOK(true);
|
|
||||||
|
|
||||||
//direct connection
|
//direct connection
|
||||||
boolean success =false;
|
boolean success =false;
|
||||||
try
|
try
|
||||||
|
@ -331,10 +317,6 @@ public final class DB
|
||||||
//bug [1637432]
|
//bug [1637432]
|
||||||
if (s_cc == null) return false;
|
if (s_cc == null) return false;
|
||||||
|
|
||||||
//wan/vpn profile ( remote connection )
|
|
||||||
if (CConnection.get().isServerObjects())
|
|
||||||
return s_cc.isAppsServerOK(createNew);
|
|
||||||
|
|
||||||
//direct connection
|
//direct connection
|
||||||
boolean success = false;
|
boolean success = false;
|
||||||
CLogErrorBuffer eb = CLogErrorBuffer.get(false);
|
CLogErrorBuffer eb = CLogErrorBuffer.get(false);
|
||||||
|
@ -408,10 +390,6 @@ public final class DB
|
||||||
*/
|
*/
|
||||||
public static Connection createConnection (boolean autoCommit, int trxLevel)
|
public static Connection createConnection (boolean autoCommit, int trxLevel)
|
||||||
{
|
{
|
||||||
//wan/vpn profile ( remote connection )
|
|
||||||
if (CConnection.get().isServerObjects())
|
|
||||||
return new ServerConnection();
|
|
||||||
|
|
||||||
Connection conn = s_cc.getConnection (autoCommit, trxLevel);
|
Connection conn = s_cc.getConnection (autoCommit, trxLevel);
|
||||||
if (CLogMgt.isLevelFinest())
|
if (CLogMgt.isLevelFinest())
|
||||||
{
|
{
|
||||||
|
@ -450,10 +428,6 @@ public final class DB
|
||||||
*/
|
*/
|
||||||
public static Connection createConnection (boolean autoCommit, boolean readOnly, int trxLevel)
|
public static Connection createConnection (boolean autoCommit, boolean readOnly, int trxLevel)
|
||||||
{
|
{
|
||||||
//wan/vpn profile ( remote connection )
|
|
||||||
if (CConnection.get().isServerObjects())
|
|
||||||
return new ServerConnection();
|
|
||||||
|
|
||||||
Connection conn = s_cc.getConnection (autoCommit, trxLevel);
|
Connection conn = s_cc.getConnection (autoCommit, trxLevel);
|
||||||
|
|
||||||
//hengsin: this could be problematic as it can be reuse for readwrite activites after return to pool
|
//hengsin: this could be problematic as it can be reuse for readwrite activites after return to pool
|
||||||
|
@ -703,7 +677,8 @@ public final class DB
|
||||||
{
|
{
|
||||||
if (SQL == null || SQL.length() == 0)
|
if (SQL == null || SQL.length() == 0)
|
||||||
throw new IllegalArgumentException("Required parameter missing - " + SQL);
|
throw new IllegalArgumentException("Required parameter missing - " + SQL);
|
||||||
return new CCallableStatement(ResultSet.TYPE_FORWARD_ONLY, resultSetConcurrency, SQL, trxName);
|
return ProxyFactory.newCCallableStatement(ResultSet.TYPE_FORWARD_ONLY, resultSetConcurrency, SQL,
|
||||||
|
trxName);
|
||||||
} // prepareCall
|
} // prepareCall
|
||||||
|
|
||||||
|
|
||||||
|
@ -765,7 +740,7 @@ public final class DB
|
||||||
if (sql == null || sql.length() == 0)
|
if (sql == null || sql.length() == 0)
|
||||||
throw new IllegalArgumentException("No SQL");
|
throw new IllegalArgumentException("No SQL");
|
||||||
//
|
//
|
||||||
return new CPreparedStatement(resultSetType, resultSetConcurrency, sql, trxName);
|
return ProxyFactory.newCPreparedStatement(resultSetType, resultSetConcurrency, sql, trxName);
|
||||||
} // prepareStatement
|
} // prepareStatement
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -786,7 +761,7 @@ public final class DB
|
||||||
*/
|
*/
|
||||||
public static Statement createStatement(int resultSetType, int resultSetConcurrency, String trxName)
|
public static Statement createStatement(int resultSetType, int resultSetConcurrency, String trxName)
|
||||||
{
|
{
|
||||||
return new CStatement(resultSetType, resultSetConcurrency, trxName);
|
return ProxyFactory.newCStatement(resultSetType, resultSetConcurrency, trxName);
|
||||||
} // createStatement
|
} // createStatement
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -943,7 +918,7 @@ public final class DB
|
||||||
throw new IllegalArgumentException("Required parameter missing - " + sql);
|
throw new IllegalArgumentException("Required parameter missing - " + sql);
|
||||||
//
|
//
|
||||||
int no = -1;
|
int no = -1;
|
||||||
CPreparedStatement cs = new CPreparedStatement(ResultSet.TYPE_FORWARD_ONLY,
|
CPreparedStatement cs = ProxyFactory.newCPreparedStatement(ResultSet.TYPE_FORWARD_ONLY,
|
||||||
ResultSet.CONCUR_UPDATABLE, sql, trxName); // converted in call
|
ResultSet.CONCUR_UPDATABLE, sql, trxName); // converted in call
|
||||||
|
|
||||||
try
|
try
|
||||||
|
@ -999,7 +974,7 @@ public final class DB
|
||||||
throw new IllegalArgumentException("Required parameter missing - " + sql);
|
throw new IllegalArgumentException("Required parameter missing - " + sql);
|
||||||
//
|
//
|
||||||
int no = -1;
|
int no = -1;
|
||||||
CPreparedStatement cs = new CPreparedStatement(ResultSet.TYPE_FORWARD_ONLY,
|
CPreparedStatement cs = ProxyFactory.newCPreparedStatement(ResultSet.TYPE_FORWARD_ONLY,
|
||||||
ResultSet.CONCUR_UPDATABLE, sql, trxName); // converted in call
|
ResultSet.CONCUR_UPDATABLE, sql, trxName); // converted in call
|
||||||
|
|
||||||
try
|
try
|
||||||
|
@ -1147,7 +1122,7 @@ public final class DB
|
||||||
// RowSet.TYPE_SCROLL_INSENSITIVE, RowSet.CONCUR_READ_ONLY, sql);
|
// RowSet.TYPE_SCROLL_INSENSITIVE, RowSet.CONCUR_READ_ONLY, sql);
|
||||||
CStatementVO info = new CStatementVO (RowSet.TYPE_SCROLL_INSENSITIVE, RowSet.CONCUR_READ_ONLY, DB.getDatabase().convertStatement(sql));
|
CStatementVO info = new CStatementVO (RowSet.TYPE_SCROLL_INSENSITIVE, RowSet.CONCUR_READ_ONLY, DB.getDatabase().convertStatement(sql));
|
||||||
// End add vpj-cd e-evolution
|
// End add vpj-cd e-evolution
|
||||||
CPreparedStatement stmt = new CPreparedStatement(info);
|
CPreparedStatement stmt = ProxyFactory.newCPreparedStatement(info);
|
||||||
retValue = stmt.getRowSet();
|
retValue = stmt.getRowSet();
|
||||||
try {
|
try {
|
||||||
stmt.close();
|
stmt.close();
|
||||||
|
@ -1622,25 +1597,27 @@ public final class DB
|
||||||
} // getDocumentNo
|
} // getDocumentNo
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Is this a remote client connection
|
* Is this a remote client connection.
|
||||||
|
*
|
||||||
|
* Deprecated, always return false.
|
||||||
* @return true if client and RMI or Objects on Server
|
* @return true if client and RMI or Objects on Server
|
||||||
|
* @deprecated
|
||||||
*/
|
*/
|
||||||
public static boolean isRemoteObjects()
|
public static boolean isRemoteObjects()
|
||||||
{
|
{
|
||||||
//avoid infinite loop
|
return false;
|
||||||
if (s_cc == null) return false;
|
|
||||||
|
|
||||||
return CConnection.get().isServerObjects();
|
|
||||||
} // isRemoteObjects
|
} // isRemoteObjects
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Is this a remote client connection
|
* Is this a remote client connection
|
||||||
|
*
|
||||||
|
* Deprecated, always return false.
|
||||||
* @return true if client and RMI or Process on Server
|
* @return true if client and RMI or Process on Server
|
||||||
|
* @deprecated
|
||||||
*/
|
*/
|
||||||
public static boolean isRemoteProcess()
|
public static boolean isRemoteProcess()
|
||||||
{
|
{
|
||||||
return CConnection.get().isServerProcess()
|
return false;
|
||||||
&& CConnection.get().isAppsServerOK(false);
|
|
||||||
} // isRemoteProcess
|
} // isRemoteProcess
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,87 +0,0 @@
|
||||||
/******************************************************************************
|
|
||||||
* Product: Adempiere ERP & CRM Smart Business Solution *
|
|
||||||
* Copyright (C) 2007 Adempiere, Inc. All Rights Reserved. *
|
|
||||||
* This program is free software; you can redistribute it and/or modify it *
|
|
||||||
* under the terms version 2 of the GNU General Public License as published *
|
|
||||||
* by the Free Software Foundation. This program is distributed in the hope *
|
|
||||||
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
|
|
||||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
|
|
||||||
* See the GNU General Public License for more details. *
|
|
||||||
* You should have received a copy of the GNU General Public License along *
|
|
||||||
* with this program; if not, write to the Free Software Foundation, Inc., *
|
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
|
|
||||||
*
|
|
||||||
* Copyright (C) 2007 Low Heng Sin hengsin@avantz.com
|
|
||||||
* _____________________________________________
|
|
||||||
*****************************************************************************/
|
|
||||||
package org.compiere.util;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.security.CodeSource;
|
|
||||||
import java.security.cert.Certificate;
|
|
||||||
|
|
||||||
import org.compiere.Adempiere;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Security token, send from client to server for security validation.
|
|
||||||
* @author Low Heng Sin
|
|
||||||
*/
|
|
||||||
public class SecurityToken implements Serializable {
|
|
||||||
|
|
||||||
private Certificate codeCertificate;
|
|
||||||
private String codeBaseHost;
|
|
||||||
private final static SecurityToken TOKEN = SecurityToken.getSecurityToken();
|
|
||||||
|
|
||||||
private SecurityToken(Certificate cert, String host)
|
|
||||||
{
|
|
||||||
codeCertificate = cert;
|
|
||||||
codeBaseHost = host;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the certificate that is use to sign the jar library.
|
|
||||||
* @return Certificate
|
|
||||||
*/
|
|
||||||
public final Certificate getCodeCertificate()
|
|
||||||
{
|
|
||||||
return codeCertificate;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the host that the code is loaded from.
|
|
||||||
* @return String
|
|
||||||
*/
|
|
||||||
public final String getCodeBaseHost()
|
|
||||||
{
|
|
||||||
return codeBaseHost;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Construct the application wide security token.
|
|
||||||
* @return SecurityToken
|
|
||||||
*/
|
|
||||||
private static SecurityToken getSecurityToken()
|
|
||||||
{
|
|
||||||
Certificate cert = null;
|
|
||||||
String host = null;
|
|
||||||
CodeSource cs
|
|
||||||
= SecurityToken.class.getProtectionDomain().getCodeSource();
|
|
||||||
if (cs != null)
|
|
||||||
{
|
|
||||||
Certificate[] certs = cs.getCertificates();
|
|
||||||
if (certs != null && certs.length > 0)
|
|
||||||
cert = certs[0];
|
|
||||||
}
|
|
||||||
host = Adempiere.getCodeBaseHost();
|
|
||||||
return new SecurityToken(cert, host);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the application wide security token.
|
|
||||||
* @return SecurityToken
|
|
||||||
*/
|
|
||||||
public static SecurityToken getInstance()
|
|
||||||
{
|
|
||||||
return TOKEN;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -19,7 +19,6 @@ package org.compiere.util;
|
||||||
import java.beans.PropertyChangeEvent;
|
import java.beans.PropertyChangeEvent;
|
||||||
import java.beans.PropertyVetoException;
|
import java.beans.PropertyVetoException;
|
||||||
import java.beans.VetoableChangeListener;
|
import java.beans.VetoableChangeListener;
|
||||||
import java.rmi.RemoteException;
|
|
||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.sql.Savepoint;
|
import java.sql.Savepoint;
|
||||||
|
@ -29,9 +28,6 @@ import java.util.UUID;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
import org.adempiere.exceptions.AdempiereException;
|
import org.adempiere.exceptions.AdempiereException;
|
||||||
import org.compiere.db.CConnection;
|
|
||||||
import org.compiere.db.ServerConnection;
|
|
||||||
import org.compiere.interfaces.Server;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Transaction Management.
|
* Transaction Management.
|
||||||
|
@ -125,9 +121,6 @@ public class Trx implements VetoableChangeListener
|
||||||
// log.info (trxName);
|
// log.info (trxName);
|
||||||
setTrxName (trxName);
|
setTrxName (trxName);
|
||||||
setConnection (con);
|
setConnection (con);
|
||||||
//create remote transaction immediately
|
|
||||||
if (DB.isRemoteObjects())
|
|
||||||
this.start();
|
|
||||||
} // Trx
|
} // Trx
|
||||||
|
|
||||||
/** Logger */
|
/** Logger */
|
||||||
|
@ -146,9 +139,6 @@ public class Trx implements VetoableChangeListener
|
||||||
public Connection getConnection()
|
public Connection getConnection()
|
||||||
{
|
{
|
||||||
log.log(Level.ALL, "Active=" + isActive() + ", Connection=" + m_connection);
|
log.log(Level.ALL, "Active=" + isActive() + ", Connection=" + m_connection);
|
||||||
//wan profile
|
|
||||||
if (DB.isRemoteObjects())
|
|
||||||
return new ServerConnection(getTrxName());
|
|
||||||
|
|
||||||
if (m_connection == null) // get new Connection
|
if (m_connection == null) // get new Connection
|
||||||
setConnection(DB.createConnection(false, Connection.TRANSACTION_READ_COMMITTED));
|
setConnection(DB.createConnection(false, Connection.TRANSACTION_READ_COMMITTED));
|
||||||
|
@ -208,9 +198,6 @@ public class Trx implements VetoableChangeListener
|
||||||
log.warning("Trx in progress " + m_trxName);
|
log.warning("Trx in progress " + m_trxName);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (DB.isRemoteObjects()) {
|
|
||||||
startRemoteTransaction();
|
|
||||||
}
|
|
||||||
m_active = true;
|
m_active = true;
|
||||||
m_startTime = System.currentTimeMillis();
|
m_startTime = System.currentTimeMillis();
|
||||||
return true;
|
return true;
|
||||||
|
@ -224,26 +211,6 @@ public class Trx implements VetoableChangeListener
|
||||||
return new Date(m_startTime);
|
return new Date(m_startTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void startRemoteTransaction() {
|
|
||||||
Server server = CConnection.get().getServer();
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (server != null)
|
|
||||||
{ // See ServerBean
|
|
||||||
server.startTransaction(getTrxName());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
log.log(Level.WARNING, "AppsServer not found");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (RemoteException ex)
|
|
||||||
{
|
|
||||||
log.log(Level.SEVERE, "AppsServer error", ex);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Transaction is Active
|
* Transaction is Active
|
||||||
* @return true if transaction active
|
* @return true if transaction active
|
||||||
|
@ -260,12 +227,6 @@ public class Trx implements VetoableChangeListener
|
||||||
*/
|
*/
|
||||||
public boolean rollback(boolean throwException) throws SQLException
|
public boolean rollback(boolean throwException) throws SQLException
|
||||||
{
|
{
|
||||||
//remote
|
|
||||||
if (DB.isRemoteObjects())
|
|
||||||
{
|
|
||||||
return remote_rollback(throwException);
|
|
||||||
}
|
|
||||||
|
|
||||||
//local
|
//local
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -310,12 +271,6 @@ public class Trx implements VetoableChangeListener
|
||||||
*/
|
*/
|
||||||
public boolean rollback(Savepoint savepoint) throws SQLException
|
public boolean rollback(Savepoint savepoint) throws SQLException
|
||||||
{
|
{
|
||||||
//remote
|
|
||||||
if (DB.isRemoteObjects())
|
|
||||||
{
|
|
||||||
return remote_rollback(savepoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
//local
|
//local
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -334,97 +289,6 @@ public class Trx implements VetoableChangeListener
|
||||||
return false;
|
return false;
|
||||||
} // rollback
|
} // rollback
|
||||||
|
|
||||||
/**
|
|
||||||
* Rollback a remote transaction
|
|
||||||
* @param throwException
|
|
||||||
* @return true if success, false otherwise
|
|
||||||
* @throws SQLException
|
|
||||||
*/
|
|
||||||
private boolean remote_rollback(boolean throwException) throws SQLException
|
|
||||||
{
|
|
||||||
Server server = CConnection.get().getServer();
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (server != null)
|
|
||||||
{ // See ServerBean
|
|
||||||
return server.rollback(m_trxName);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
log.log(Level.SEVERE, "AppsServer not found");
|
|
||||||
if (throwException)
|
|
||||||
throw new SQLException("AppsServer not found");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (RemoteException ex)
|
|
||||||
{
|
|
||||||
log.log(Level.SEVERE, "AppsServer error", ex);
|
|
||||||
if (throwException)
|
|
||||||
{
|
|
||||||
if (ex.getCause() instanceof RuntimeException)
|
|
||||||
{
|
|
||||||
RuntimeException r = (RuntimeException)ex.getCause();
|
|
||||||
if (r.getCause() instanceof SQLException)
|
|
||||||
throw (SQLException)r.getCause();
|
|
||||||
else if ( r.getCause() != null )
|
|
||||||
throw new SQLException("Application server exception - " + r.getCause().getMessage());
|
|
||||||
else
|
|
||||||
throw new SQLException("Application server exception - " + r.getMessage());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
throw new SQLException("Application server exception - " + ex.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Rollback a remote transaction
|
|
||||||
* @param throwException
|
|
||||||
* @return true if success, false otherwise
|
|
||||||
* @throws SQLException
|
|
||||||
*/
|
|
||||||
private boolean remote_rollback(Savepoint savepoint) throws SQLException
|
|
||||||
{
|
|
||||||
Server server = CConnection.get().getServer();
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (server != null)
|
|
||||||
{
|
|
||||||
SavepointVO sp = null;
|
|
||||||
if (savepoint instanceof SavepointVO)
|
|
||||||
sp = (SavepointVO)savepoint;
|
|
||||||
else
|
|
||||||
sp = new SavepointVO(savepoint);
|
|
||||||
return server.rollback(m_trxName, sp);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
log.log(Level.SEVERE, "AppsServer not found");
|
|
||||||
throw new SQLException("AppsServer not found");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (RemoteException ex)
|
|
||||||
{
|
|
||||||
log.log(Level.SEVERE, "AppsServer error", ex);
|
|
||||||
if (ex.getCause() instanceof RuntimeException)
|
|
||||||
{
|
|
||||||
RuntimeException r = (RuntimeException)ex.getCause();
|
|
||||||
if (r.getCause() instanceof SQLException)
|
|
||||||
throw (SQLException)r.getCause();
|
|
||||||
else if ( r.getCause() != null )
|
|
||||||
throw new SQLException("Application server exception - " + r.getCause().getMessage());
|
|
||||||
else
|
|
||||||
throw new SQLException("Application server exception - " + r.getMessage());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
throw new SQLException("Application server exception - " + ex.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/**
|
/**
|
||||||
* Commit
|
* Commit
|
||||||
* @param throwException if true, re-throws exception
|
* @param throwException if true, re-throws exception
|
||||||
|
@ -432,12 +296,6 @@ public class Trx implements VetoableChangeListener
|
||||||
**/
|
**/
|
||||||
public boolean commit(boolean throwException) throws SQLException
|
public boolean commit(boolean throwException) throws SQLException
|
||||||
{
|
{
|
||||||
//remote
|
|
||||||
if (DB.isRemoteObjects())
|
|
||||||
{
|
|
||||||
return remote_commit(throwException);
|
|
||||||
}
|
|
||||||
|
|
||||||
//local
|
//local
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -462,52 +320,6 @@ public class Trx implements VetoableChangeListener
|
||||||
return false;
|
return false;
|
||||||
} // commit
|
} // commit
|
||||||
|
|
||||||
/**
|
|
||||||
* Commit a remote transaction
|
|
||||||
* @param throwException
|
|
||||||
* @return true if success, false otherwise
|
|
||||||
* @throws SQLException
|
|
||||||
*/
|
|
||||||
private boolean remote_commit(boolean throwException) throws SQLException
|
|
||||||
{
|
|
||||||
Server server = CConnection.get().getServer();
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (server != null)
|
|
||||||
{ // See ServerBean
|
|
||||||
return server.commit(m_trxName);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
log.log(Level.SEVERE, "AppsServer not found");
|
|
||||||
if (throwException)
|
|
||||||
throw new SQLException("AppsServer not found");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (RemoteException ex)
|
|
||||||
{
|
|
||||||
log.log(Level.SEVERE, "AppsServer error", ex);
|
|
||||||
if (throwException)
|
|
||||||
{
|
|
||||||
if (ex.getCause() instanceof RuntimeException)
|
|
||||||
{
|
|
||||||
RuntimeException r = (RuntimeException)ex.getCause();
|
|
||||||
if (r.getCause() instanceof SQLException)
|
|
||||||
throw (SQLException)r.getCause();
|
|
||||||
else if ( r.getCause() != null )
|
|
||||||
throw new SQLException("Application server exception - " + r.getCause().getMessage());
|
|
||||||
else
|
|
||||||
throw new SQLException("Application server exception - " + r.getMessage());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
throw new SQLException("Application server exception - " + ex.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Commit
|
* Commit
|
||||||
* @return true if success
|
* @return true if success
|
||||||
|
@ -534,13 +346,6 @@ public class Trx implements VetoableChangeListener
|
||||||
if (s_cache != null)
|
if (s_cache != null)
|
||||||
s_cache.remove(getTrxName());
|
s_cache.remove(getTrxName());
|
||||||
|
|
||||||
//remote
|
|
||||||
if (DB.isRemoteObjects()) {
|
|
||||||
closeRemoteTransaction();
|
|
||||||
m_active = false;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
//local
|
//local
|
||||||
if (m_connection == null)
|
if (m_connection == null)
|
||||||
return true;
|
return true;
|
||||||
|
@ -563,26 +368,6 @@ public class Trx implements VetoableChangeListener
|
||||||
return true;
|
return true;
|
||||||
} // close
|
} // close
|
||||||
|
|
||||||
private void closeRemoteTransaction() {
|
|
||||||
Server server = CConnection.get().getServer();
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (server != null)
|
|
||||||
{ // See ServerBean
|
|
||||||
server.closeTransaction(getTrxName());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
log.log(Level.WARNING, "AppsServer not found");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (RemoteException ex)
|
|
||||||
{
|
|
||||||
log.log(Level.SEVERE, "AppsServer error", ex);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param name
|
* @param name
|
||||||
|
@ -590,12 +375,6 @@ public class Trx implements VetoableChangeListener
|
||||||
* @throws SQLException
|
* @throws SQLException
|
||||||
*/
|
*/
|
||||||
public Savepoint setSavepoint(String name) throws SQLException {
|
public Savepoint setSavepoint(String name) throws SQLException {
|
||||||
//remote
|
|
||||||
if (DB.isRemoteObjects())
|
|
||||||
{
|
|
||||||
return setRemoteSavepoint(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_connection == null)
|
if (m_connection == null)
|
||||||
getConnection();
|
getConnection();
|
||||||
|
|
||||||
|
@ -609,38 +388,6 @@ public class Trx implements VetoableChangeListener
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Savepoint setRemoteSavepoint(String name) throws SQLException {
|
|
||||||
Server server = CConnection.get().getServer();
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (server != null)
|
|
||||||
{ // See ServerBean
|
|
||||||
return server.setSavepoint(m_trxName, name);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
log.log(Level.SEVERE, "AppsServer not found");
|
|
||||||
throw new SQLException("AppsServer not found");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (RemoteException ex)
|
|
||||||
{
|
|
||||||
log.log(Level.SEVERE, "AppsServer error", ex);
|
|
||||||
if (ex.getCause() instanceof RuntimeException)
|
|
||||||
{
|
|
||||||
RuntimeException r = (RuntimeException)ex.getCause();
|
|
||||||
if (r.getCause() instanceof SQLException)
|
|
||||||
throw (SQLException)r.getCause();
|
|
||||||
else if ( r.getCause() != null )
|
|
||||||
throw new SQLException("Application server exception - " + r.getCause().getMessage());
|
|
||||||
else
|
|
||||||
throw new SQLException("Application server exception - " + r.getMessage());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
throw new SQLException("Application server exception - " + ex.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* String Representation
|
* String Representation
|
||||||
* @return info
|
* @return info
|
||||||
|
|
|
@ -873,46 +873,6 @@ public final class AEnv
|
||||||
log.info("Cached=" + mWindowVO);
|
log.info("Cached=" + mWindowVO);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// try to get from Server when enabled
|
|
||||||
if (mWindowVO == null && DB.isRemoteObjects() && isServerActive())
|
|
||||||
{
|
|
||||||
log.config("trying server");
|
|
||||||
try
|
|
||||||
{
|
|
||||||
s_server = CConnection.get().getServer();
|
|
||||||
if (s_server != null)
|
|
||||||
{
|
|
||||||
mWindowVO = s_server.getWindowVO(Env.getCtx(), WindowNo, AD_Window_ID, AD_Menu_ID);
|
|
||||||
log.config("from Server: success");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (RemoteException e)
|
|
||||||
{
|
|
||||||
log.log(Level.SEVERE, "(RE)", e);
|
|
||||||
mWindowVO = null;
|
|
||||||
s_server = null;
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
Throwable tt = e.getCause();
|
|
||||||
if (tt != null && tt instanceof InvalidClassException)
|
|
||||||
log.log(Level.SEVERE, "(Server<>Client class) " + tt);
|
|
||||||
else if (tt != null && tt instanceof NotSerializableException)
|
|
||||||
log.log(Level.SEVERE, "Serialization: " + tt.getMessage(), e);
|
|
||||||
else
|
|
||||||
log.log(Level.SEVERE, "ex", e);
|
|
||||||
mWindowVO = null;
|
|
||||||
s_server = null;
|
|
||||||
}
|
|
||||||
catch (Throwable t)
|
|
||||||
{
|
|
||||||
log.log(Level.SEVERE, t.toString());
|
|
||||||
mWindowVO = null;
|
|
||||||
s_server = null;
|
|
||||||
}
|
|
||||||
if (mWindowVO != null)
|
|
||||||
s_windows.put(AD_Window_ID, mWindowVO);
|
|
||||||
} // from Server
|
|
||||||
|
|
||||||
// Create Window Model on Client
|
// Create Window Model on Client
|
||||||
if (mWindowVO == null)
|
if (mWindowVO == null)
|
||||||
|
|
|
@ -363,25 +363,12 @@ public final class ALogin extends CDialog
|
||||||
|
|
||||||
private void validateAppServer() {
|
private void validateAppServer() {
|
||||||
m_cc.testAppsServer();
|
m_cc.testAppsServer();
|
||||||
if (m_cc.getAppsServerException() != null)
|
|
||||||
{
|
|
||||||
if (m_cc.isServerObjects())
|
|
||||||
{
|
|
||||||
m_cc.getAppsServerException().printStackTrace();
|
|
||||||
JOptionPane.showMessageDialog(null,
|
|
||||||
m_cc.getAppsServerException().getLocalizedMessage(),
|
|
||||||
"Error", JOptionPane.ERROR_MESSAGE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void connectToDatabase() {
|
private void connectToDatabase() {
|
||||||
//Check connection
|
//Check connection
|
||||||
DB.setDBTarget(m_cc);
|
DB.setDBTarget(m_cc);
|
||||||
|
|
||||||
//wan or vpn ( remote connection )
|
|
||||||
if (m_cc.isServerObjects()) return;
|
|
||||||
|
|
||||||
//direct
|
//direct
|
||||||
DB.connect();
|
DB.connect();
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,7 +42,6 @@ import org.compiere.util.DB;
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
import org.compiere.util.Ini;
|
import org.compiere.util.Ini;
|
||||||
import org.compiere.util.Msg;
|
import org.compiere.util.Msg;
|
||||||
import org.compiere.util.SecurityToken;
|
|
||||||
import org.compiere.util.Trx;
|
import org.compiere.util.Trx;
|
||||||
import org.compiere.wf.MWFProcess;
|
import org.compiere.wf.MWFProcess;
|
||||||
|
|
||||||
|
@ -551,7 +550,7 @@ public class ProcessCtl implements Runnable
|
||||||
{
|
{
|
||||||
log.fine(AD_Workflow_ID + " - " + m_pi);
|
log.fine(AD_Workflow_ID + " - " + m_pi);
|
||||||
boolean started = false;
|
boolean started = false;
|
||||||
if (DB.isRemoteProcess() || m_IsServerProcess)
|
if (m_IsServerProcess)
|
||||||
{
|
{
|
||||||
Server server = CConnection.get().getServer();
|
Server server = CConnection.get().getServer();
|
||||||
try
|
try
|
||||||
|
@ -604,15 +603,13 @@ public class ProcessCtl implements Runnable
|
||||||
} catch (Exception e) {}
|
} catch (Exception e) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((DB.isRemoteProcess() || m_IsServerProcess) && !clientOnly)
|
if (m_IsServerProcess && !clientOnly)
|
||||||
{
|
{
|
||||||
Server server = CConnection.get().getServer();
|
Server server = CConnection.get().getServer();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (server != null)
|
if (server != null)
|
||||||
{
|
{
|
||||||
if (m_trx != null)
|
|
||||||
m_pi.setTransactionName(m_trx.getTrxName());
|
|
||||||
// See ServerBean
|
// See ServerBean
|
||||||
m_pi = server.process (Env.getCtx(), m_pi);
|
m_pi = server.process (Env.getCtx(), m_pi);
|
||||||
log.finest("server => " + m_pi);
|
log.finest("server => " + m_pi);
|
||||||
|
@ -669,14 +666,14 @@ public class ProcessCtl implements Runnable
|
||||||
log.fine(ProcedureName + "(" + m_pi.getAD_PInstance_ID() + ")");
|
log.fine(ProcedureName + "(" + m_pi.getAD_PInstance_ID() + ")");
|
||||||
boolean started = false;
|
boolean started = false;
|
||||||
String trxName = m_trx != null ? m_trx.getTrxName() : null;
|
String trxName = m_trx != null ? m_trx.getTrxName() : null;
|
||||||
if (DB.isRemoteProcess() || m_IsServerProcess)
|
if (m_IsServerProcess)
|
||||||
{
|
{
|
||||||
Server server = CConnection.get().getServer();
|
Server server = CConnection.get().getServer();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (server != null)
|
if (server != null)
|
||||||
{ // See ServerBean
|
{ // See ServerBean
|
||||||
m_pi = server.dbProcess(m_pi, ProcedureName, trxName, SecurityToken.getInstance());
|
m_pi = server.dbProcess(m_pi, ProcedureName);
|
||||||
log.finest("server => " + m_pi);
|
log.finest("server => " + m_pi);
|
||||||
started = true;
|
started = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -108,34 +108,6 @@
|
||||||
destdir="${build.dir}/META-INF"/>
|
destdir="${build.dir}/META-INF"/>
|
||||||
<deploymentdescriptor destdir="${build.dir}/META-INF"/>
|
<deploymentdescriptor destdir="${build.dir}/META-INF"/>
|
||||||
</ejbdoclet>
|
</ejbdoclet>
|
||||||
|
|
||||||
<replace file="${build.dir}/META-INF/jboss.xml">
|
|
||||||
<replacetoken><![CDATA[<local-jndi-name>adempiere/ServerLocal</local-jndi-name>]]></replacetoken>
|
|
||||||
<replacevalue><![CDATA[
|
|
||||||
<local-jndi-name>adempiere/ServerLocal</local-jndi-name>
|
|
||||||
<invoker-bindings>
|
|
||||||
<invoker>
|
|
||||||
<invoker-proxy-binding-name>
|
|
||||||
stateless-http-invoker
|
|
||||||
</invoker-proxy-binding-name>
|
|
||||||
</invoker>
|
|
||||||
</invoker-bindings>
|
|
||||||
]]></replacevalue>
|
|
||||||
</replace>
|
|
||||||
|
|
||||||
<replace file="${build.dir}/META-INF/jboss.xml">
|
|
||||||
<replacetoken><![CDATA[<local-jndi-name>adempiere/StatusLocal</local-jndi-name>]]></replacetoken>
|
|
||||||
<replacevalue><![CDATA[
|
|
||||||
<local-jndi-name>adempiere/StatusLocal</local-jndi-name>
|
|
||||||
<invoker-bindings>
|
|
||||||
<invoker>
|
|
||||||
<invoker-proxy-binding-name>
|
|
||||||
stateless-http-invoker
|
|
||||||
</invoker-proxy-binding-name>
|
|
||||||
</invoker>
|
|
||||||
</invoker-bindings>
|
|
||||||
]]></replacevalue>
|
|
||||||
</replace>
|
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -16,16 +16,10 @@
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
package org.compiere.session;
|
package org.compiere.session;
|
||||||
|
|
||||||
import java.io.*;
|
|
||||||
import java.net.InetAddress;
|
|
||||||
import java.net.UnknownHostException;
|
|
||||||
import java.security.cert.Certificate;
|
|
||||||
import java.sql.*;
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.logging.*;
|
import java.util.logging.*;
|
||||||
|
|
||||||
import javax.ejb.*;
|
import javax.ejb.*;
|
||||||
import javax.sql.*;
|
|
||||||
|
|
||||||
import org.adempiere.util.ProcessUtil;
|
import org.adempiere.util.ProcessUtil;
|
||||||
import org.compiere.*;
|
import org.compiere.*;
|
||||||
|
@ -83,26 +77,6 @@ public class ServerBean implements SessionBean
|
||||||
private int m_cacheResetCount = 0;
|
private int m_cacheResetCount = 0;
|
||||||
private int m_updateLOBCount = 0;
|
private int m_updateLOBCount = 0;
|
||||||
|
|
||||||
/**
|
|
||||||
* Get and create Window Model Value Object
|
|
||||||
* @ejb.interface-method view-type="both"
|
|
||||||
*
|
|
||||||
* @param ctx Environment Properties
|
|
||||||
* @param WindowNo number of this window
|
|
||||||
* @param AD_Window_ID the internal number of the window, if not 0, AD_Menu_ID is ignored
|
|
||||||
* @param AD_Menu_ID ine internal menu number, used when AD_Window_ID is 0
|
|
||||||
* @return initialized Window Model
|
|
||||||
*/
|
|
||||||
public GridWindowVO getWindowVO (Properties ctx, int WindowNo, int AD_Window_ID, int AD_Menu_ID)
|
|
||||||
{
|
|
||||||
log.info ("getWindowVO[" + m_no + "] Window=" + AD_Window_ID);
|
|
||||||
// log.fine(ctx);
|
|
||||||
GridWindowVO vo = GridWindowVO.create(ctx, WindowNo, AD_Window_ID, AD_Menu_ID);
|
|
||||||
m_windowCount++;
|
|
||||||
return vo;
|
|
||||||
} // getWindowVO
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Post Immediate
|
* Post Immediate
|
||||||
* @ejb.interface-method view-type="both"
|
* @ejb.interface-method view-type="both"
|
||||||
|
@ -129,440 +103,6 @@ public class ServerBean implements SessionBean
|
||||||
return Doc.postImmediate(ass, AD_Table_ID, Record_ID, force, trxName);
|
return Doc.postImmediate(ass, AD_Table_ID, Record_ID, force, trxName);
|
||||||
} // postImmediate
|
} // postImmediate
|
||||||
|
|
||||||
/*************************************************************************
|
|
||||||
* Get Prepared Statement ResultSet
|
|
||||||
* @ejb.interface-method view-type="both"
|
|
||||||
*
|
|
||||||
* @param info Result info
|
|
||||||
* @param token Security Token
|
|
||||||
* @return RowSet
|
|
||||||
* @throws NotSerializableException
|
|
||||||
*/
|
|
||||||
public RowSet pstmt_getRowSet (CStatementVO info, SecurityToken token)
|
|
||||||
throws NotSerializableException
|
|
||||||
{
|
|
||||||
|
|
||||||
validateSecurityToken(token);
|
|
||||||
|
|
||||||
if (info.getTrxName() != null) {
|
|
||||||
if (Trx.get(info.getTrxName(), false) == null)
|
|
||||||
throw new RuntimeException("Transaction lost - " + info.getTrxName());
|
|
||||||
}
|
|
||||||
|
|
||||||
m_stmt_rowSetCount++;
|
|
||||||
CPreparedStatement pstmt = new CPreparedStatement(info);
|
|
||||||
RowSet rowset = null;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
rowset = pstmt.getRowSet();
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
pstmt.close();
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
log.log(Level.SEVERE, "Could not close prepared statement", ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return rowset;
|
|
||||||
} // pstmt_getRowSet
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Statement ResultSet
|
|
||||||
* @ejb.interface-method view-type="both"
|
|
||||||
*
|
|
||||||
* @param info Result info
|
|
||||||
* @param token Security Token
|
|
||||||
* @return RowSet
|
|
||||||
*/
|
|
||||||
public RowSet stmt_getRowSet (CStatementVO info, SecurityToken token)
|
|
||||||
{
|
|
||||||
validateSecurityToken(token);
|
|
||||||
|
|
||||||
if (info.getTrxName() != null) {
|
|
||||||
if (Trx.get(info.getTrxName(), false) == null)
|
|
||||||
throw new RuntimeException("Transaction lost - " + info.getTrxName());
|
|
||||||
}
|
|
||||||
m_stmt_rowSetCount++;
|
|
||||||
CPreparedStatement stmt = new CPreparedStatement(info);
|
|
||||||
RowSet rowset = null;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
rowset = stmt.getRowSet();
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
DB.close(stmt);
|
|
||||||
}
|
|
||||||
return rowset;
|
|
||||||
} // stmt_getRowSet
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Execute Update
|
|
||||||
* @ejb.interface-method view-type="both"
|
|
||||||
*
|
|
||||||
* @param info Result info
|
|
||||||
* @param token Security Token
|
|
||||||
* @return row count
|
|
||||||
*/
|
|
||||||
public int stmt_executeUpdate (CStatementVO info, SecurityToken token)
|
|
||||||
{
|
|
||||||
validateSecurityToken(token);
|
|
||||||
|
|
||||||
if (info.getTrxName() != null) {
|
|
||||||
if (Trx.get(info.getTrxName(), false) == null)
|
|
||||||
throw new RuntimeException("Transaction lost - " + info.getTrxName());
|
|
||||||
}
|
|
||||||
|
|
||||||
m_stmt_updateCount++;
|
|
||||||
CPreparedStatement stmt = null;
|
|
||||||
int retVal = -1;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
stmt = new CPreparedStatement(info);
|
|
||||||
if (info.getParameterCount() > 0)
|
|
||||||
stmt.fillParametersFromVO();
|
|
||||||
retVal = stmt.executeUpdate();
|
|
||||||
}
|
|
||||||
catch (SQLException e)
|
|
||||||
{
|
|
||||||
log.log(Level.SEVERE, info.toString(), e);
|
|
||||||
throw new RuntimeException (e);
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
DB.close(stmt);
|
|
||||||
}
|
|
||||||
return retVal;
|
|
||||||
} // stmt_executeUpdate
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @ejb.interface-method view-type="both"
|
|
||||||
*
|
|
||||||
* @param info
|
|
||||||
* @param token
|
|
||||||
* @return ExecuteResult
|
|
||||||
*/
|
|
||||||
public ExecuteResult stmt_execute( org.compiere.util.CStatementVO info,org.compiere.util.SecurityToken token )
|
|
||||||
{
|
|
||||||
ExecuteResult result = new ExecuteResult();
|
|
||||||
if (info.getTrxName() != null)
|
|
||||||
{
|
|
||||||
if (Trx.get(info.getTrxName(), false) == null)
|
|
||||||
throw new RuntimeException("Transaction lost - " + info.getTrxName());
|
|
||||||
}
|
|
||||||
|
|
||||||
CPreparedStatement stmt = null;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
stmt = new CPreparedStatement(info);
|
|
||||||
stmt.fillParametersFromVO();
|
|
||||||
boolean b = stmt.execute();
|
|
||||||
result.setFirstResult(b);
|
|
||||||
while (b)
|
|
||||||
{
|
|
||||||
ResultSet rs = stmt.getResultSet();
|
|
||||||
result.addResultSet(CCachedRowSet.getRowSet(rs));
|
|
||||||
rs.close();
|
|
||||||
b = stmt.getMoreResults();
|
|
||||||
}
|
|
||||||
result.setUpdateCount(stmt.getUpdateCount());
|
|
||||||
}
|
|
||||||
catch (SQLException e)
|
|
||||||
{
|
|
||||||
log.log(Level.SEVERE, info.toString(), e);
|
|
||||||
throw new RuntimeException (e);
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
DB.close(stmt);
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/***
|
|
||||||
* @ejb.interface-method view-type="both"
|
|
||||||
*
|
|
||||||
* @param info
|
|
||||||
* @param token
|
|
||||||
* @return CallableResult
|
|
||||||
*/
|
|
||||||
public CallableResult callable_execute( org.compiere.util.CStatementVO info,org.compiere.util.SecurityToken token )
|
|
||||||
{
|
|
||||||
CallableResult result = new CallableResult();
|
|
||||||
|
|
||||||
if (info.getTrxName() != null) {
|
|
||||||
if (Trx.get(info.getTrxName(), false) == null)
|
|
||||||
throw new RuntimeException("Transaction lost - " + info.getTrxName());
|
|
||||||
}
|
|
||||||
|
|
||||||
CCallableStatement stmt = null;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
stmt = new CCallableStatement(info);
|
|
||||||
stmt.fillParametersFromVO();
|
|
||||||
boolean b = stmt.execute();
|
|
||||||
result.setFirstResult(b);
|
|
||||||
|
|
||||||
//retrieve result set and update count
|
|
||||||
while (b) {
|
|
||||||
ResultSet rs = stmt.getResultSet();
|
|
||||||
result.addResultSet(CCachedRowSet.getRowSet(rs));
|
|
||||||
rs.close();
|
|
||||||
b = stmt.getMoreResults();
|
|
||||||
}
|
|
||||||
result.setUpdateCount(stmt.getUpdateCount());
|
|
||||||
|
|
||||||
//get ordinal outputparameter value
|
|
||||||
ArrayList ordinal = info.getParameters();
|
|
||||||
Map ordinalOutput = new HashMap();
|
|
||||||
for (int i = 0; i < ordinal.size(); i++)
|
|
||||||
{
|
|
||||||
Object o = ordinal.get(i);
|
|
||||||
if (o instanceof OutputParameter)
|
|
||||||
{
|
|
||||||
OutputParameter output = (OutputParameter)o;
|
|
||||||
retrieveOutputParameter(stmt, output, i+1, null);
|
|
||||||
ordinalOutput.put((i+1), o);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
result.setOrdinalOutput(ordinalOutput);
|
|
||||||
|
|
||||||
//get named output parameter value
|
|
||||||
Map named = info.getNamedOutput();
|
|
||||||
for (Iterator iter = named.entrySet().iterator(); iter.hasNext(); )
|
|
||||||
{
|
|
||||||
Map.Entry e = (Map.Entry)iter.next();
|
|
||||||
String s = (String)e.getKey();
|
|
||||||
OutputParameter output = (OutputParameter)e.getValue();
|
|
||||||
retrieveOutputParameter(stmt, output, -1, s);
|
|
||||||
}
|
|
||||||
result.setNamedOutput(named);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
log.log(Level.SEVERE, info.toString(), e);
|
|
||||||
throw new RuntimeException (e);
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
DB.close(stmt);
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void retrieveOutputParameter(CallableStatement stmt, OutputParameter o, int i, String s) throws SQLException
|
|
||||||
{
|
|
||||||
switch (o.getSqlType()) {
|
|
||||||
case Types.BIGINT:
|
|
||||||
if (i > 0)
|
|
||||||
o.setValue(stmt.getLong(i));
|
|
||||||
else
|
|
||||||
o.setValue(stmt.getLong(s));
|
|
||||||
break;
|
|
||||||
case Types.BINARY:
|
|
||||||
case Types.LONGVARBINARY:
|
|
||||||
case Types.VARBINARY:
|
|
||||||
if (i > 0)
|
|
||||||
o.setValue(stmt.getBytes(i));
|
|
||||||
else
|
|
||||||
o.setValue(stmt.getBytes(s));
|
|
||||||
break;
|
|
||||||
case Types.BOOLEAN:
|
|
||||||
if (i > 0)
|
|
||||||
o.setValue(stmt.getBoolean(i));
|
|
||||||
else
|
|
||||||
o.setValue(stmt.getBoolean(s));
|
|
||||||
break;
|
|
||||||
case Types.CHAR:
|
|
||||||
case Types.LONGVARCHAR:
|
|
||||||
case Types.VARCHAR:
|
|
||||||
if (i > 0)
|
|
||||||
o.setValue(stmt.getString(i));
|
|
||||||
else
|
|
||||||
o.setValue(stmt.getString(s));
|
|
||||||
break;
|
|
||||||
case Types.DATE:
|
|
||||||
if (i > 0)
|
|
||||||
o.setValue(stmt.getDate(i));
|
|
||||||
else
|
|
||||||
o.setValue(stmt.getDate(s));
|
|
||||||
break;
|
|
||||||
case Types.DECIMAL:
|
|
||||||
case Types.NUMERIC:
|
|
||||||
if (i > 0)
|
|
||||||
o.setValue(stmt.getBigDecimal(i));
|
|
||||||
else
|
|
||||||
o.setValue(stmt.getBigDecimal(s));
|
|
||||||
break;
|
|
||||||
case Types.DOUBLE:
|
|
||||||
if (i > 0)
|
|
||||||
o.setValue(stmt.getDouble(i));
|
|
||||||
else
|
|
||||||
o.setValue(stmt.getDouble(s));
|
|
||||||
break;
|
|
||||||
case Types.FLOAT:
|
|
||||||
case Types.REAL:
|
|
||||||
if (i > 0)
|
|
||||||
o.setValue(stmt.getFloat(i));
|
|
||||||
else
|
|
||||||
o.setValue(stmt.getFloat(s));
|
|
||||||
break;
|
|
||||||
case Types.INTEGER:
|
|
||||||
case Types.BIT:
|
|
||||||
if (i > 0)
|
|
||||||
o.setValue(stmt.getInt(i));
|
|
||||||
else
|
|
||||||
o.setValue(stmt.getInt(s));
|
|
||||||
break;
|
|
||||||
case Types.SMALLINT:
|
|
||||||
case Types.TINYINT:
|
|
||||||
if (i > 0)
|
|
||||||
o.setValue(stmt.getShort(i));
|
|
||||||
else
|
|
||||||
o.setValue(stmt.getShort(s));
|
|
||||||
break;
|
|
||||||
case Types.TIME:
|
|
||||||
if (i > 0)
|
|
||||||
o.setValue(stmt.getTime(i));
|
|
||||||
else
|
|
||||||
o.setValue(stmt.getTime(s));
|
|
||||||
break;
|
|
||||||
case Types.TIMESTAMP:
|
|
||||||
if (i > 0)
|
|
||||||
o.setValue(stmt.getTimestamp(i));
|
|
||||||
else
|
|
||||||
o.setValue(stmt.getTimestamp(s));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
try {
|
|
||||||
if (i > 0)
|
|
||||||
o.setValue((Serializable)stmt.getObject(i));
|
|
||||||
else
|
|
||||||
o.setValue((Serializable)stmt.getObject(s));
|
|
||||||
} catch (Throwable t) {}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*************************************************************************
|
|
||||||
* Get next number for Key column = 0 is Error.
|
|
||||||
* @ejb.interface-method view-type="both"
|
|
||||||
*
|
|
||||||
* @param AD_Client_ID client
|
|
||||||
* @param TableName table name
|
|
||||||
* @param trxName optional Transaction Name
|
|
||||||
* @return next no
|
|
||||||
*/
|
|
||||||
public int getNextID (int AD_Client_ID, String TableName, String trxName)
|
|
||||||
{
|
|
||||||
if (trxName != null) {
|
|
||||||
if (Trx.get(trxName, false) == null) {
|
|
||||||
throw new RuntimeException("Transaction lost - " + trxName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
int retValue = DB.getNextID (AD_Client_ID, TableName, trxName);
|
|
||||||
log.finer("[" + m_no + "] " + TableName + " = " + retValue);
|
|
||||||
m_nextSeqCount++;
|
|
||||||
return retValue;
|
|
||||||
} // getNextID
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Document No from table
|
|
||||||
* @ejb.interface-method view-type="both"
|
|
||||||
*
|
|
||||||
* @param AD_Client_ID client
|
|
||||||
* @param TableName table name
|
|
||||||
* @param trxName optional Transaction Name
|
|
||||||
* @return document no or null
|
|
||||||
*/
|
|
||||||
public String getDocumentNo (int AD_Client_ID, String TableName, String trxName)
|
|
||||||
{
|
|
||||||
if (trxName != null) {
|
|
||||||
if (Trx.get(trxName, false) == null) {
|
|
||||||
throw new RuntimeException("Transaction lost - " + trxName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
m_nextSeqCount++;
|
|
||||||
String dn = MSequence.getDocumentNo (AD_Client_ID, TableName, trxName);
|
|
||||||
if (dn == null) // try again
|
|
||||||
dn = MSequence.getDocumentNo (AD_Client_ID, TableName, trxName);
|
|
||||||
return dn;
|
|
||||||
} // GetDocumentNo
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Document No from table
|
|
||||||
* @ejb.interface-method view-type="both"
|
|
||||||
*
|
|
||||||
* @param AD_Client_ID client
|
|
||||||
* @param TableName table name
|
|
||||||
* @param trxName optional Transaction Name
|
|
||||||
* @param po
|
|
||||||
* @return document no or null
|
|
||||||
*/
|
|
||||||
public String getDocumentNo (int AD_Client_ID, String TableName, String trxName, PO po)
|
|
||||||
{
|
|
||||||
if (trxName != null) {
|
|
||||||
if (Trx.get(trxName, false) == null) {
|
|
||||||
throw new RuntimeException("Transaction lost - " + trxName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
m_nextSeqCount++;
|
|
||||||
String dn = MSequence.getDocumentNo (AD_Client_ID, TableName, trxName, po);
|
|
||||||
if (dn == null) // try again
|
|
||||||
dn = MSequence.getDocumentNo (AD_Client_ID, TableName, trxName, po);
|
|
||||||
return dn;
|
|
||||||
} // GetDocumentNo
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Document No based on Document Type
|
|
||||||
* @ejb.interface-method view-type="both"
|
|
||||||
*
|
|
||||||
* @param C_DocType_ID document type
|
|
||||||
* @param trxName optional Transaction Name
|
|
||||||
* @return document no or null
|
|
||||||
*/
|
|
||||||
public String getDocumentNo (int C_DocType_ID, String trxName, boolean definite)
|
|
||||||
{
|
|
||||||
if (trxName != null) {
|
|
||||||
if (Trx.get(trxName, false) == null) {
|
|
||||||
throw new RuntimeException("Transaction lost - " + trxName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
m_nextSeqCount++;
|
|
||||||
String dn = MSequence.getDocumentNo (C_DocType_ID, trxName, definite);
|
|
||||||
if (dn == null) // try again
|
|
||||||
dn = MSequence.getDocumentNo (C_DocType_ID, trxName, definite);
|
|
||||||
return dn;
|
|
||||||
} // getDocumentNo
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Document No based on Document Type
|
|
||||||
* @ejb.interface-method view-type="both"
|
|
||||||
*
|
|
||||||
* @param C_DocType_ID document type
|
|
||||||
* @param trxName optional Transaction Name
|
|
||||||
* @param po
|
|
||||||
* @return document no or null
|
|
||||||
*/
|
|
||||||
public String getDocumentNo (int C_DocType_ID, String trxName, boolean definite, PO po)
|
|
||||||
{
|
|
||||||
if (trxName != null) {
|
|
||||||
if (Trx.get(trxName, false) == null) {
|
|
||||||
throw new RuntimeException("Transaction lost - " + trxName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
m_nextSeqCount++;
|
|
||||||
String dn = MSequence.getDocumentNo (C_DocType_ID, trxName, definite, po);
|
|
||||||
if (dn == null) // try again
|
|
||||||
dn = MSequence.getDocumentNo (C_DocType_ID, trxName, definite, po);
|
|
||||||
return dn;
|
|
||||||
} // getDocumentNo
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* Process Remote
|
* Process Remote
|
||||||
* @ejb.interface-method view-type="both"
|
* @ejb.interface-method view-type="both"
|
||||||
|
@ -577,13 +117,7 @@ public class ServerBean implements SessionBean
|
||||||
m_processCount++;
|
m_processCount++;
|
||||||
|
|
||||||
// Start Process
|
// Start Process
|
||||||
String trxName = pi.getTransactionName();
|
String trxName = Trx.createTrxName("ServerPrc");
|
||||||
if (trxName != null) {
|
|
||||||
if (Trx.get(trxName, false) == null) {
|
|
||||||
throw new RuntimeException("Transaction lost - " + trxName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (trxName == null) trxName = Trx.createTrxName("ServerPrc");
|
|
||||||
Trx trx = Trx.get(trxName, true);
|
Trx trx = Trx.get(trxName, true);
|
||||||
ProcessUtil.startJavaProcess(ctx, pi, trx);
|
ProcessUtil.startJavaProcess(ctx, pi, trx);
|
||||||
return pi;
|
return pi;
|
||||||
|
@ -607,53 +141,6 @@ public class ServerBean implements SessionBean
|
||||||
return pi;
|
return pi;
|
||||||
} // workflow
|
} // workflow
|
||||||
|
|
||||||
/**
|
|
||||||
* Online Payment from Server
|
|
||||||
* @ejb.interface-method view-type="both"
|
|
||||||
* Called from MPayment processOnline
|
|
||||||
* @param ctx Context
|
|
||||||
* @param C_Payment_ID payment
|
|
||||||
* @param C_PaymentProcessor_ID processor
|
|
||||||
* @param trxName transaction
|
|
||||||
* @return true if approved
|
|
||||||
*/
|
|
||||||
public boolean paymentOnline (Properties ctx,
|
|
||||||
int C_Payment_ID, int C_PaymentProcessor_ID, String trxName)
|
|
||||||
{
|
|
||||||
if (trxName != null) {
|
|
||||||
if (Trx.get(trxName, false) == null) {
|
|
||||||
throw new RuntimeException("Transaction lost - " + trxName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
MPayment payment = new MPayment (ctx, C_Payment_ID, trxName);
|
|
||||||
MPaymentProcessor mpp = new MPaymentProcessor (ctx, C_PaymentProcessor_ID, null);
|
|
||||||
log.info ("[" + m_no + "] " + payment + " - " + mpp);
|
|
||||||
m_paymentCount++;
|
|
||||||
boolean approved = false;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
PaymentProcessor pp = PaymentProcessor.create(mpp, payment);
|
|
||||||
if (pp == null)
|
|
||||||
payment.setErrorMessage("No Payment Processor");
|
|
||||||
else
|
|
||||||
{
|
|
||||||
approved = pp.processCC ();
|
|
||||||
if (approved)
|
|
||||||
payment.setErrorMessage(null);
|
|
||||||
else
|
|
||||||
payment.setErrorMessage("From " + payment.getCreditCardName()
|
|
||||||
+ ": " + payment.getR_RespMsg());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
log.log(Level.SEVERE, "", e);
|
|
||||||
payment.setErrorMessage("Payment Processor Error");
|
|
||||||
}
|
|
||||||
payment.save();
|
|
||||||
return approved;
|
|
||||||
} // paymentOnline
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create EMail from Server (Request User)
|
* Create EMail from Server (Request User)
|
||||||
* @ejb.interface-method view-type="both"
|
* @ejb.interface-method view-type="both"
|
||||||
|
@ -705,7 +192,7 @@ public class ServerBean implements SessionBean
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create EMail from Server (Request User)
|
* Execute task on server
|
||||||
* @ejb.interface-method view-type="both"
|
* @ejb.interface-method view-type="both"
|
||||||
* @param AD_Task_ID task
|
* @param AD_Task_ID task
|
||||||
* @return execution trace
|
* @return execution trace
|
||||||
|
@ -732,113 +219,6 @@ public class ServerBean implements SessionBean
|
||||||
return CacheMgt.get().reset(tableName, Record_ID);
|
return CacheMgt.get().reset(tableName, Record_ID);
|
||||||
} // cacheReset
|
} // cacheReset
|
||||||
|
|
||||||
/**
|
|
||||||
* LOB update
|
|
||||||
* @ejb.interface-method view-type="both"
|
|
||||||
*
|
|
||||||
* @param sql table name
|
|
||||||
* @param displayType display type (i.e. BLOB/CLOB)
|
|
||||||
* @param value the data
|
|
||||||
* @param trxName
|
|
||||||
* @param token Security Token
|
|
||||||
* @return true if updated
|
|
||||||
*/
|
|
||||||
public boolean updateLOB (String sql, int displayType, Object value, String trxName, SecurityToken token)
|
|
||||||
{
|
|
||||||
validateSecurityToken(token);
|
|
||||||
|
|
||||||
if (sql == null || value == null)
|
|
||||||
{
|
|
||||||
log.fine("No sql or data");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
log.fine(sql);
|
|
||||||
|
|
||||||
Trx trx = null;
|
|
||||||
if (trxName != null && trxName.trim().length() > 0) {
|
|
||||||
trx = Trx.get(trxName, false);
|
|
||||||
if ( trx == null)
|
|
||||||
throw new RuntimeException("Transaction lost - " + trxName);
|
|
||||||
}
|
|
||||||
|
|
||||||
m_updateLOBCount++;
|
|
||||||
boolean success = true;
|
|
||||||
Connection con = trx != null ? trx.getConnection() : DB.createConnection(false, Connection.TRANSACTION_READ_COMMITTED);
|
|
||||||
PreparedStatement pstmt = null;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
pstmt = con.prepareStatement(sql);
|
|
||||||
if (displayType == DisplayType.TextLong)
|
|
||||||
pstmt.setString(1, (String)value);
|
|
||||||
else
|
|
||||||
pstmt.setBytes(1, (byte[])value);
|
|
||||||
int no = pstmt.executeUpdate();
|
|
||||||
//
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
log.log(Level.FINE, sql, e);
|
|
||||||
success = false;
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
DB.close(pstmt);
|
|
||||||
pstmt = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Success - commit local trx
|
|
||||||
if (success && trx == null)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
con.commit();
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
log.log(Level.SEVERE, "commit" , e);
|
|
||||||
success = false;
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
con.close();
|
|
||||||
} catch (SQLException e) {
|
|
||||||
}
|
|
||||||
con = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Error - roll back
|
|
||||||
if (!success)
|
|
||||||
{
|
|
||||||
log.severe ("rollback");
|
|
||||||
if ( trx == null)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
con.rollback();
|
|
||||||
}
|
|
||||||
catch (Exception ee)
|
|
||||||
{
|
|
||||||
log.log(Level.SEVERE, "rollback" , ee);
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
con.close();
|
|
||||||
} catch (SQLException e) {
|
|
||||||
}
|
|
||||||
con = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
trx.rollback();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return success;
|
|
||||||
} // updateLOB
|
|
||||||
|
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
* Describes the instance and its content for debugging purpose
|
* Describes the instance and its content for debugging purpose
|
||||||
* @ejb.interface-method view-type="both"
|
* @ejb.interface-method view-type="both"
|
||||||
|
@ -863,177 +243,21 @@ public class ServerBean implements SessionBean
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
} // getStatus
|
} // getStatus
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set savepoint
|
|
||||||
* @ejb.interface-method view-type="both"
|
|
||||||
* @param trxName
|
|
||||||
* @param savePointName
|
|
||||||
* @return true if success, false otherwise
|
|
||||||
*/
|
|
||||||
public SavepointVO setSavepoint(String trxName, String savePointName)
|
|
||||||
{
|
|
||||||
Trx trx = Trx.get(trxName, false);
|
|
||||||
if (trx != null)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Savepoint sp = null;
|
|
||||||
if (savePointName != null)
|
|
||||||
sp = trx.getConnection().setSavepoint(savePointName);
|
|
||||||
else
|
|
||||||
sp = trx.getConnection().setSavepoint();
|
|
||||||
return new SavepointVO(sp);
|
|
||||||
}
|
|
||||||
catch (SQLException e)
|
|
||||||
{
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Start remote transaction
|
|
||||||
* @ejb.interface-method view-type="both"
|
|
||||||
* @param trxName
|
|
||||||
*/
|
|
||||||
public void startTransaction(String trxName) {
|
|
||||||
Trx trx = Trx.get(trxName, true);
|
|
||||||
trx.start();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Close remote transaction
|
|
||||||
* @ejb.interface-method view-type="both"
|
|
||||||
* @param trxName
|
|
||||||
*/
|
|
||||||
public void closeTransaction(String trxName) {
|
|
||||||
Trx trx = Trx.get(trxName, false);
|
|
||||||
if (trx != null)
|
|
||||||
trx.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Commit the named transaction on server
|
|
||||||
* @ejb.interface-method view-type="both"
|
|
||||||
* @param trxName
|
|
||||||
* @return true if success, false otherwise
|
|
||||||
*/
|
|
||||||
public boolean commit(String trxName)
|
|
||||||
{
|
|
||||||
boolean success = false;
|
|
||||||
Trx trx = Trx.get(trxName, false);
|
|
||||||
if (trx != null)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
success = trx.commit(true);
|
|
||||||
}
|
|
||||||
catch (SQLException e)
|
|
||||||
{
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return success;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Rollback the named transaction on server
|
|
||||||
* @ejb.interface-method view-type="both"
|
|
||||||
* @param trxName
|
|
||||||
* @return true if success, false otherwise
|
|
||||||
*/
|
|
||||||
public boolean rollback(String trxName)
|
|
||||||
{
|
|
||||||
boolean success = false;
|
|
||||||
Trx trx = Trx.get(trxName, false);
|
|
||||||
if (trx != null)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
success = trx.rollback(true);
|
|
||||||
}
|
|
||||||
catch (SQLException e)
|
|
||||||
{
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return success;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Rollback the named transaction on server
|
|
||||||
* @ejb.interface-method view-type="both"
|
|
||||||
* @param trxName
|
|
||||||
* @return true if success, false otherwise
|
|
||||||
*/
|
|
||||||
public boolean rollback(String trxName, SavepointVO savePoint)
|
|
||||||
{
|
|
||||||
boolean success = false;
|
|
||||||
Trx trx = Trx.get(trxName, false);
|
|
||||||
if (trx != null)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
trx.getConnection().rollback(savePoint);
|
|
||||||
success = true;
|
|
||||||
}
|
|
||||||
catch (SQLException e)
|
|
||||||
{
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return success;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Execute db proces on server
|
* Execute db proces on server
|
||||||
* @ejb.interface-method view-type="both"
|
* @ejb.interface-method view-type="both"
|
||||||
* @param processInfo
|
* @param processInfo
|
||||||
* @param procedureName
|
* @param procedureName
|
||||||
* @param trxName
|
|
||||||
* @return ProcessInfo
|
* @return ProcessInfo
|
||||||
*/
|
*/
|
||||||
public ProcessInfo dbProcess(ProcessInfo processInfo, String procedureName, String trxName, SecurityToken token)
|
public ProcessInfo dbProcess(ProcessInfo processInfo, String procedureName)
|
||||||
{
|
{
|
||||||
validateSecurityToken(token);
|
String trxName = Trx.createTrxName("ServerDBPrc");
|
||||||
|
Trx trx = Trx.get(trxName, true);
|
||||||
Trx trx = null;
|
|
||||||
if (trxName != null) {
|
|
||||||
trx = Trx.get(trxName, false);
|
|
||||||
if (trx == null) {
|
|
||||||
throw new RuntimeException("Transaction lost - " + trxName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ProcessUtil.startDatabaseProcedure(processInfo, procedureName, trx);
|
ProcessUtil.startDatabaseProcedure(processInfo, procedureName, trx);
|
||||||
return processInfo;
|
return processInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Load fields meta data from database
|
|
||||||
* @ejb.interface-method view-type="both"
|
|
||||||
* @param gridTabVO
|
|
||||||
* @return ArrayList
|
|
||||||
*/
|
|
||||||
public ArrayList getFields(GridTabVO gridTabVO)
|
|
||||||
{
|
|
||||||
//this will load all fields meta data from database
|
|
||||||
return gridTabVO.getFields();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get table id from ad_table by table name
|
|
||||||
* @ejb.interface-method view-type="both"
|
|
||||||
* @ejb.permission unchecked="true"
|
|
||||||
* @param tableName
|
|
||||||
* @return tableName
|
|
||||||
*/
|
|
||||||
public int getTableID(String tableName)
|
|
||||||
{
|
|
||||||
return MTable.getTable_ID(tableName);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* String Representation
|
* String Representation
|
||||||
* @return info
|
* @return info
|
||||||
|
@ -1129,109 +353,13 @@ public class ServerBean implements SessionBean
|
||||||
System.out.println (s);
|
System.out.println (s);
|
||||||
} // dumpSVUID
|
} // dumpSVUID
|
||||||
|
|
||||||
/**
|
|
||||||
* Validate security token from client
|
|
||||||
* @param token
|
|
||||||
*/
|
|
||||||
private void validateSecurityToken(SecurityToken token)
|
|
||||||
{
|
|
||||||
if (Ini.isServerValidateSecurityToken())
|
|
||||||
{
|
|
||||||
checkCertificate(token);
|
|
||||||
checkCodeBaseHost(token);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Verify client code is sign with the same certificate as server
|
|
||||||
* @param token
|
|
||||||
*/
|
|
||||||
private void checkCertificate(SecurityToken token)
|
|
||||||
{
|
|
||||||
Certificate certs[] =
|
|
||||||
this.getClass().getProtectionDomain().getCodeSource().getCertificates();
|
|
||||||
if (certs != null && certs.length > 0)
|
|
||||||
{
|
|
||||||
if (!certs[0].equals(token.getCodeCertificate()))
|
|
||||||
throw new RuntimeException("Client not signed or not signed with the same certificate");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Verify client code is loaded from trusted server
|
|
||||||
* @param token
|
|
||||||
*/
|
|
||||||
private void checkCodeBaseHost(SecurityToken token)
|
|
||||||
{
|
|
||||||
InetAddress host = null;
|
|
||||||
try {
|
|
||||||
host = InetAddress.getLocalHost();
|
|
||||||
} catch (UnknownHostException e) {
|
|
||||||
}
|
|
||||||
String hostName = null;
|
|
||||||
String hostAddress = null;
|
|
||||||
if (host != null)
|
|
||||||
{
|
|
||||||
hostName = host.getHostName();
|
|
||||||
hostAddress = host.getHostAddress();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
hostName = "localhost";
|
|
||||||
hostAddress = "127.0.0.1";
|
|
||||||
}
|
|
||||||
if (!hostName.equals(token.getCodeBaseHost()) &&
|
|
||||||
!hostAddress.equals(token.getCodeBaseHost()))
|
|
||||||
{
|
|
||||||
throw new RuntimeException("Client code not originated from server.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Print UID of used classes.
|
* Print UID of used classes.
|
||||||
* R2.5.1h
|
* @param args ignored
|
||||||
|
|
||||||
org.compiere.process.ProcessInfo ==
|
|
||||||
static final long serialVersionUID = -1993220053515488725L;
|
|
||||||
|
|
||||||
org.compiere.util.CStatementVO ==
|
|
||||||
static final long serialVersionUID = -3393389471515956399L;
|
|
||||||
|
|
||||||
org.compiere.model.MQuery ==
|
|
||||||
static final long serialVersionUID = 1511402030597166113L;
|
|
||||||
|
|
||||||
org.compiere.model.POInfo ==
|
|
||||||
static final long serialVersionUID = -5976719579744948419L;
|
|
||||||
|
|
||||||
org.compiere.model.POInfoColumn ==
|
|
||||||
static final long serialVersionUID = -3983585608504631958L;
|
|
||||||
|
|
||||||
org.compiere.model.MWindowVO ==
|
|
||||||
static final long serialVersionUID = 3802628212531678981L;
|
|
||||||
|
|
||||||
org.compiere.model.MTabVO ==
|
|
||||||
static final long serialVersionUID = 9160212869277319305L;
|
|
||||||
|
|
||||||
org.compiere.model.MFieldVO ==
|
|
||||||
static final long serialVersionUID = 4385061125114436797L;
|
|
||||||
|
|
||||||
org.compiere.model.MLookupInfo ==
|
|
||||||
static final long serialVersionUID = -7958664359250070233L;
|
|
||||||
|
|
||||||
*
|
|
||||||
* * @param args ignored
|
|
||||||
*/
|
*/
|
||||||
public static void main (String[] args)
|
public static void main (String[] args)
|
||||||
{
|
{
|
||||||
dumpSVUID(ProcessInfo.class);
|
dumpSVUID(ProcessInfo.class);
|
||||||
dumpSVUID(CStatementVO.class);
|
|
||||||
dumpSVUID(MQuery.class);
|
|
||||||
dumpSVUID(POInfo.class);
|
|
||||||
dumpSVUID(POInfoColumn.class);
|
|
||||||
dumpSVUID(GridWindowVO.class);
|
|
||||||
dumpSVUID(GridTabVO.class);
|
|
||||||
dumpSVUID(GridFieldVO.class);
|
|
||||||
dumpSVUID(MLookupInfo.class);
|
|
||||||
} // main
|
} // main
|
||||||
|
|
||||||
} // ServerBean
|
} // ServerBean
|
||||||
|
|
|
@ -364,46 +364,6 @@ public final class AEnv
|
||||||
log.info("Cached=" + mWindowVO);
|
log.info("Cached=" + mWindowVO);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// try to get from Server when enabled
|
|
||||||
if (mWindowVO == null && DB.isRemoteObjects() && isServerActive())
|
|
||||||
{
|
|
||||||
log.config("trying server");
|
|
||||||
try
|
|
||||||
{
|
|
||||||
s_server = CConnection.get().getServer();
|
|
||||||
if (s_server != null)
|
|
||||||
{
|
|
||||||
mWindowVO = s_server.getWindowVO(Env.getCtx(), WindowNo, AD_Window_ID, AD_Menu_ID);
|
|
||||||
log.config("from Server: success");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (RemoteException e)
|
|
||||||
{
|
|
||||||
log.log(Level.SEVERE, "(RE)", e);
|
|
||||||
mWindowVO = null;
|
|
||||||
s_server = null;
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
Throwable tt = e.getCause();
|
|
||||||
if (tt != null && tt instanceof InvalidClassException)
|
|
||||||
log.log(Level.SEVERE, "(Server<>Client class) " + tt);
|
|
||||||
else if (tt != null && tt instanceof NotSerializableException)
|
|
||||||
log.log(Level.SEVERE, "Serialization: " + tt.getMessage(), e);
|
|
||||||
else
|
|
||||||
log.log(Level.SEVERE, "ex", e);
|
|
||||||
mWindowVO = null;
|
|
||||||
s_server = null;
|
|
||||||
}
|
|
||||||
catch (Throwable t)
|
|
||||||
{
|
|
||||||
log.log(Level.SEVERE, t.toString());
|
|
||||||
mWindowVO = null;
|
|
||||||
s_server = null;
|
|
||||||
}
|
|
||||||
if (mWindowVO != null)
|
|
||||||
s_windows.put(AD_Window_ID, mWindowVO);
|
|
||||||
} // from Server
|
|
||||||
|
|
||||||
// Create Window Model on Client
|
// Create Window Model on Client
|
||||||
if (mWindowVO == null)
|
if (mWindowVO == null)
|
||||||
|
|
Loading…
Reference in New Issue