小编teo*_*teo的帖子

斯卡拉演员 - 最糟糕的做法?

我觉得在Scala中使用actor有点不安全.我已经阅读了有关如何做东西的文档,但我想我还需要一些DO NOT规则才能随意使用它们.我想我会害怕以错误的方式使用它们,我甚至都不会注意到它.

你能想到一些东西,如果应用的话,会导致Scala演员带来的好处,甚至是错误的结果吗?

scala actor akka

49
推荐指数
2
解决办法
6113
查看次数

2.10中Akka和scala.actors之间的关系

  • Scala 2.10发行说明中说:" Akka Actors现在是发行版的一部分.原来的Scala演员现在已被弃用. "
  • 最新的Akka库("Akka 2.1.0 for Scala 2.10")提到了以下依赖:com.typesafe.akka:akka-actor_2.10:2.1.0
       以及以下示例:
             import akka.actor.Actor
             class MyActor extends Actor {..}
             val system = ActorSystem("MySystem")

  • 我的项目包括以下库:
             org.scala琅:斯卡拉库:2.10.0
             org.scala琅:斯卡拉-演员:2.10.0
  • 在我的类路径中,我没有名为"akka"的包.我确实看到了scala.actors,但它似乎并没有被弃用.

    那么,Akka Actors以哪种方式"分发"的一部分?
    如果确实如此,那么我仍然应该将"akka-actor_2.10"库添加为依赖项吗?
    如果是这样,我是否使用akka.Actor或未弃用的scala.actors.Actor

    scala actor akka scala-2.10

    16
    推荐指数
    1
    解决办法
    3497
    查看次数

    Scala - vals的初始化顺序

    我有这段代码从文件加载属性:

    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中是否存在此方案的模式?

    谢谢!

    constructor scala final initialization immutability

    9
    推荐指数
    2
    解决办法
    3612
    查看次数

    Jasper表组件

    我正在尝试生成包含表格的报告.这些是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} - 在表外).

    你在我使用表组件的方式中看到了什么问题吗?我没有看到任何错误......但是没有显示表格......只有一条水平线而不是表格.

    jasper-reports ireport xmltable

    8
    推荐指数
    1
    解决办法
    1万
    查看次数

    slf4j中的参数化日志记录 - 它与scala的by-name参数相比如何?

    这里有两个似乎被普遍接受的陈述,但我无法真正克服:

    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相同吗?

    我真的很想在这个问题上有一些亮点.

    谢谢!

    scala parameter-passing slf4j callbyname

    8
    推荐指数
    1
    解决办法
    4109
    查看次数

    自定义日志附加程序 - 预先添加文件标题并进行翻转

    我需要的功能是在配置的日志文件的开头写一个标题行.此外,日志文件应该根据时间模式滚动(我说的是logback 1.0.7).

    所以,我正在考虑编写一个Appender - 虽然我不确定它是不是我真正需要的自定义布局.

    1)Appender

    根据logback的文档,正确的方法是扩展AppenderSkeleton,但那么我将如何将其与RollingFileAppender(以使文件翻转?)相结合?

    另一方面,如果我扩展RollingFileAppender,我会覆盖哪种方法来装饰现有的功能?我怎么告诉它只在文件的开头写这个特定的字符串?

    2)布局

    类似地,该方法似乎正在扩展LayoutBase,并提供实现doLayout(ILoggingEvent event).但同样,我不知道如何装饰行为 - 只是在文件中添加一个新行,而不是破坏其功能(因为我仍然希望其余日志正确显示).

    getFileHeader()LayoutBase看起来很有希望,但我要如何使用它?是否打算被自定义布局覆盖?(可能是的,因为它是Layout界面的一部分,但那又怎么样?)

    谢谢!

    layout logback rollingfileappender appender

    8
    推荐指数
    2
    解决办法
    3732
    查看次数

    Java类加载可视化/分析工具

    是否有任何工具可以连接到 jvm 并实时显示类如何加载到该 jvm 中?我想它会成为一个很棒的 jvisualvm 插件..但是没有找到这样的东西让我想知道这是否可行?我只找到了一些看似“晦涩”的工具的参考资料,这些工具与 weblogic 或 webspere 严格相关。

    假设这样的工具是可能的,它是否与特定容器严格相关?

    谢谢!

    jvm classloader

    5
    推荐指数
    1
    解决办法
    1747
    查看次数

    Scalatest和scalamock - 涉及SuiteMixin的依赖性问题

    我正在尝试设置我的项目以使用scalatest和scalamock.我正在使用scala版本2.10.0.
    但是,我似乎无法让依赖正确.

    我已经开始使用这段代码:

    class  ControllerTest extends org.scalatest.FunSuite 
                          with org.scalamock.scalatest.MockFactory {}
    
    Run Code Online (Sandbox Code Playgroud)

    我尝试了两种版本的组合:

    1)

    • org.scalatest:scalatest_2.10:1.9.1
    • org.scalamock:scalamock-scalatest-support_2.10:3.0.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)

    1. org.scalatest:scalatest_2.10:1.9.1
    2. org.scalamock:scalamock-scalatest-support_2.10.0-RC5:3.0-M8

    编译器说:

    scala: overriding …
    Run Code Online (Sandbox Code Playgroud)

    scala mocking dependency-management maven scalatest

    4
    推荐指数
    1
    解决办法
    2420
    查看次数