小编Ing*_*her的帖子

如何从视图/内部代码访问javax.faces.PROJECT_STAGE?

[我的设置:Java EE 6应用程序,带有EJB3.1,CDI/Weld,在Glassfish 3.0.1上运行的JSF2]

我刚刚在这个页面上阅读了Faces ProjectStage ,这很酷.所以我在我的Web.xml中配置它,将其设置为Development:

<context-param>
  <param-name>javax.faces.PROJECT_STAGE</param-name>   
  <param-value>Development</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)

现在我想从JSF视图访问ProjectStage(相应地设置特定UI组件的可见性).

因此,我已经尝试过像输出文本这样的值#{javax.application.projectStage},它似乎是null,我也尝试了许多其他变种,但没有成功.我甚至无法从Java代码中访问ProjectStage(然后我可以用Bean自己公开它).

如何访问应用程序中的PROJECT_STAGE值?

java jsf jsf-2

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

无需使用部署描述符即可动态添加Java EE安全角色

我正在使用Glassfish 3.1,B06开发Java EE 6应用程序.为了保护我的应用程序,我正在使用JDBCRealm和编程安全性.这可以很好地检查用户名和密码.但是当谈到声明安全角色时,我遇到了一个问题:

要在Java EE 6中使用安全角色,我必须在EJB部署描述符和Glassfish特定的部署描述符中声明这些角色以链接这些角色(如Java EE 6教程中所述)仅我可以使用方法isCallerInRole(String roleRef)在EJB内部检查权限.

这对我的应用程序来说是不可取的,因为我希望能够动态地和以编程方式添加安全角色,而不必编写XML文件(例如,可以在数据库中定义角色名称).

我刚刚通过GF3源代码进行了调试,并在com.sun.ejb.containers.EjbContextImpl中看到了isCallerInRole的实现.容器从EJB描述符中获取角色:

public boolean isCallerInRole(String roleRef) {
  (...)
  EjbDescriptor ejbd = container.getEjbDescriptor();
  RoleReference rr = ejbd.getRoleReferenceByName(roleRef);
  (...)
}
Run Code Online (Sandbox Code Playgroud)

我环顾四周,发现如果我能以某种方式在我的应用程序中获取EJB描述符,我可以添加这样的角色:

EjbDescriptor ejbd = //??? Can i use that descriptor inside my app, or is that "forbidden"?
RoleReference rr = new RoleReference("admin", "Admins are allowed to do everything");
ejbd.addRoleReference(rr);
Run Code Online (Sandbox Code Playgroud)

有人做过这样的事情,还是对此有所了解?是否可以在我的应用程序中使用Ejb部署描述符?还是有更好的方法?

PS或我应该使用MBeans添加角色?在这里找到一个相关的帖子.

ejb glassfish java-ee ejb-3.1 glassfish-3

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

Bash完成脚本的单元测试

我想为一个(相当复杂的)Bash完成脚本编写一个单元测试,最好用Python编写 - 只需要以编程方式获取Bash完成的值.测试应如下所示:

def test_completion():
  # trigger_completion should return what a user should get on triggering 
  # Bash completion like this: 'pbt createkvm<TAB>' 
  assert trigger_completion('pbt createkvm') == "module1 module2 module3" 
Run Code Online (Sandbox Code Playgroud)

如何以编程方式模拟Bash完成以检查我的工具的测试套件内的完成值?

python bash bash-completion

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

properties-maven-plugin:加载属性文件时出错

我想从我的pom.xml中提取属性文件中的所有属性.这些是常见的属性,如依赖版本,插件版本和目录.我正在使用properties-maven-plugin,但它不能像我想要的那样工作.

我的pom.xml的基本部分:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>properties-maven-plugin</artifactId>
  <version>1.0-alpha-1</version>
  <executions>
    <execution>
      <phase>initialize</phase>
      <goals>
        <goal>read-project-properties</goal>
      </goals>
      <configuration>
       <files>
          <file>${basedir}/pom.properties</file>
        </files>
      </configuration>
    </execution>
  </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

现在,当我运行"mvn属性:read-project-properties"时,我收到以下错误:

[INFO] One or more required plugin parameters are invalid/missing for 'properties:read-project-properties'

[0] Inside the definition for plugin 'properties-maven-plugin' specify the following:

<configuration>
  ...
  <files>VALUE</files>
</configuration>.
Run Code Online (Sandbox Code Playgroud)

pom.properties文件与pom.xml位于同一目录中.我该怎么做才能让properties-maven-plugin读取我的属性文件?

编辑

我在http://jira.codehaus.org/browse/MOJO-1523提交了一个问题.它已被关闭为"不是一个bug",原因是:

这是设计的.项目定义必须是自包含的,否则如果从别处作为传递deps的一部分引用它则不再完整.

maven-2 maven-plugin

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

Scala 2.8:使用带有数组参数的Java注释

我正在尝试使用Scala 2.8实现JavaEE会话Bean.
因为它是一个远程会话Bean,我必须使用以下Java Annotation对其进行注释:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Remote {
  Class[] value() default {};
} 
Run Code Online (Sandbox Code Playgroud)

我只为scala 2.7 找到了这个例子.在Scala 2.7中,可以像这样定义会话bean:

@Remote {val value = Array(classOf[MyEJBRemote])}
class MyEJB
...
Run Code Online (Sandbox Code Playgroud)

如何使用Scala 2.8以相同的方式使用此注释?我已经尝试了许多不同的版本,所有这些都导致"注释参数需要是一个常量","非法启动简单表达式".所有这些定义都不起作用:

@Remote{val value = Array(classOf[MyEJBRemote])}
@Remote(val value = Array(classOf[MyEJBRemote]))
@Remote(Array(classOf[MyEJBRemote]))
Run Code Online (Sandbox Code Playgroud)

scala scala-2.8

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

在decorator类中,访问包含装饰方法的类的实例

我有以下装饰器,它在@saveconfig调用装饰的方法后保存配置文件:

class saveconfig(object):
    def __init__(self, f):
        self.f = f

    def __call__(self, *args):
        self.f(object, *args)
        # Here i want to access "cfg" defined in pbtools
        print "Saving configuration"
Run Code Online (Sandbox Code Playgroud)

我在下面的类中使用这个装饰器.createkvm调用该方法后,配置对象self.cfg应保存在装饰器中:

class pbtools()
    def __init__(self):
        self.configfile = open("pbt.properties", 'r+')
        # This variable should be available inside my decorator
        self.cfg = ConfigObj(infile = self.configfile)

    @saveconfig
    def createkvm(self):
        print "creating kvm"
Run Code Online (Sandbox Code Playgroud)

我的问题是我需要访问self.cfg装饰器内的对象变量saveconfig.第一个天真的方法是向装饰器添加一个参数来保存对象@saveconfig(self),但这不起作用.

如何在装饰器中访问方法主机的对象变量?我是否必须在同一个类中定义装饰器才能获得访问权限?

python decorator

9
推荐指数
1
解决办法
2513
查看次数

在将对象序列化为XML时如何添加XML命名空间(xmlns)

我在XStream的帮助下将对象序列化为XML.如何告诉XStream将xmlns插入到对象的XML输出中?

作为一个例子,我有这个我要序列化的简单对象:

@XStreamAlias(value="domain")
public class Domain
{
    @XStreamAsAttribute
    private String type;

    private String os;

    (...)
}
Run Code Online (Sandbox Code Playgroud)

如何使用XStream 完全实现以下输出?

<domain type="kvm" xmlns:qemu="http://libvirt.org/schemas/domain/qemu/1.0">
  <os>linux</os>
</domain>
Run Code Online (Sandbox Code Playgroud)

java xstream xml-serialization xml-namespaces

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

Python setup.py:在安装过程中询问配置数据

我使用PIP打包我的Python应用程序,提供了setup.py.在安装过程中,我想询问用户多个值(用户名,其他配置值),然后将这些值保存在用户目录中存储的应用程序配置文件中.

在安装过程中是否有特殊的PIP/distutils方式来询问这些配置值?或者我应该用它input来询问用户,如下所示:

#!/usr/bin/env python

from distutils.core import setup

cfg['name'] = input("Please your username:")
cfg.save()

setup(name='appname',
      version='1.0',
      description='App Description',
      author='Author',
      author_email='author@author.net',
      packages=['mypackage'],
     )
Run Code Online (Sandbox Code Playgroud)

或者我应该不考虑这些值,而是让用户在第一次启动时配置应用程序?

我知道所有这些方法都是可能的,但是有没有任何约定或最佳实践呢?或者你知道一个流行的Python项目做类似的东西,这是一个很好的例子?

python distutils pip easy-install

9
推荐指数
1
解决办法
1096
查看次数

获取char的键盘扫描码

我想与Virtualbox-VM进行交互,以无人值守地安装Virtualbox-Guest-Additions.因此,我必须向VM发送击键.我可以通过使用VBoxManage-API来实现这一点,我将扫描码的HEX发送到VM:

# sends "b" to the VM
VBoxManage controlvm "$VMNAME" keyboardputscancode <HEX>
Run Code Online (Sandbox Code Playgroud)

现在我想向VM发送一个完整的命令,例如:

mount /dev/scd0 /media/cdrom0<Enter>
Run Code Online (Sandbox Code Playgroud)

因此,我必须将该字符串的每个字符转换为扫描码,并使用VBoxManage将其发送到VM.

如何将这些字符转换为Linux上相应的键盘扫描码?我的VM具有与主机相同的键盘映射.我正在寻找可以使用的东西:

$ getscancode n
> 31
Run Code Online (Sandbox Code Playgroud)

linux scancodes

9
推荐指数
1
解决办法
7983
查看次数

从IDE中运行远程服务器上的TestNG/JUnit集成测试

在我的IDE(Eclipse或NetBeans,无所谓)中,我有一些TestNG测试类(但我的问题也指远程JUnit测试),它们是Integration测试.这些测试需要集成服务器才能运行,它们无法在本地计算机上运行.他们需要集成服务器的完整环境 - 不仅仅是JavaEE容器相关的东西(=>没有Arquillian,也没有JEEUnit).

现在我希望能够在我的IDE(Eclipse)中运行这些测试 - 最好使用TestNG插件 - 但是当我启动它们时,它们实际上应该在远程集成服务器上运行.

是否可以从我的IDE中启动远程服务器上的集成测试?我喜欢在远程服务器上安装某种代理的想法,它等待测试请求并执行它们.但正如我所说,如果从TestNG插件内部运行它会很好.

我是否需要某种解决方法,例如Ant脚本(希望不是)或某些Maven魔法?什么是最佳做法?

我知道我也可以为我的应用程序创建Webservices,然后我可以从本地单元测试中调用它们.但我想知道是否还有没有Webservices的可能性.

java junit testng integration-testing java-ee

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