请注意:这个问题几乎与这个题为"从grails 2.3.8 2.4升级时的资源插件错误"的问题重复,但是在我看来,有些事情是不同的,值得将它作为一个单独的问题提出:
所以,我要求你在关闭/关闭投票之前作为一个骗子,请指出我在其他问题中提供的确切解决方案也将适用于我的确切情况.如果你不能那样做,请不要关闭/关闭这个问题!
我正在将Grails 2.3.6应用程序升级到Grails 2.4.4.我做的时候run-app得到:
Error |
2015-03-05 14:42:44,257 [localhost-startStop-1] ERROR [localhost].[/myapp] - Exception starting filter sitemesh
java.lang.ClassNotFoundException: org.codehaus.groovy.grails.web.sitemesh.GrailsPageFilter
at org.grails.plugins.tomcat.ParentDelegatingClassLoader.findClass(ParentDelegatingClassLoader.java:59)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:532)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:514)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:142)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:258)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4809)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5485)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Error |
2015-03-05 14:42:44,268 [localhost-startStop-1] ERROR core.StandardContext - …Run Code Online (Sandbox Code Playgroud) 我看到CachedGaugeDropWizard Metrics(以前的Coda Hale Metrics)lib中有.我不知道为什么会有人曾经用这个?!?
我对指标价值的理解是它是实时,准确和相关的.如果度量标准报告过时/缓存值,它可能用于什么目的?
请注意:我本来打算将这个问题标题为" 何时在C中使用寄存器? ",但似乎有人已经打败了我.然而,与标题相比,问题的方式有点误导,我相信这个问题是独一无二的,而不是它的愚蠢.
然而,这个问题确实应该已经题为" 是register变量真的快? ",其实我是想知道何时应该使用registers.对我来说很明显它们实际上更快,但显然你的CPU只有很多芯片注册,所以你受限于它们可以存储在它们上面.
所以我问:我如何选择哪些变量应该合格register?与特定频率一起使用的变量?特定大小或类型的变量?在计算限制问题中使用的变量?别的什么?
我这样看:每个产品所有者或利益相关者,每个错误或特征都是"最优先"和关键.但是,如果你真的分析他们的需求,你会发现某些功能比其他功能更"优先".使用代码,您希望它尽可能快地运行,因此我确信每个变量都是优化/性能调优的候选者.不过,我会想象,如果你真的分析程序(或C编译器对于这个问题,让我们假设gcc),我敢肯定有一种方法来确定哪些变量是最适合与使用register.
我对SLF4J很感兴趣,因为它似乎是唯一的Java库(至少我可以解释),它在运行时使用这种所谓的" 动态绑定 "类来定义行为.
通过这个,我的意思是,如果你slf4j-api在编译类路径中包含,你现在可以访问该JAR中包含的所有API类(Loggers和LoggerFactories等),但它们的实际运行时行为是no-op(什么都不做),除非你包含一个运行时类路径上的" SLF4J绑定 ",例如slf4j-simple(将日志语句发送到STDOUT和STDERR),或者slf4j-log4j,然后期望Log4J配置等.
就像我上面所说的,这种类型的动态绑定行为似乎是SLF4J项目所特有的.
我想知道为什么?一般来说,在日志记录之外,哪种场景可以保证这种动态绑定作为解决方案?对我来说,它似乎是经典依赖注入(Spring,Guice)的替代方案,几乎将注入推迟到运行时("JIT")确定运行时类路径上可用的匹配类.
所以我问:这个解决方案是否唯一有理由只解决日志记录问题?如果是这样,为什么?如果没有,那么还有哪些其他问题需要这种方法作为解决方案?
请注意:尽管这个问题特别提到了Dropwizard,但我相信任何具有Jersey / JAX-RS经验的人都应该能够回答这个问题,因为我认为Dropwizard只是遵循了Jersey / JAX-RS的惯例。
我有一个Dropwizard服务,该服务以JSON 进行改写 /编写,并且效果很好。
我现在想将其切换为读/写二进制数据(以最小化网络带宽)。我看到有Dropwizard-Protobuf库,但是我对在Dropwizard中实现二进制序列化有一些担忧。
首先,这是我当前(以JSON为中心)代码中的重要内容:
// Groovy pseudo-code
// Domain entity/POJO
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
class Fizz {
@JsonProperty
String name
@JsonProperty
boolean isBuzz
}
// The Dropwizard app entry point
class FizzService extends Application<FizzConfiguration> {
@Override
void run(FizzConfiguration fizzCfg, Environment env) throws Exception {
// ... lots of stuff
env.jersey().register(new FizzService())
}
}
// JAX-RS resource with a sample GET endpoint
@Path(value = "/fizz")
@Produces(MediaType.APPLICATION_JSON)
class …Run Code Online (Sandbox Code Playgroud) jax-rs jersey protocol-buffers binary-serialization dropwizard
这是我的代码:
// Groovy
interface MyMapper {
Buzz toBuzz(Fizz fizz);
}
class MyMapperImpl implements MyMapper {
@Named("SIMPLE_FOOBAR")
Foobar foobar;
MyMapperImpl(Foobar foobar) {
super();
this.foobar = foobar;
}
@Override
Buzz toBuzz(Fizz fizz) {
// ...etc.
}
}
class Whistlefeather {
MyMapper mapper;
Whistlefeather(MyMapper mapper) {
super();
this.mapper = mapper;
}
void doSomething(Fink fink) {
Fizz fizz = getSomehow(fink);
Buzz buzz = mapper.toBuzz(fizz);
// Do something with 'buzz'...
}
}
class ApplicationMain {
Whistlefeather whistlefeather;
@Inject
ApplicationMain(Whistlefeather whistlefeather) {
super();
this.whistlefeather = whistlefeather; …Run Code Online (Sandbox Code Playgroud) Mac在这里.我通过工具箱安装了Docker ,所有Docker命令都会产生同样的错误:
myuser@mymachine:~/tmp$docker info
Get http:///var/run/docker.sock/v1.20/info: dial unix /var/run/docker.sock: no such file or directory.
* Are you trying to connect to a TLS-enabled daemon without TLS?
myuser@mymachine:~/tmp$sudo docker info
Password:
Get http:///var/run/docker.sock/v1.20/info: dial unix /var/run/docker.sock: no such file or directory.
* Are you trying to connect to a TLS-enabled daemon without TLS?
* Is your docker daemon up and running?
Run Code Online (Sandbox Code Playgroud)
有趣的是,然而:
myuser@mymachine:~/tmp$docker -v
Docker version 1.8.1, build d12ea79
Run Code Online (Sandbox Code Playgroud)
谷歌搜索结果 | 对于此错误表示工具箱未正确安装,并且需要设置以下(或所有)以下环境变量之一:
DOCKER_HOST; 和/或DOCKER_CERT_PATH; 和/或 …所以我试图围绕一个典型的Kubernetes pod看起来像什么.根据他们的文档,一个pod:
" 一个pod(如在一群鲸鱼或豌豆荚中)对应于一个以共享上下文运行的共同应用程序组. "
后来在同一篇文章中:
" Pod可用于托管垂直集成的应用程序堆栈,但它们的主要动机是支持共存...... "
好的,您可以将单个窗格组织为整个垂直堆栈(从数据库到Web应用程序).但显然这通常不是它的组织方式,所以我认为通常一个" 横向 "组织是首选的(为什么??).
但对我来说,水平分层/分层意味着你在一个pod中只有一个容器,因为通常在每个服务层(web,app,cache,db等)中你都有一种类型的组件.
我们举一个具体的例子.假设我们有以下垂直堆栈:
这些是应用程序堆栈中相当典型的组件.如果我们反对Kubernetes自己的建议,并创建"垂直对齐"的pod,每个pod将由每层的一种类型的容器(web/app服务器,每个微服务,每个DB等)组成.
但是如何组织水平对齐的吊舱呢?什么容器会进入哪个容器?
Grails服务是用于在控制器外部实现业务逻辑(以及连接到支持服务/ DB等)的抽象.所以在典型的控制器中你可能有:
class DashboardController {
StatisticsService statsService
def index() {
// Fetches all the stats that need to be displayed to the
// admin on the dashboard.
AdminDashboardMetrics adm = statsService.getAdminStats()
render(view: "/dashboard", model: [ adm: adm ])
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,Grails自动注入DashboardController一个bean实例StatisticsService(当然提供服务是否正确创建grails create-service ...).
但是当我需要在控制器StatisticsService 外部访问时会发生什么,特别是在src/groovy?
// src/groovy/com/example/me/myapp/FizzBuzzer.groovy
class FizzBuzzer {
StatisticsService statsService
FizzBuzzer(StatisticsService statsService) {
super()
this.statsService = statsService
}
def doSomething(MyData input) {
MoreData result = statsService.calculate(input)
// use …Run Code Online (Sandbox Code Playgroud) 这是我的Spock单元测试:
def "when favorite color is red then doSomething produces empty list of things"() {
given:
FizzBuzz fizzBuzz = Mock(FizzBuzz)
fizzBuzz.name >> 'Dark Helmet'
fizzBuzz.attributes >> [:]
fizzBuzz.attributes["favcolor"] >> 'red'
fizzBuzz.attributes["age"] >> '36'
Something something = new Something(fizzBuzz)
when:
Whoah whoah = something.doSomething()
then:
!whoah.things
}
Run Code Online (Sandbox Code Playgroud)
这是FizzBuzz模拟:
public interface FizzBuzz extends Serializable {
Map<String, Object> getAttributes();
}
Run Code Online (Sandbox Code Playgroud)
当我运行这个时,我得到:
java.lang.NullPointerException: Cannot invoke method rightShift() on null object
at com.commercehub.houston.SomethingSpec.when favorite color is red then doSomething produces empty list of …Run Code Online (Sandbox Code Playgroud) java ×4
docker ×2
dropwizard ×2
grails ×2
architecture ×1
binding ×1
c ×1
classloader ×1
classpath ×1
gcc ×1
groovy ×1
guice ×1
jax-rs ×1
jersey ×1
kubernetes ×1
macos ×1
metrics ×1
optimization ×1
sitemesh ×1
slf4j ×1
spock ×1
unit-testing ×1