如何配置计划间隔:
@Schedule(persistent=true, minute="*", second="*/5", hour="*")
在应用程序代码之外?
将应用程序部署为EAR(使用1个EJB和1个WAR模块)与单独的模块有什么区别?我想使用GlassFish 3 Web配置文件,但它不支持EAR存档.我可以简单地将EJB和WAR用作单独的模块吗?还有其他选择吗?
我想创建一个Producer,它可以将java.util.ResourceBundle注入任何类,以便轻松获取本地化的Strings.我的ResourceBundle-Producer看起来像这样:
public class ResourceBundleProducer {
@Inject
public Locale locale;
@Inject
public FacesContext facesContext;
@Produces
public ResourceBundle getResourceBundle() {
return ResourceBundle.getBundle("/messages", locale )
}
}
Run Code Online (Sandbox Code Playgroud)
Locale和FacesContext的注入工作(从Seam 3 Alpha Source获取相应的生产者).但不幸的是,ResourceBundle不是Serializable,因此不能以这种方式生成.当我试图访问一个调用使用我的ResourceBundle的bean的JSF页面时,我从Weld得到以下错误:
Caused by: org.jboss.weld.IllegalProductException: WELD-000054 Producers cannot produce non-serializable instances for injection into non-transient fields of passivating beans\\n\\nProducer\: org.jboss.weld.bean-/D:/Program Files (x86)/GlassFish-Tools-Bundle-For-Eclipse-1.2/glassfishv3/glassfish/domains/teachernews/applications/teachernews/-ProducerMethod-services.producers.ResourceBundleProducer.getResourceBundle()\\nInjection Point\: field web.PersonHome.bundle
有没有办法让我的ResourceBundleResolver工作?或者是否有其他机制来获得类似的功能?提前致谢!
编辑:
好的,我将花费一些我几乎没有得到的积分;)也会接受一个很好的解决方法来解决这个问题!
我有另一个例子,创建一个Producer不起作用:一个FlashProducer.还无法生成FacesContext-Flash,因为Flash不可序列化.
我目前正在创建一个EJB3数据访问类来处理我的Java EE 6应用程序中的所有数据库操作.现在,由于Java EE 6提供了新的ApplicationScoped
注释,我想知道我的EJB应该具有什么状态,或者它应该是无状态的.
让DAO成为@Stateless
会话Bean或@ApplicationScoped
Bean 会更好吗?怎么样@Singleton
?这些与DAO相关的选项有何不同?
编辑: 我正在使用Glassfish 3.0.1与完整的Java EE 6平台
我有一个使用Facelets的简单JSF2应用程序.我的web.xml设置如下: -
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
我想将应用程序默认设置为欢迎页面/pages/login.xhtml.在转到浏览器中的上下文根目录时,我似乎无法获得欢迎文件设置.
我的web.xml欢迎设置如下: -
<welcome-file-list>
<welcome-file>/pages/login.jsf</welcome-file>
</welcome-file-list>
Run Code Online (Sandbox Code Playgroud)
如何强制欢迎页面转到登录页面并确保它通过faces servlet?
如果我使用以下页面显示页面,但它没有通过面部servlet,因此面部组件不会呈现: -
<welcome-file-list>
<welcome-file>pages/login.xhtml</welcome-file>
</welcome-file-list>
Run Code Online (Sandbox Code Playgroud)
任何帮助赞赏!
我在Netbeans 7中有一个Java EE 6项目,当我在IDE中编译并启动它时运行正常.但是,当我清理和构建项目时,我得到了一个
java.lang.RuntimeException
::javax.annotation.processing.FilerException
尝试为类型{myclass
} 重新创建文件
(其中myclass
始终是JPA实体类).
如果我在代码中更改某些内容,它会更改哪个实体类.
我不知道可能导致这个错误的原因 - 任何人都可以提供一个想法.
我使用的唯一额外的lib是Velocity.
更新:我在同一个数据库上使用两个持久性单元,一个是"普通",另一个是非事务性.我用于将事物记录到数据库的非事务性的; 每次插入日志事件后提交.
当我改变它并且只使用一个'普通'PU时,项目编译得很好.可能是两个PU干扰了eclipselink做的一些优化吗?
这是堆栈跟踪的开始:
An annotation processor threw an uncaught exception.
Consult the following stack trace for details.
java.lang.RuntimeException: javax.annotation.processing.FilerException: Attempt to recreate a file for type de.guj.contenthub.ftdts.entity.AgofEntry_
at org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor.process(CanonicalModelProcessor.java:407)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:625)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:554)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:699)
at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:981)
at com.sun.tools.
Run Code Online (Sandbox Code Playgroud) 我应该首先说我是Java EE的新手,我还没有扎实的Java理论背景.
我在掌握如何JPA
与interfaces
Java 一起使用时遇到了麻烦.为了说明我发现的困难,我创建了一个非常简单的例子.
如果我有两个简单的接口Person
和Pet
:
public interface Person
{
public Pet getPet();
public void setPet(Pet pet);
}
public interface Pet
{
public String getName();
}
Run Code Online (Sandbox Code Playgroud)
而一个实体PersonEntity
,它实现Person
还有一个PetEntity
它实现了Pet
:
@Entity
public class PersonEntity implements Person
{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private PetEntity pet;
@Override
public void setPet(Pet pet)
{
/* How do i solve this? */
}
}
@Entity
public class PetEntity implements Pet
{
@Id …
Run Code Online (Sandbox Code Playgroud) 考虑这种情况,在不同的无状态bean中存在两种方法
public class Bean_A {
Bean_B beanB; // Injected or whatever
public void methodA() {
Entity e1 = // get from db
e1.setName("Blah");
entityManager.persist(e1);
int age = beanB.methodB();
}
}
public class Bean_B {
//Note transaction
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void methodB() {
// complex calc to calculate age
}
}
Run Code Online (Sandbox Code Playgroud)
由BeanA.methodA启动的事务将被挂起,并且将在BeanB.methodB中启动新事务.如果methodB需要访问由methodA修改的同一实体,该怎么办?这会导致死锁.是否可以在不依赖隔离级别的情况下阻止它?
是否可以将请求范围的CDI bean注入无状态会话bean?
我曾经问了一个相关的问题,并认为具体的CDI @RequestScoped @Stateless问题值得自己发帖.
在EJB方法/ @RequestScoped和@Stateless之间传递状态
我还问了一个关于JMS @MessageDriven bean的类似问题 - 基本上想要了解@Stateless的相同内容.
如果我可以选择,我将JBoss 7用于使用JSF 2和CDI的Java EE 6项目.
但有时候,客户项目的环境或多或少都会被设置 - 所以在一种情况下我们只限于Tomcat(6或7或7).
所以,我读了几篇关于在Tomcat中使用CDI(例如WELD)和JSF 2的文章,这表明这样做基本没问题.
不过,我的问题是 - 它有意义吗?或者servlet容器是不是这种架构的合适环境?有没有人使用Tomcat + CDI获得比演示项目更多的经验?
提前致谢!