Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Кроме последнего маркетингового термина?
В основном все ресурсы Ваши потребности программы сохранены "где-нибудь" в Интернете. Вы взаимодействуете с ними по определенному контракту на обслуживание; SOAP, REST, POX или безотносительно и что происходит после этого, до поставщика услуг. Вы не заботитесь о том, как Ваша информация хранится или как услуга предоставляется, просто что это.
, Если, например, Вы хотели хранить файлы, можно принять решение использовать облачную систему Amazon S3. Вы соединяетесь с сервисом и загружаете свои файлы; Вы не знаете или заботитесь, где файлы хранятся, только местоположение точки входа к тому сервису.
, Если у Вас есть приложение тогда, это может также быть, работал в облаке, предполагая, что это подходит. Живая Сетка, например, является виртуальной машиной, против которой можно кодировать и запустить программное обеспечение и локально и в облаке, таким образом, пользователь просто переходит к URI и находит программу, Вы не заботитесь, где это вне его являющийся доступным где-нибудь на облаке.
Это - вычисление, которое происходит в распределенном в Интернете. Идея состоит в том, что вместо того, чтобы создать Ваши собственные ресурсы, Вы помещаете свои данные, приложения в Облаке. Это облако, как предполагается, имеет 100%-ю доступность и бесконечную масштабируемость. Для большего количества детали: http://vineetgupta.spaces.live.com/blog/cns!8DE4BDC896BEE1AD!1326.entry
Даже что-то простое, такое как веб-почта, как могут полагать, содержит нашу информацию "в облаке". То есть то, что данные не сохранены локально, они хранятся на той волшебной облачной вещи, названной Интернетом.
Это - в основном просто модное словечко для хранения материала удаленно. Этот список подводит итог, почему он используется.
FTP копирует => Хранить файлы в облаке
SSHing в удаленный ПК для выполнения кода => Облачные вычисления
Веб-почта => Облачная почта
SSHing в удаленный ПК для выполнения кода, который предсказывает погоду => Облачные вычисления через Облачные вычисления
(я попробовал таблицу HTML, но это не представляло...)
, вентилятор Звуков не делает этого!
Термин является столь новым, что нет никакого принятого определения, особенно так как Dell (!) не удалось регистрировать термин как торговую марку.
По существу идея подобна той из утилиты - Вы хотите электричество, но Вы не заботитесь, какая электростанция предоставляет его, потому что существует электричество предоставления сети всем, и можно просто насладиться им. Который работает на электричество, но Интернет просто еще не вполне настолько сложен. Но это - Видение.
услуги Amazon S3 просто обеспечивают дисковое пространство, и это не заботится, кто использует его или где они расположены в мире. Конечно, офисные инструменты Google (и сеть Microsoft, предлагающая), предлагают услугу, не конкретную машину, которая будет заботиться о Ваших потребностях приложения. Снова, можно создать и работать с электронной таблицей, но Вы не знаете, где та электронная таблица хранится, или на какой машине она работает - просто, что это доступно, когда Вы хотите ее.
Web 2.0 является другим термином, изо всех сил пытающимся найти определение, но можно вообразить электронную таблицу с помощью вычислений, которые встраиваются в другую машину где-нибудь и результаты хранения его вычислений на Amazon S3. Границы исчезают в этой точке.
, поскольку это доступно везде, откуда Вы входите в систему, к этому можно было получить доступ отовсюду в мире. Это "в облаке", потому что это видно отовсюду (не хорошая аналогия, но...)
Облачные вычисления - это аппаратные услуги (включая вычисления, сеть и емкость хранения), где:
Существует мощная экономическая сила, стоящая за этой простой моделью: предоставление и использование услуг облачных вычислений обычно позволяет гораздо эффективно использовать ресурсы по сравнению с хостингом на собственном хостинге и типом хостинга центра обработки данных. ] Фрагмент из этой статьи об облачных вычислениях .
Мне нравится объяснение этого видео:
http://www.youtube.com/watch?v=XdBd14rjcs0&feature=related
Краткая версия: Google и Salesforce.com, среди другие продают компьютерное пространство и «виртуализированные» среды приложений, которые позволяют запускать вашу программу на их машинах. Как виртуальный веб-хостинг, но для программ и приложений, а не только для веб-сайтов. Сейчас это громкое модное слово, потому что крупные игроки действительно продвигают его как способ заработать больше денег на своей инфраструктуре и неиспользуемых тактовых циклах. В частности, Salesforce, вы можете винить в этой последней версии «облачных вычислений» их и Force.com, поскольку они очень активно продвигали свои услуги, используя термин «облачные вычисления» и, по доверенности, идею облачных вычислений. вычисляет себя.
Во-первых, чтобы избавиться от этого: Облачные вычисления - это модное маркетинговое слово, и оно плохо определено (по крайней мере, на данный момент) .
Я бы хотел рекомендую проанализировать это всеобъемлющее модное слово и в сегментах рынка, а именно:
Возвращаясь к вашим точкам:
Цель облачных вычислений - полностью исключить любого живого человека со стороны провайдера.
Любые другие хорошие и плохие свойства облачных вычислений являются просто побочный продукт этой идеи.
Ничто из этого не делает ваше приложение облачным. Это облачное приложение, если оно работает в облаке. Что такое облако?
Разница между облачными вычислениями и распределенными вычислениями?
Модель разработки веб-сайтов имеет тенденцию работать в облаке, поскольку многие части системы по своей сути параллельны. Однако есть различные дизайнерские решения (э-э, ошибки?), Которые могут ограничить степень параллелизма, который может быть достигнут. Вы по-прежнему можете запускать такую программу в облаке, но она не получит почти такого преимущества, как высокопараллельное приложение.
Технологии, о которых вы говорите, можно использовать для создания высокопараллельных приложений, но это не так. не происходит автоматически, вы все равно должны понимать, что делаете.
В основном маркетинговый термин часа. Спросите 5 человек, и вы получите 6 ответов. Я слышал, что некоторые люди описывают облачные вычисления как Google Docs, потому что вы храните свои данные «в облаке». Другие думают об этом больше как о динамическом размещении и хостинге, например, Amazon EC2 или Google App Engine.
Я объясню, как я пришел к пониманию облачных вычислений, на нескольких примерах:
Допустим, вы создаете веб-приложение для личных финансов. Вы обращаетесь к нескольким банкам со своим предложением, и им нравится идея, но они отказываются предоставить вам доступ к своим серверам для веб-службы. В облачных вычислениях банки могут создать веб-службу в облачной службе, такой как Microsoft Azure, которая будет извлекать данные с их сервера. Тогда вы бы назвали их веб-службу из облака, а не их серверы. По сути, это «облако» на промежуточном сервере, управляемом уважаемой компанией, такой как Microsoft, IBM, Google и т. Д.
С другой стороны, для банка оно снижает ответственность и затраты на управление веб-сервисами и необходимым аппаратным / программным обеспечением. Если у небольшого кредитного союза есть только серверы хранения данных и нет веб-сервера, облако предоставляет им такую же возможность участвовать в вашем приложении, как и крупный банк.
Таким образом, вы можете представить облако как посредник веб-сервисов и / или хранилище данных.
Думаю, у меня есть рабочее решение. Спасибо всем за то, что указали мне правильное направление (я надеюсь).
Сборки не могут быть выгружены напрямую, но AppDomain могут. Я создал вспомогательную библиотеку, которая загружается в новый домен приложения и может скомпилировать новую сборку из кода. Вот как выглядит класс в этой вспомогательной библиотеке:
public class CompilerRunner : MarshalByRefObject
{
private Assembly assembly = null;
public void PrintDomain()
{
Console.WriteLine("Object is executing in AppDomain \"{0}\"",
AppDomain.CurrentDomain.FriendlyName);
}
public bool Compile(string code)
{
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
CompilerParameters parameters = new CompilerParameters();
parameters.GenerateInMemory = true;
parameters.GenerateExecutable = false;
parameters.ReferencedAssemblies.Add("system.dll");
CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, code);
if (!results.Errors.HasErrors)
{
this.assembly = results.CompiledAssembly;
}
else
{
this.assembly = null;
}
return this.assembly != null;
}
public object Run(string typeName, string methodName, object[] args)
{
Type type = this.assembly.GetType(typeName);
return type.InvokeMember(methodName, BindingFlags.InvokeMethod, null, assembly, args);
}
}
Он очень простой, но его было достаточно для тестирования. PrintDomain нужен, чтобы убедиться, что он действительно живет в моем новом домене приложений. Компиляция берет некоторый исходный код и пытается создать сборку. Run позволяет нам тестировать выполнение статических методов из данного исходного кода.
Вот как я использую вспомогательную библиотеку:
static void CreateCompileAndRun()
{
AppDomain domain = AppDomain.CreateDomain("MyDomain");
CompilerRunner cr = (CompilerRunner)domain.CreateInstanceFromAndUnwrap("CompilerRunner.dll", "AppDomainCompiler.CompilerRunner");
cr.Compile("public class Hello { public static string Say() { return \"hello\"; } }");
string result = (string)cr.Run("Hello", "Say", new object[0]);
AppDomain.Unload(domain);
}
Она в основном создает домен, создает экземпляр моего вспомогательного класса (CompilerRunner), использует его для компиляции нового сборка (скрытая), запускает некоторый код из этой новой сборки, а затем выгружает домен, чтобы освободить память.
Вы заметите использование MarshalByRefObject и CreateInstanceFromAndUnwrap. Они важны для обеспечения того, чтобы вспомогательная библиотека действительно существовала в новом домене.
Если кто-то заметит какие-либо проблемы или у вас есть предложения по их улучшению, я хотел бы их услышать.
Amazon RDS)Возвращаясь к вашим соображениям:
Предлагаю вам прочитать эту статью
Выше облаков: взгляд на облачные вычисления в Беркли, без раздумий
Не будет никаких сомнений на ваш взгляд. В области исследований эта статья называется введением в облачные вычисления