В последний раз я проверил, это требует, чтобы Вы создали свой собственный ViewEngine. Я не знаю, помогли ли они в RC1 все же.
основной подход я использовал, прежде чем первый RC был, в моем собственном ViewEngine, чтобы разделить пространство имен контроллера и искать папки, которые соответствовали частям.
РЕДАКТИРОВАНИЕ:
Возвратился и нашел код. Вот общее представление.
public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName)
{
string ns = controllerContext.Controller.GetType().Namespace;
string controller = controllerContext.Controller.GetType().Name.Replace("Controller", "");
//try to find the view
string rel = "~/Views/" +
(
ns == baseControllerNamespace ? "" :
ns.Substring(baseControllerNamespace.Length + 1).Replace(".", "/") + "/"
)
+ controller;
string[] pathsToSearch = new string[]{
rel+"/"+viewName+".aspx",
rel+"/"+viewName+".ascx"
};
string viewPath = null;
foreach (var path in pathsToSearch)
{
if (this.VirtualPathProvider.FileExists(path))
{
viewPath = path;
break;
}
}
if (viewPath != null)
{
string masterPath = null;
//try find the master
if (!string.IsNullOrEmpty(masterName))
{
string[] masterPathsToSearch = new string[]{
rel+"/"+masterName+".master",
"~/Views/"+ controller +"/"+ masterName+".master",
"~/Views/Shared/"+ masterName+".master"
};
foreach (var path in masterPathsToSearch)
{
if (this.VirtualPathProvider.FileExists(path))
{
masterPath = path;
break;
}
}
}
if (string.IsNullOrEmpty(masterName) || masterPath != null)
{
return new ViewEngineResult(
this.CreateView(controllerContext, viewPath, masterPath), this);
}
}
//try default implementation
var result = base.FindView(controllerContext, viewName, masterName);
if (result.View == null)
{
//add the location searched
return new ViewEngineResult(pathsToSearch);
}
return result;
}
В Tomcat возможно следующее, возможно, Glassfish устанавливает аналогичную переменную среды, указывающую на расположение файловой системы:
log4j.appender.logfile.File=${catalina.home}/logs/MyApplication.log
$ {catalina.home}
- это свойство среды / системы, установленное Tomcat указывает на его установочный каталог. Log4j может расширять их, по крайней мере, в PropertyConfigurer
.
Вам необходимо указать абсолютный путь, а не относительный (предполагая пути Unix):
log4j.appender.logfile.File=/path/to/MyDomain/logs/MyApplication.log
Фактически, это log4j, который разрешает переменную $ {catalina.home}, Glassfish объявляет $ {catalina.home} как $ {com.sun.aas.instanceRoot}, указывающий на путь / to / MyDomain /
Вы можете объявить любую переменную в среде GF и поместить ее в log4j.properties, log4j проанализирует их, когда настроен log4j.
Это действительно полезно для установки параметров конфигурации ведения журнала на основе сервера, используя те же log4.properties для тестирования и развертывания
Райан Бейтс имеет Railscast, где он показывает создание поисков как ресурс. Концепция по-прежнему действительна, даже если вы не делаете Рейлз.
http://railscasts.com/episodes/111-advanced-search-form
-121--4460360- Учитывая, что SimpleDateFormat
не является потокозащитным, я бы сказал, что самый лаконичный способ - использовать Joda Time вместо него. Затем можно создать единый форматтер (вызов wityZone (DateTimeZones.UTC)
, чтобы указать, что вы хотите UTC), и вы отсутствуете:
private static DateTimeFormatter formatter = DateTimeFormat.forPattern(...)
.withZone(DateTimeZone.UTC);
...
String result = formatter.print(instant);
Это другое преимущество, что вы можете использовать Joda Time в другом месте вашего кода, что всегда хорошая вещь:)
-121--4154926-Вы можете настроить приложение на использование $ {com.sun.aas.instureRoot}, но в отличие от некоторых других комментариев это должно быть:
log4j.appender.logfile.File=${com.sun.aas.instanceRoot}/logs/MyApplication.log
Это правильное расположение для журналов в каталоге ../domains/domain {x }/logs.