ClassReflectionIndex<?> index = deploymentReflectionIndex.getClassIndex(mainClass);
Method method = index.getMethod(void.class, "main", String[].class);
if (method == null) {
throw MESSAGES.cannotStartAppClient(deploymentUnit.getName(), mainClass);
}
final ApplicationClientStartService startService;
final List<SetupAction> setupActions = deploymentUnit.getAttachmentList(org.jboss.as.ee.component.Attachments.OTHER_EE_SETUP_ACTIONS);
if (connectionPropertiesUrl != null) {
EJBClientConfiguration configuration;
try {
final File file = new File(connectionPropertiesUrl);
final URL url;
if (file.exists()) {
url = file.toURI().toURL();
} else {
url = new URL(connectionPropertiesUrl);
}
Properties properties = new Properties();
InputStream stream = null;
try {
stream = url.openStream();
properties.load(stream);
} finally {
if (stream != null) {
try {
stream.close();
} catch (IOException e) {
//ignore
}
}
}
final ClassLoader oldTccl = SecurityActions.getContextClassLoader();
try {
SecurityActions.setContextClassLoader(module.getClassLoader());
configuration = new PropertiesBasedEJBClientConfiguration(properties);
//if there is no username or callback handler specified in the ejb-client properties file
//we override the default
if (!properties.contains("username") && !properties.contains("callback.handler.class")) {
//no security config so we wrap the configuration
configuration = new ForwardingEjbClientConfiguration(configuration) {
@Override
public CallbackHandler getCallbackHandler() {
return callbackHandler;
}
};
}
startService = new ApplicationClientStartService(method, parameters, moduleDescription.getNamespaceContextSelector(), module.getClassLoader(), setupActions, configuration);
} finally {
SecurityActions.setContextClassLoader(oldTccl);
}
} catch (Exception e) {
throw AppClientMessages.MESSAGES.exceptionLoadingEjbClientPropertiesURL(connectionPropertiesUrl, e);
}
} else {
startService = new ApplicationClientStartService(method, parameters, moduleDescription.getNamespaceContextSelector(), module.getClassLoader(), setupActions, hostUrl, callbackHandler);
}
phaseContext.getServiceTarget()
.addService(deploymentUnit.getServiceName().append(ApplicationClientStartService.SERVICE_NAME), startService)
.addDependency(ApplicationClientDeploymentService.SERVICE_NAME, ApplicationClientDeploymentService.class, startService.getApplicationClientDeploymentServiceInjectedValue())
.addDependency(component.getCreateServiceName(), Component.class, startService.getApplicationClientComponent())
.install();
}