我正准备使用新的EJB3 TimerService(作为Java EE 6的一部分),和往常一样,我对JavaDoc的简洁性印象深刻:)
你知道对象的persistent
属性有什么影响TimerConfig
吗?
JavaDoc TimerConfig说:persistent属性确定相应的计时器是否具有跨越创建它的JVM的生命周期.它是可选的,默认为true.
Jersey对服务器端处理Preconditions以响应Conditional-GET请求提供了很好的支持.
在客户端,它似乎不那么优雅/手动.据我所知,您需要自己存储实体的元数据(etag,最后修改的标头)并做出决定,何时设置哪些标头,评估响应代码,更新实体/元数据的本地缓存. ......等
你知道一个包含条件GET的现成的免费实现吗?我发现这个例子中,在海报使用CacheManager
和CacheEntry
; 我怀疑他自己的实施.这不应该是泽西岛客户自己的一部分吗?
是否正确,我永远不需要使用EntityManager#merge()
,只要我只处理附加的管理实体?换句话说,调用merge()
上的连接管理实体有没有影响?
或者是否存在合并有用的情况?我发现这个名字暗示我可以用它来处理OptimisticLockException
... :)
编辑:简单来说,我对托管实体的理解是,在交易结束时,其属性/字段的修改会持久保存到数据库中.
显然,通过JavaMail从Java EE应用程序发送电子邮件并不困难.我感兴趣的是接收电子邮件的最佳模式(主要是通知退回)?我对基于IMAP/POP3的方法(轮询收件箱)不感兴趣 - 我的应用程序将对入站电子邮件做出反应.
我能想到的一种方法是
myuser: "|/path/to/javahelper"
javahelper调用Java应用程序,传递STDIN.另一种方法可能是
myuser
(通过过滤器)到Java EE应用程序容器端口25.我之前做过的第一种方法(虽然使用不同的语言/设置).
从性能和(感知)清洁度的角度来看,我认为第二种方法更好,但它需要我提供适当的SMTP传输实现.另外,我不知道是否可以将网络套接字连接到bean ...
你有什么建议?你有关于第二种方法的细节吗?
我已经成功地javax.persistence.NamedQuery
与JPA2结合使用.命名查询在实体类文件的顶部定义,并使用无状态EJB(实体外观).
现在我必须将实体类文件提取到一个单独的Jar文件中(因此我们可以从Google Web Toolkit项目中使用它们).显然我仍然包含jar,但现在facade bean不再找到查询了:
java.lang.IllegalArgumentException: NamedQuery of name: Store.findByExternalId not found.
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.getDatabaseQueryInternal(EJBQueryImpl.java:576)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createNamedQuery(EntityManagerImpl.java:1004)
at com.sun.enterprise.container.common.impl.EntityManagerWrapper.createNamedQuery(EntityManagerWrapper.java:533)
at com.skalio.bonusapp.server.StoreFacade.getByExternalId(StoreFacade.java:43)
...
Run Code Online (Sandbox Code Playgroud)
这里有什么问题?我可以不在外部Jar中定义NamedQueries吗?
我刚刚找到了这个链接,建议将NamedQueries放在XML文件中,而不是作为实体文件中的注释.这可能是解决我的问题的一个想法,但不回答我的问题......;)
我需要从我的EJB3应用程序连接到MongoDB实例,在glassfish 3.0.1上运行.Mongo项目提供了一组驱动程序,我可以在独立的Java应用程序中使用它们.
我如何在Java EE应用程序中使用它们?或者更好的措辞:当我的应用程序在EJB容器中运行时,如何使第三方库可用于我的应用程序?
目前,在部署尝试从库导入的bean时,我收到了java.lang.NoClassDefFoundError:
[#|2010-03-24T11:42:15.164+0100|SEVERE|glassfishv3.0|global|_ThreadID=28;_ThreadName=Thread-1;|Class [ com/mongodb/DBObject ] not found. Error while loading [ class mvs.core.LocationCacheService ]|#]
[#|2010-03-24T11:42:15.164+0100|WARNING|glassfishv3.0|javax.enterprise.system.tools.deployment.org.glassfish.deployment.common|_ThreadID=28;_ThreadName=Thread-1;|Error in annotation processing: java.lang.NoClassDefFoundError: com/mongodb/DBObject|#]
[#|2010-03-24T11:42:15.259+0100|SEVERE|glassfishv3.0|javax.enterprise.system.core.com.sun.enterprise.v3.server|_ThreadID=28;_ThreadName=Thread-1;|Exception while loading the app
org.glassfish.deployment.common.DeploymentException: java.lang.NoClassDefFoundError: com/mongodb/DBObject
at org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:171)
at org.glassfish.kernel.event.EventsImpl.send(EventsImpl.java:125)
at org.glassfish.internal.data.ApplicationInfo.load(ApplicationInfo.java:224)
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:338)
Run Code Online (Sandbox Code Playgroud)
我尝试将其添加到NetBeans项目(属性 - >库 - >编译 - >添加Jar,启用'包'),我也尝试手动将jar文件复制到$ GF_HOME/glassfish/domains/domain1/lib(其中mysql-connector已驻留).
我是否需要使用容器"注册"库?通过注释引用它?扩展容器的类路径以包含库?
为了处理HTTP POST或PUT中的大型请求主体,依赖HttpServletRequest.getContentLength()
不是一个好主意,因为它只返回整数值,或者对于> 2GB的请求主体,返回-1.
但是,我认为没有理由,为什么不应该允许更大的请求机构.RFC 2616说
任何大于或等于零的Content-Length都是有效值.
是否有效使用HttpServletRequest.getHeader('content-length')
并将其解析为Long?
我试图找出,可以通过@Resource
注释注入无状态会话Bean.我在哪里可以找到一份清单?它取决于容器(在我的例子中是Glassfish 3.1.1)吗?
我按照这篇文章,由第一个自定义注入提供程序创建,LocaleProvider
它扫描HTTP请求以获取Accept-Language标头.如果我在Jersey资源中使用它,它可以正常工作:
@Path("test")
@GET
public Response getStatus(@Context Locale locale) {
log.finer("Locale: "+ locale);
Response response = Response
.noContent()
.build();
return response;
}
Run Code Online (Sandbox Code Playgroud)
但是当我想在它中使用它时ExceptionMapper
我不知道如何注入语言环境.我试图将它注释为成员变量:
public class MyExceptionMapper implements ExceptionMapper<MyException> {
@Context
private Locale locale;
@Override
public Response toResponse(MyException ex) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
但这在部署时失败:
The following errors and warnings have been detected with resource and/or provider classes:
SEVERE: Missing dependency for field: private java.util.Locale com.package.MyExceptionMapper.locale
Run Code Online (Sandbox Code Playgroud)
其他类似UriInfo
或HttpServletRequest
可以注入的东西.如何访问我自己的LocaleProvider?
仅供参考,使用Jersey 1.8进行Glassfish 3.1.1.
我需要为我的应用程序设置一个 mysql 会话变量,以便按预期使用 MariaDB Galera 集群。SQL 调用是:SET SESSION wsrep_sync_wait = 1
. 当应用程序使用数据库时,它应始终设置。我使用 EclipseLink 作为 JPA 提供程序。
我的问题是:实现这一目标的最佳方法是什么?
选项 1:EclipseLink 会话定制器
在 中注册会话定制器persistence.xml
:
public class SessionCustomizerImpl implements org.eclipse.persistence.config.SessionCustomizer {
private final static String WSREP_SYNC_WAIT_CHECK_SQL = "SHOW SESSION VARIABLES LIKE 'wsrep_sync_wait'";
private final static String WSREP_SYNC_WAIT_SET_SQL = "SET SESSION wsrep_sync_wait = 1";
@Override
public void customize(Session session) throws Exception {
Vector result = session.executeSQL(WSREP_SYNC_WAIT_CHECK_SQL);
if ((result != null) && !result.isEmpty()) {
session.executeNonSelectingSQL(WSREP_SYNC_WAIT_SET_SQL);
// Galera connection detected; wsrep_sync_wait set …
Run Code Online (Sandbox Code Playgroud)