如何在@create之前在Seam组件中设置属性?

时间:2010-11-22 22:44:46

标签: java seam javamail

我正在尝试设置组件org.jboss.seam.mail.mailSession的以下成员,这些成员定义为:

boolean ssl;
boolean tls = true;

(两者都有getter和setter方法) 在调用@Create注释的方法之前调用。 我想阻止框架使用SSL,TLS。 mailSession组件检查这些mebers是否已设置。如果是,它会创建强制javamail使用ssl的属性。

我到目前为止尝试过:

Object comp = Component.getInstance("org.jboss.seam.mail.mailSession");

问题:解压缩到无法访问组件的javax.mail.Session。

Object comp = Component.getInstance("org.jboss.seam.mail.mailSession", ScopeType.APPLICATION,false,false);

问题:由于没有创建实例,因此返回null。

Component comp = Component.forName("org.jboss.seam.mail.mailSession");

问题:返回组件而不是实例。

我应该怎么做才能切换2位,你会建议修补框架,还是有一种我忽略的简单方法?

3 个答案:

答案 0 :(得分:3)

根据Seam reference manualSeam forum,您应该可以在components.xml配置中直接停用TLS和SSL:

<mail:mail-session debug="true" tls="false" ssl="false" ... />

你有没试过?

答案 1 :(得分:2)

您是否尝试覆盖mailSession? 我不确定它是否有效......

的内容
@Name("org.jboss.seam.mail.mailSession")
@Install(precedence=Application)
class MyMailSession extends MailSession {

  //override the stuff you want here
}

答案 2 :(得分:1)

我用这个序列解决了它:

@In(create = true)
private Renderer renderer;
...
Component comp = Component.forName("org.jboss.seam.mail.mailSession");
MailSession ms = (MailSession)  comp.newInstance();
ms.setDebug(true);
ms.setTls(false);
ms.setSsl(false);
ms = ms.create();

renderer.render("/Mail.xhtml");

我想知道MailSession实例是如何附加到组件的,但是现在它可以工作。