/******************************************************************************* | |
* Copyright (c) 1998, 2013 Oracle and/or its affiliates. All rights reserved. | |
* This program and the accompanying materials are made available under the | |
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 | |
* which accompanies this distribution. | |
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html | |
* and the Eclipse Distribution License is available at | |
* http://www.eclipse.org/org/documents/edl-v10.php. | |
* | |
* Contributors: | |
* Oracle - initial API and implementation from Oracle TopLink | |
******************************************************************************/ | |
package org.eclipse.persistence.testing.tests.sessionsxml; | |
import java.io.File; | |
import java.io.FileReader; | |
import java.io.FileWriter; | |
import java.util.Vector; | |
import org.eclipse.persistence.oxm.XMLContext; | |
import org.eclipse.persistence.oxm.XMLUnmarshaller; | |
import org.eclipse.persistence.testing.framework.AutoVerifyTestCase; | |
import org.eclipse.persistence.testing.framework.TestErrorException; | |
import org.eclipse.persistence.internal.sessions.factories.*; | |
import org.eclipse.persistence.internal.sessions.factories.model.SessionConfigs; | |
import org.eclipse.persistence.internal.sessions.factories.model.log.DefaultSessionLogConfig; | |
import org.eclipse.persistence.internal.sessions.factories.model.login.DatabaseLoginConfig; | |
import org.eclipse.persistence.internal.sessions.factories.model.platform.CustomServerPlatformConfig; | |
import org.eclipse.persistence.internal.sessions.factories.model.platform.ServerPlatformConfig; | |
import org.eclipse.persistence.internal.sessions.factories.model.pool.PoolsConfig; | |
import org.eclipse.persistence.internal.sessions.factories.model.pool.ReadConnectionPoolConfig; | |
import org.eclipse.persistence.internal.sessions.factories.model.pool.WriteConnectionPoolConfig; | |
import org.eclipse.persistence.internal.sessions.factories.model.project.ProjectClassConfig; | |
import org.eclipse.persistence.internal.sessions.factories.model.property.PropertyConfig; | |
import org.eclipse.persistence.internal.sessions.factories.model.rcm.RemoteCommandManagerConfig; | |
import org.eclipse.persistence.internal.sessions.factories.model.session.DatabaseSessionConfig; | |
import org.eclipse.persistence.internal.sessions.factories.model.session.ServerSessionConfig; | |
import org.eclipse.persistence.internal.sessions.factories.model.transport.JMSTopicTransportManagerConfig; | |
import org.eclipse.persistence.internal.sessions.factories.model.transport.naming.JNDINamingServiceConfig; | |
/** | |
* Tests the OX writing portion of the XMLSessionConfig model. | |
* | |
* @author Guy Pelletier | |
* @version 1.0 | |
* @date November 18, 2003 | |
*/ | |
public class SessionsXMLSchemaWriteTest extends AutoVerifyTestCase { | |
private File m_resource; | |
private DatabaseSessionConfig m_session; | |
public SessionsXMLSchemaWriteTest() { | |
setDescription("Test the writing portion of the session xml against the XML Schema"); | |
} | |
public void reset() { | |
} | |
protected void setup() throws Exception { | |
m_resource = new File("XMLSchemaWriteTest.xml"); | |
SessionConfigs sessions = new SessionConfigs(); | |
DatabaseSessionConfig dbSessionConfig = new DatabaseSessionConfig(); | |
// Exception handler class | |
dbSessionConfig.setExceptionHandlerClass("handlerClass"); | |
// CustomServerPlatformConfid & External transaction controller | |
CustomServerPlatformConfig platformConfig = new CustomServerPlatformConfig(); | |
platformConfig.setExternalTransactionControllerClass("externalTransactionController"); | |
dbSessionConfig.setServerPlatformConfig(platformConfig); | |
// Log config | |
DefaultSessionLogConfig logConfig = new DefaultSessionLogConfig(); | |
logConfig.setLogLevel("severe"); | |
logConfig.setFilename("logfile"); | |
dbSessionConfig.setLogConfig(logConfig); | |
// Login | |
DatabaseLoginConfig loginConfig = new DatabaseLoginConfig(); | |
loginConfig.setBatchWriting(true); | |
loginConfig.setBindAllParameters(true); | |
loginConfig.setByteArrayBinding(false); | |
loginConfig.setCacheAllStatements(false); | |
loginConfig.setConnectionURL("jdbc:oracle:thin:@otl-ora8infmx73:1521:toplinkj"); | |
loginConfig.setDriverClass("oracle.jdbc.OracleDriver"); | |
loginConfig.setExternalConnectionPooling(false); | |
loginConfig.setExternalTransactionController(false); | |
loginConfig.setForceFieldNamesToUppercase(false); | |
loginConfig.setJdbcBatchWriting(false); | |
loginConfig.setMaxBatchWritingSize(new Integer(5)); | |
loginConfig.setNativeSequencing(false); | |
loginConfig.setNativeSQL(false); | |
loginConfig.setOptimizeDataConversion(true); | |
loginConfig.setPassword("password"); | |
loginConfig.setPlatformClass("platform"); | |
loginConfig.setSequenceCounterField("SEQ_COUNT"); | |
loginConfig.setSequenceNameField("SEQ_NAME"); | |
loginConfig.setSequencePreallocationSize(new Integer(99)); | |
loginConfig.setSequenceTable("\"SEQUENCE\""); | |
loginConfig.setStreamsForBinding(false); | |
loginConfig.setStringBinding(false); | |
loginConfig.setTableQualifier("table:"); | |
loginConfig.setTrimStrings(true); | |
loginConfig.setUsername("tljtest1"); | |
dbSessionConfig.setLoginConfig(loginConfig); | |
// Name | |
dbSessionConfig.setName("EmployeeSession"); | |
// Profiler | |
dbSessionConfig.setProfiler("toplink"); | |
// Primary project | |
ProjectClassConfig projectConfig = new ProjectClassConfig(); | |
projectConfig.setProjectString("org.eclipse.persistence.demos.employee.relational.EmployeeProject"); | |
dbSessionConfig.setPrimaryProject(projectConfig); | |
// Remote command manager | |
RemoteCommandManagerConfig rcmConfig = new RemoteCommandManagerConfig(); | |
rcmConfig.setChannel("new_channel"); | |
// Transport Manager | |
JMSTopicTransportManagerConfig transportConfig = new JMSTopicTransportManagerConfig(); | |
transportConfig.setOnConnectionError("KeepConnection"); | |
transportConfig.setTopicHostURL("ormi://jms_topic_host"); | |
transportConfig.setTopicConnectionFactoryName("test-topic-connection-factory-name"); | |
transportConfig.setTopicName("test-topic-name"); | |
// Naming | |
JNDINamingServiceConfig namingConfig = new JNDINamingServiceConfig(); | |
namingConfig.setURL("new_jndi_url"); | |
namingConfig.setUsername("guy"); | |
namingConfig.setPassword("password"); | |
namingConfig.setInitialContextFactoryName("new_initial_context_factory_name"); | |
Vector props = new Vector(); | |
PropertyConfig one = new PropertyConfig(); | |
one.setName("name1"); | |
one.setValue("value1"); | |
props.add(one); | |
PropertyConfig two = new PropertyConfig(); | |
two.setName("name2"); | |
two.setValue("value2"); | |
props.add(two); | |
namingConfig.setPropertyConfigs(props); | |
transportConfig.setJNDINamingServiceConfig(namingConfig); | |
rcmConfig.setTransportManagerConfig(transportConfig); | |
dbSessionConfig.setRemoteCommandManagerConfig(rcmConfig); | |
// Session customizer | |
dbSessionConfig.setSessionCustomizerClass("sessionCustomizer"); | |
sessions.addSessionConfig(dbSessionConfig); | |
ServerSessionConfig serverSessionConfig = new ServerSessionConfig(); | |
serverSessionConfig.setPoolsConfig(new PoolsConfig()); | |
ReadConnectionPoolConfig readPool = new ReadConnectionPoolConfig(); | |
readPool.setMaxConnections(new Integer(2)); | |
readPool.setMinConnections(new Integer(2)); | |
serverSessionConfig.getPoolsConfig().setReadConnectionPoolConfig(readPool); | |
WriteConnectionPoolConfig writePool = new WriteConnectionPoolConfig(); | |
writePool.setMaxConnections(new Integer(10)); | |
writePool.setMinConnections(new Integer(5)); | |
serverSessionConfig.getPoolsConfig().setWriteConnectionPoolConfig(writePool); | |
WriteConnectionPoolConfig userPool = new WriteConnectionPoolConfig(); | |
userPool.setMaxConnections(new Integer(5)); | |
userPool.setMinConnections(new Integer(0)); | |
serverSessionConfig.getPoolsConfig().addConnectionPoolConfig(userPool); | |
sessions.addSessionConfig(serverSessionConfig); | |
FileWriter writer = new FileWriter(m_resource); | |
XMLSessionConfigWriter.write(sessions, writer); | |
writer.close(); | |
} | |
public void test() { | |
try { | |
FileReader reader = new FileReader(m_resource); | |
// XMLSessionConfigWriter uses the latest version of XMLSessionConfigProject to write; | |
// therefore the latest version of XMLSessionConfigWriter should be used for reading, too. | |
XMLContext context = new XMLContext(new XMLSessionConfigProject_11_1_1()); | |
XMLUnmarshaller unmarshaller = context.createUnmarshaller(); | |
SessionConfigs eclipseLinkSessions = (SessionConfigs)unmarshaller.unmarshal(reader); | |
m_session = (DatabaseSessionConfig)eclipseLinkSessions.getSessionConfigs().firstElement(); | |
} catch (Exception exception) { | |
m_session = null; | |
} | |
} | |
protected void verify() { | |
if (m_session == null) { | |
throw new TestErrorException("The session on read back was null"); | |
} | |
// Name | |
check("Name", m_session.getName(), "EmployeeSession"); | |
// Profiler | |
check("Profiler", m_session.getProfiler(), "toplink"); | |
// Primary project | |
if (m_session.getPrimaryProject() != null) { | |
check("ProjectClass", m_session.getPrimaryProject().getProjectString(), "org.eclipse.persistence.demos.employee.relational.EmployeeProject"); | |
} else { | |
throw new TestErrorException("ProjectClass was null"); | |
} | |
// Exception handler class | |
check("ExceptionHandlerClass", m_session.getExceptionHandlerClass(), "handlerClass"); | |
// guy | |
// Custom server platform config | |
if (m_session.getServerPlatformConfig() != null) { | |
ServerPlatformConfig platformConfig = m_session.getServerPlatformConfig(); | |
if (platformConfig instanceof CustomServerPlatformConfig) { | |
check("ExternalTransactionControllerClass", ((CustomServerPlatformConfig)platformConfig).getExternalTransactionControllerClass(), "externalTransactionController"); | |
} else { | |
throw new TestErrorException("ServerPlatformConfig not correct type"); | |
} | |
} else { | |
throw new TestErrorException("ServerPlatformConfig was null"); | |
} | |
// Session customizer | |
check("SessionCustomizer", m_session.getSessionCustomizerClass(), "sessionCustomizer"); | |
// Log config | |
if (m_session.getLogConfig() instanceof DefaultSessionLogConfig) { | |
DefaultSessionLogConfig logConfig = (DefaultSessionLogConfig)m_session.getLogConfig(); | |
check("LogLevel", logConfig.getLogLevel(), "severe"); | |
check("Filename", logConfig.getFilename(), "logfile"); | |
} else { | |
throw new TestErrorException("LogConfig not correct type"); | |
} | |
// Login | |
if (m_session.getLoginConfig() instanceof DatabaseLoginConfig) { | |
DatabaseLoginConfig loginConfig = (DatabaseLoginConfig)m_session.getLoginConfig(); | |
checkBoolean("BatchWriting", loginConfig.getBatchWriting(), true); | |
checkBoolean("BindAllParameters", loginConfig.getBindAllParameters(), true); | |
checkBoolean("ByteArrayBinding", loginConfig.getByteArrayBinding(), false); | |
checkBoolean("CacheAllStatements", loginConfig.getCacheAllStatements(), false); | |
check("ConnectionURL", loginConfig.getConnectionURL(), "jdbc:oracle:thin:@otl-ora8infmx73:1521:toplinkj"); | |
check("DriverClass", loginConfig.getDriverClass(), "oracle.jdbc.OracleDriver"); | |
checkBoolean("ExternalConnectionPooling", loginConfig.getExternalConnectionPooling(), false); | |
checkBoolean("ExternalTransactionController", loginConfig.getExternalTransactionController(), false); | |
checkBoolean("ForceFieldNamesToUppercase", loginConfig.getForceFieldNamesToUppercase(), false); | |
checkBoolean("JdbcBatchWriting", loginConfig.getJdbcBatchWriting(), false); | |
check("MaxBatchWritingSize", loginConfig.getMaxBatchWritingSize(), new Integer(5)); | |
checkBoolean("NativeSequencing", loginConfig.getNativeSequencing(), false); | |
checkBoolean("NativeSQL", loginConfig.getNativeSQL(), false); | |
checkBoolean("OptimizeDataConversion", loginConfig.getOptimizeDataConversion(), true); | |
check("Password", loginConfig.getPassword(), "password"); | |
check("PlatformClass", loginConfig.getPlatformClass(), "platform"); | |
check("SequenceCounterField", loginConfig.getSequenceCounterField(), "SEQ_COUNT"); | |
check("SequenceNameField", loginConfig.getSequenceNameField(), "SEQ_NAME"); | |
check("SequencePreallocationSize", loginConfig.getSequencePreallocationSize(), new Integer(99)); | |
check("SequenceTable", loginConfig.getSequenceTable(), "\"SEQUENCE\""); | |
checkBoolean("StreamsForBinding", loginConfig.getStreamsForBinding(), false); | |
checkBoolean("StringBinding", loginConfig.getStringBinding(), false); | |
check("TableQualifier", loginConfig.getTableQualifier(), "table:"); | |
checkBoolean("TrimStrings", loginConfig.getTrimStrings(), true); | |
check("Username", loginConfig.getUsername(), "tljtest1"); | |
} else { | |
throw new TestErrorException("LogConfig not correct type"); | |
} | |
// Remote command manager | |
RemoteCommandManagerConfig rcmConfig = m_session.getRemoteCommandManagerConfig(); | |
if (rcmConfig == null) { | |
throw new TestErrorException("RemoteCommandManagerConfig was null"); | |
} else { | |
// Channel | |
check("Channel", rcmConfig.getChannel(), "new_channel"); | |
if (rcmConfig.getTransportManagerConfig() instanceof JMSTopicTransportManagerConfig) { | |
// Transport manager | |
JMSTopicTransportManagerConfig transportConfig = (JMSTopicTransportManagerConfig)rcmConfig.getTransportManagerConfig(); | |
check("OnConnectionError", transportConfig.getOnConnectionError(), "KeepConnection"); | |
check("TopicHostURL", transportConfig.getTopicHostURL(), "ormi://jms_topic_host"); | |
check("TopicConnectionFactoryName", transportConfig.getTopicConnectionFactoryName(), "test-topic-connection-factory-name"); | |
check("TopicName", transportConfig.getTopicName(), "test-topic-name"); | |
// Naming | |
JNDINamingServiceConfig namingConfig = transportConfig.getJNDINamingServiceConfig(); | |
if (namingConfig == null) { | |
throw new TestErrorException("JNDINamingServiceConfig was null"); | |
} else { | |
check("Naming URL", namingConfig.getURL(), "new_jndi_url"); | |
check("Naming Username", namingConfig.getUsername(), "guy"); | |
check("Naming Password", namingConfig.getPassword(), "password"); | |
check("InitialContextFactoryName", namingConfig.getInitialContextFactoryName(), "new_initial_context_factory_name"); | |
// Properties | |
Vector propertyConfigs = namingConfig.getPropertyConfigs(); | |
if (propertyConfigs == null) { | |
throw new TestErrorException("PropertyConfigs were null"); | |
} else if (propertyConfigs.size() != 2) { | |
throw new TestErrorException("PropertyConfigs were not the correct size"); | |
} else { | |
PropertyConfig one = (PropertyConfig)propertyConfigs.firstElement(); | |
check("Property name", one.getName(), "name1"); | |
check("Property value", one.getValue(), "value1"); | |
PropertyConfig two = (PropertyConfig)propertyConfigs.lastElement(); | |
check("Property name", two.getName(), "name2"); | |
check("Property value", two.getValue(), "value2"); | |
} | |
} | |
} else { | |
throw new TestErrorException("TransportManagerConfig not correct type"); | |
} | |
} | |
} | |
private void checkBoolean(String name, boolean one, boolean two) { | |
if (one != two) { | |
throw new TestErrorException("For: " + name + ", expecting: " + one + ", found: " + two); | |
} | |
} | |
private void check(String name, Object one, Object two) { | |
if (!one.equals(two)) { | |
throw new TestErrorException("For: " + name + ", expecting: " + one + ", found: " + two); | |
} | |
} | |
} |