小编Sev*_*vas的帖子

为什么JSF多次调用getter

假设我像这样指定一个outputText组件:

<h:outputText value="#{ManagedBean.someProperty}"/>
Run Code Online (Sandbox Code Playgroud)

如果我在someProperty调用getter for时打印一条日志消息并加载页面,那么注意每个请求多次调用getter是很容易的(在我的情况下发生了两次或三次):

DEBUG 2010-01-18 23:31:40,104 (ManagedBean.java:13) - Getting some property
DEBUG 2010-01-18 23:31:40,104 (ManagedBean.java:13) - Getting some property
Run Code Online (Sandbox Code Playgroud)

如果someProperty计算的值很昂贵,这可能是一个问题.

我用Google搜索了一下,认为这是一个已知问题.一个解决方法是包括一个检查,看看它是否已经计算过:

private String someProperty;

public String getSomeProperty() {
    if (this.someProperty == null) {
        this.someProperty = this.calculatePropertyValue();
    }
    return this.someProperty;
}
Run Code Online (Sandbox Code Playgroud)

这个问题的主要问题是你得到大量的样板代码,更不用说你可能不需要的私有变量了.

这种方法有哪些替代方案?没有那么多不必要的代码,有没有办法实现这一目标?有没有办法阻止JSF以这种方式行事?

感谢您的输入!

getter performance jsf el

253
推荐指数
4
解决办法
9万
查看次数

Java预定执行程序的准确性

我在使用Java预定执行程序时遇到了一个特殊问题,并且想知道我所经历的是否正常.

我需要安排以5秒的预定义速率执行的任务.预计这些任务将不时需要超过5秒的时间执行,但是当运行它们的时间低于5秒时,备份的任务列表应该快速连续运行以赶上.当运行的任务,重要的是要知道什么是原定的执行时间(考虑scheduledExecutionTime()java.util.TimerTask).最后,我需要跟踪预定时间和实际时间之间的差异,以确定时间表"漂移"的时间和数量.

到目前为止,我已经使用Java执行器实现了所有这些,下面的类说明了一般的想法:

public class ExecutorTest {
    public static final long PERIOD = 5000;

    public static void main(String[] args) {
        Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(
                new Command(), 0, PERIOD, TimeUnit.MILLISECONDS);
    }

    private static final class Command implements Runnable {
        long timestamp = 0;

        public void run() {
            long now = System.currentTimeMillis();

            if (timestamp == 0) {
                timestamp = now;
            }

            // Drift is the difference between scheduled time and execution time
            long drift = now - timestamp;

            String format = …
Run Code Online (Sandbox Code Playgroud)

java scheduling executor

10
推荐指数
1
解决办法
2969
查看次数

Oracle SYS_CONTEXT 的 PostgreSQL 和/或 SQL Server 替代品

使用 Oracle DB 一段时间后,我习惯使用 Oracle DB 应用程序上下文来实现访问限制。简而言之,登录时调用一个过程,将用户详细信息放入 Oracle 应用程序上下文中,如下所示:

DBMS_SESSION.SET_CONTEXT('context_name', 'user_id', user_id);
Run Code Online (Sandbox Code Playgroud)

然后可以通过创建视图来强制访问,这些视图将在上下文中查找以确定用户可以看到哪些行,如下所示:

CREATE VIEW users_vw AS 
SELECT *
  FROM users
 WHERE user_id = SYS_CONTEXT('context_name', 'user_id');
Run Code Online (Sandbox Code Playgroud)

我现在已经不再使用 Oracle,而是在个人项目中使用 PostgreSQL,在工作中使用 SQL Server 2000 和 2008。谁能告诉我 PostgreSQL 或 SQL Server 是否提供相应的功能?

sql-server oracle postgresql

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

在Java中对二进制数据进行标记

我正在编写一些代码来处理二进制数据流.它以字节数组表示的块接收.结合起来,字节数组表示连续的消息流,每个消息都以相同的常量终结符值结束(在我的情况下为0xff).但是,终结符值可以出现在任何给定数据块的任何位置.单个块可以包含消息的一部分,多个消息以及其间的任何内容.

以下是对此处理的数据的一小部分示例:

[0x00, 0x0a, 0xff, 0x01]
[0x01, 0x01]
[0xff, 0x01, 0xff]
Run Code Online (Sandbox Code Playgroud)

应将此数据转换为以下消息:

[0x00, 0x0a, 0xff]
[0x01, 0x01, 0x01, 0xff]
[0x01, 0xff]
Run Code Online (Sandbox Code Playgroud)

我写了一个小班来处理这个问题.它有一种方法以字节数组格式添加一些数据,然后将其放在缓冲区数组中.遇到终结符时,将清除字节数组,并将完整的消息放入消息队列中,可以使用hasNext()和next()方法(类似于迭代器)进行访问.

这个解决方案工作正常,但是当我完成它时,我意识到在我可以使用的已建立的库中可能已经存在一些稳定,高性能和经过测试的代码.

所以我的问题是 - 你知道一个实用程序库会有这样一个类,或者标准的Java 6库中有什么东西可以做到这一点吗?

java binary

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

java.io.FileDescriptor#sync()是否特定于单个FileDescriptor

我希望在我的应用程序中的某些点写入文件后强制同步到磁盘.因为它在Linux上运行,所以我可以逃避运行

Runtime.getRuntime().exec("sync");
Run Code Online (Sandbox Code Playgroud)

但是,我宁愿不介绍Linux特定的系统调用,而宁愿使用

java.io.FileDescriptor#sync();
Run Code Online (Sandbox Code Playgroud)

但是,我使用Apache VFS在本地文件系统上执行操作,据我所知,它不提供对底层文件描述符的访问.但是,我是否需要访问刚刚写入的实际文件描述符以强制同步?例如,我是否可以不使用任何FileDescriptor来调用同步效果

FileDescriptor.in.sync();
Run Code Online (Sandbox Code Playgroud)

这是一种有效的方法,结果是否与Linux中调用同步的结果相匹配?

万一有人知道是否可以如何访问VFS中的底层FileDescriptor,那么知道也是有用的.

编辑:看起来

FileDescriptor.in.sync();
Run Code Online (Sandbox Code Playgroud)

不想在Linux上运行(虽然它在从Eclipse运行时可以在我的Windows机器上运行),但是

new FileOutputStream(new File("anyfile")).getFD().sync();
Run Code Online (Sandbox Code Playgroud)

肯定是有效的,调用它的结果与直接调用Linux sync命令的结果相匹配.但是,它涉及打开和关闭冗余文件输出流,因此它并不完全理想.任何其他原因这可能是一个坏主意,因为它似乎有效吗?是否有其他方法可以获得可用于同步的FileDescriptor?

java filesystems vfs

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

将静态网格线添加到JFreeChart时间序列图表

我正在尝试在JFreeChart中实现具有特殊要求的时间序列图表.我可以绘制图表,但我不知道如何在图表的最后一个值处实现垂直红线.它应始终位于同一位置,并且应始终与最后一个值相交.

我绝对不会想到如何做到这一点.我当时认为可以将它作为静态网格线实现,但我不知道如何指定一个.

此外,图表的大小将是静态的,因此一些迂回的方式是可以接受的,希望不引入任何第三方库.

可以在这里找到我想要实现的图像.

谢谢.

jfreechart gridlines

3
推荐指数
1
解决办法
3248
查看次数

在WIX中执行自定义操作时未安装的文件

我正在为我想要安装的软件包编写WXS文件.为了简单起见,假设我想安装1个文件然后我想对它执行一个命令(在我的例子中,它是一个公共GPG密钥,我想在安装完成后导入它).以下是我的WXS文件的相关部分:

<CustomAction Id="ImportKey" Directory="INSTALLDIR"
              ExeCommand="[SystemFolder]cmd.exe /C gpg --import keyfile.key"
              Return="check" />

<!-- Install file keyfile.key into C:\GnuPG -->
<Directory Id="TARGETDIR" Name="SourceDir">
    <Directory Id="INSTALLDIR" Name="GnuPG">
        <Component Id="GnuPGConfiguration" Guid="E9469F1C-A875-1014-A3B3-DEF3264B13C4">
            <File Name="keyfile.key" Id="KeyfileKey" />
        </Component>
    </Directory>
</Directory>

<Feature Id="GnuPGConfiguration" Level="1" Title="GnuPG Configuration">
    <ComponentRef Id="GnuPGConfiguration" />
</Feature>

<!-- Run custom action after files are installed -->
<InstallExecuteSequence>
    <Custom Action="ImportKey" After="InstallFiles">NOT Installed AND NOT PATCH</Custom>
</InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)

我可以成功构建MSI.安装时,我使用msiexec并打开日志记录.它说安装在自定义操作上失败,并在日志中找到正确的命令.手动运行它.如果我注释掉命令的执行,则文件安装在正确的位置(安装后存在C:\ GnuPG\keyfile.key).

我尝试运行dir ant将其输出重定向到文件,而不是运行我的GPG命令.查看它,我可以看到keyfile.key不在C:\ GnuPG中的文件中.似乎该命令在安装文件之前运行.

关于我做错了什么的任何想法?

wix

2
推荐指数
1
解决办法
1773
查看次数

Icefaces的默认外观以及如何自定义它

我有一个关于造型Icefaces的问题.我有一个可以使用Icefaces组件的最小应用程序,但是当我使用它们并查看页面时,组件没有样式化(例如按钮具有默认外观,并且选项卡看不到所有,没有图像,没有).我想知道为什么这是我应该做的,所以我会得到默认的Icefaces看起来工作.

接下来我没有得到的是如何通过更改一些自动应用于组件的默认css样式类来自定义外观,因此我使用的每个组件都会获得更改的样式.

谢谢您的回答!

java icefaces

0
推荐指数
1
解决办法
7129
查看次数