我觉得在Scala中使用actor有点不安全.我已经阅读了有关如何做东西的文档,但我想我还需要一些DO NOT规则才能随意使用它们.我想我会害怕以错误的方式使用它们,我甚至都不会注意到它.
你能想到一些东西,如果应用的话,会导致Scala演员带来的好处,甚至是错误的结果吗?
import akka.actor.Actor
class MyActor extends Actor {..}
val system = ActorSystem("MySystem")
在我的类路径中,我没有名为"akka"的包.我确实看到了scala.actors
,但它似乎并没有被弃用.
那么,Akka Actors以哪种方式"分发"的一部分?
如果确实如此,那么我仍然应该将"akka-actor_2.10"库添加为依赖项吗?
如果是这样,我是否使用akka.Actor或未弃用的scala.actors.Actor?
我有这段代码从文件加载属性:
class Config {
val properties: Properties = {
val p = new Properties()
p.load(Thread.currentThread().getContextClassLoader.getResourceAsStream("props"))
p
}
val forumId = properties.get("forum_id")
}
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常.
我已经尝试将初始化移动properties
到另一个val中loadedProperties
,如下所示:
class Config {
val properties: Properties = loadedProps
val forumId = properties.get("forum_id")
private val loadedProps = {
val p = new Properties()
p.load(Thread.currentThread().getContextClassLoader.getResourceAsStream("props"))
p
}
Run Code Online (Sandbox Code Playgroud)
}
但它不起作用!(properties
在null中properties.get("forum_id")
).
那为什么会这样?loadedProps
引用时不评估properties
?
其次,这是初始化需要非平凡处理的变量的好方法吗?在Java中,我将声明它们的final
字段,并在构造函数中执行与初始化相关的操作.
Scala中是否存在此方案的模式?
谢谢!
我正在尝试生成包含表格的报告.这些是jrxml的重要部分:
<jasperReport
<subDataset name="Table Dataset 1">
<field name="field1" class="java.lang.String"/>
</subDataset>
<summary>
<jr:table>
<datasetRun subDataset="Table Dataset 1">
<dataSourceExpression>
<![CDATA[$P{REPORT_DATA_SOURCE}]]>
</dataSourceExpression>
</datasetRun>
<jr:column width="90">
<jr:columnHeader>...</jr:columnHeader>
<jr:detailCell height="20">
<textField>
<textFieldExpression class="java.lang.String">
<![CDATA[$F{territory}]]>
</textFieldExpression>
</textField>
</jr:detailCell>
</jr:column>
<jr:table>
</summary>
</jasperReport>
Run Code Online (Sandbox Code Playgroud)
我传递给报告的数据源类型是JRBeanArrayDataSource,这似乎没问题,因为数据出现在报告中(如果我在主表中使用$ F {field1} - 在表外).
你在我使用表组件的方式中看到了什么问题吗?我没有看到任何错误......但是没有显示表格......只有一条水平线而不是表格.
这里有两个似乎被普遍接受的陈述,但我无法真正克服:
1)Scala的副名称params优雅地替换了令人讨厌的log4j使用模式:
if (l.isDebugEnabled() ) {
logger.debug("expensive string representation, eg: godObject.toString()")
}
Run Code Online (Sandbox Code Playgroud)
因为在方法调用之前不会评估by-name-parameter(特定于Scala的语言特性).
2)但是,这个问题是通过slf4f中的参数化日志记录解决的:
logger.debug("expensive string representation, eg {}:", godObject[.toString()]);
Run Code Online (Sandbox Code Playgroud)
那么,这是如何工作的?在"调试"方法执行之前,slf4j库中是否存在一些阻止参数评估的低级魔法?(甚至可能吗?图书馆可以影响语言的这一基本方面吗?)
或者只是一个简单的事实,一个对象被传递给方法 - 而不是一个字符串?(并且可能在debug()方法本身中调用该对象的toString()(如果适用).
但那么,log4j也不是这样吗?(它确实有Object params的方法).这不意味着如果你传递一个字符串 - 如上面的代码 - 它的行为与log4j相同吗?
我真的很想在这个问题上有一些亮点.
谢谢!
我需要的功能是在配置的日志文件的开头写一个标题行.此外,日志文件应该根据时间模式滚动(我说的是logback 1.0.7).
所以,我正在考虑编写一个Appender - 虽然我不确定它是不是我真正需要的自定义布局.
1)Appender
根据logback的文档,正确的方法是扩展AppenderSkeleton
,但那么我将如何将其与RollingFileAppender
(以使文件翻转?)相结合?
另一方面,如果我扩展RollingFileAppender
,我会覆盖哪种方法来装饰现有的功能?我怎么告诉它只在文件的开头写这个特定的字符串?
2)布局
类似地,该方法似乎正在扩展LayoutBase
,并提供实现doLayout(ILoggingEvent event)
.但同样,我不知道如何装饰行为 - 只是在文件中添加一个新行,而不是破坏其功能(因为我仍然希望其余日志正确显示).
将getFileHeader()
在LayoutBase
看起来很有希望,但我要如何使用它?是否打算被自定义布局覆盖?(可能是的,因为它是Layout界面的一部分,但那又怎么样?)
谢谢!
是否有任何工具可以连接到 jvm 并实时显示类如何加载到该 jvm 中?我想它会成为一个很棒的 jvisualvm 插件..但是没有找到这样的东西让我想知道这是否可行?我只找到了一些看似“晦涩”的工具的参考资料,这些工具与 weblogic 或 webspere 严格相关。
假设这样的工具是可能的,它是否与特定容器严格相关?
谢谢!
我正在尝试设置我的项目以使用scalatest和scalamock.我正在使用scala版本2.10.0.
但是,我似乎无法让依赖正确.
我已经开始使用这段代码:
class ControllerTest extends org.scalatest.FunSuite
with org.scalamock.scalatest.MockFactory {}
Run Code Online (Sandbox Code Playgroud)
我尝试了两种版本的组合:
1)
这就是我得到的:
scala: bad symbolic reference.
A signature in MockFactory.class refers to type SuiteMixin in package org.scalatest which is not available.
It may be completely missing from the current classpath, or the version on the classpath might be incompatible with the version used when compiling MockFactory.class.
Run Code Online (Sandbox Code Playgroud)
注意:在scalamock文档中,指定了工件id而没有尾随_2.10,但是maven找不到任何这样的工件.此外,我在他们的网站上找不到scalamock应该使用什么最大的版本.
2)
编译器说:
scala: overriding …
Run Code Online (Sandbox Code Playgroud) scala ×5
actor ×2
akka ×2
appender ×1
callbyname ×1
classloader ×1
constructor ×1
final ×1
immutability ×1
ireport ×1
jvm ×1
layout ×1
logback ×1
maven ×1
mocking ×1
scala-2.10 ×1
scalatest ×1
slf4j ×1
xmltable ×1