我正在努力让redux-saga与onmessage
听众合作.我不知道为什么我的工作不起作用.
我有以下设置.
// sagas.js
import { take, put } from 'redux-saga';
import {transactions} from "./actions";
function* foo (txs) {
console.log("yielding"); // appears in console
yield put(transactions(txs)); // action *is not* dispatched
console.log("yielded"); //appears in console
}
const onMessage = (event) => {
const txs = JSON.parse(event.data);
const iter = foo(txs);
iter.next(); // do I really need to do this?
};
function* getTransactions() {
while(yield take('APP_LOADED')) {
const stream = new EventSource(eventSourceUrl);
stream.onopen = onOpen;
stream.onmessage = onMessage;
stream.onerror …
Run Code Online (Sandbox Code Playgroud) 我想要的是
在Iphone上,当访问Safari或Chrome中的网站时,可以将内容分享给其他应用程序.在这种情况下,您可以看到我可以将内容(基本上是URL)共享到名为Pocket的应用程序.
有可能吗?特别是Cordova?
我从未使用过有状态的EJB.我知道有状态EJB对java客户端很有用.
但我想知道:在哪种情况下在Web应用程序中使用它们?如何?我们应该把这些有状态的bean放在Session中吗(因为无状态的http)?
这是一个好习惯吗?(没有过多讨论有状态与无状态)
由于检查了异常,我们可以在生产中遇到一些问题,将所有异常捕获到正确的位置并正确记录.
我想知道是否有一些开源工具可以帮助审核这些问题.
例如,是否有一些AOP工具会拦截抛出的所有异常并查看它们是否被重新抛出,包装或记录?这有助于识别不良捕获量.
如何用Hibernate/ORM(或其他ORM ......)保持干净的层?
清洁层分离的意思是将所有Hibernate内容保存在DAO层中.
例如,在创建一个大的CSV导出流时,我们应该经常做一些像evict这样的Hibernate操作来避免OutOfMemory ...输出流的填充属于视图,但是evict属于DAO.
我的意思是我们不应该将evict操作放在前端/服务中,我们也不应该把业务逻辑放在DAO中......那么在这种情况下我们能做些什么呢?
在许多情况下,你必须做一些事情,如逐出,刷新,清除,刷新,特别是当你玩交易,大数据或类似的事情...
那么你如何使用像Hibernate这样的ORM工具来保持清晰的层分离?
编辑:在工作中我不喜欢的是我们有一个自定义抽象DAO,允许服务将Hibernate标准作为参数.这是实用的,但对我来说理论上称这个DAO的服务不应该知道一个标准.我的意思是,我们不应该以任何方式将Hibernate内容导入业务/视图逻辑.
有答案,简单还是其他?
众所周知,当你代理一个对象时,比如当你用Spring/EJB创建一个具有事务属性的bean时,甚至当你用一些框架创建一个局部模拟时,代理对象也不知道,并且内部调用没有被重定向,然后没有截获......
这就是为什么如果你在Spring做类似的事情:
@Transactionnal
public void doSomething() {
doSomethingInNewTransaction();
doSomethingInNewTransaction();
doSomethingInNewTransaction();
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void doSomethingInNewTransaction() {
...
}
Run Code Online (Sandbox Code Playgroud)
当你打电话给doSomething时,除了主要的一个之外,你期望有3个新的交易,但实际上,由于这个问题,你只能得到一个......
所以我想知道你是如何处理这些问题的...
我实际上处在一个我必须处理复杂的事务系统的情况,我没有看到任何比将服务分成许多小服务更好的方法,因此我肯定会通过所有代理...
这让我很困扰,因为所有的代码属于同一个功能域,不应该拆分......
我发现这个相关问题的答案很有趣: Spring - @Transactional - 后台会发生什么?
Rob H说我们可以在服务中注入spring代理,并调用proxy.doSomethingInNewTransaction(); 代替.它很容易做到并且有效,但我真的不喜欢它......
侯云峰说:
所以我编写了自己的CglibSubclassingInstantiationStrategy和代理创建器版本,以便它将使用CGLIB生成一个真正的子类,该子类将调用委托给它的超级而不是另一个实例,Spring现在正在这样做.所以我可以自由地注释任何方法(只要它不是私有的),并且从我称之为这些方法的地方,它们将被处理.好吧,我仍然要付出代价:1.我必须列出我想要启用新CGLIB子类创建的所有注释.2.由于我现在正在生成子类,因此无法对最终方法进行注释,因此无法截获最终方法.
他说"现在哪个春天在做什么"是什么意思?这是否意味着现在拦截了内部交易呼叫?
你觉得哪个更好?
当您需要某些事务粒度时,是否拆分了类?或者你使用上面的一些解决方法?(请分享)
我想知道我的方法应该是什么签名,以便我优雅地处理不同类型的失败.
这个问题在某种程度上是我已经在Scala中处理错误的许多问题的总结.你可以在这里找到一些问题:
现在,我理解以下内容:
存储库层
现在请考虑我有一个UserRepository
.所述UserRepository
存储的用户,并限定了findById
方法.可能发生以下故障:
OutOfMemoryError
)此外,用户可能会丢失,从而导致Option[User]
结果
使用存储库的JDBC实现,可以抛出SQL,非致命异常(约束违规或其他),因此使用Try是有意义的.
当我们处理IO操作时,如果我们想要纯函数,那么IO monad也是有意义的.
所以结果类型可能是:
Try[Option[User]]
IO[Option[User]]
服务层
现在让我们介绍一个业务层,UserService
它提供了一些updateUserName(id,newUserName)
使用先前定义findById
的存储库的方法.
可能发生以下故障:
然后结果类型可以是:
Try[Either[BusinessError,User]]
IO[Either[BusinessError,User]]
这里的BusinessError不是Throwable,因为它不是一个例外的失败.
使用for-comprehensions
我想继续使用for-comprehensions来组合方法调用.
我们不能轻易地将不同的monad混合起来进行理解,所以我想我的所有操作都应该有一些统一的返回类型吗?
我只是想知道你在现实世界的Scala应用程序中如何成功地在不同类型的故障发生时继续使用for-understanding.
对于现在来说,for-comprehension对我来说很好,使用服务和存储库都可以返回,Either[Error,Result]
但是所有不同类型的故障都会融合在一起,并且处理这些故障会变得很糟糕.
您是否定义了不同类型的monad之间的隐式转换,以便能够使用for -reherehension?
你定义自己的monad来处理失败吗?
顺便说一下,我很快就会使用异步IO驱动程序.所以我想我的返回类型可能更复杂:IO[Future[Either[BusinessError,User]]]
任何建议都会受到欢迎,因为我真的不知道该使用什么,而我的应用程序并不花哨:它只是一个API,我应该能够区分可以向客户端显示的业务错误,以及技术错误.我试图找到一个优雅而纯粹的解决方案.
我想有一个很好的理由,但我不明白为什么有时我们会在同一台物理服务器上放置5个具有相同web应用程序的实例.
它与多处理器架构的优化有关吗?JVM或其他什么允许的最大ram限制?
我只是想知道为什么Java的TimeUnit类中缺少一些枚举?
实际上最大时间单位是DAY,而我想使用像WEEK,YEAR这样的东西......
假设我有一个方法def doSomething: String
可以DoSomethingException
在出现问题时提出.
如果我写Try(doSomething)
,是否有一种简单的方法来映射异常而不恢复它?
基本上,我希望失败成为一个BusinessException
由DoSomethingException
.
我知道执行此操作的代码非常简单,但是没有任何内置运算符可以执行此操作吗?这似乎是一个非常常见的操作,但我在API中找不到任何东西.